屏幕锁定时无法运行ble扫描仪

问题描述

正在运行前台服务以扫描ble设备,当手机未锁定时,该设备工作正常。但是,当手机被锁定时,扫描仪将无法检测到附近的任何设备。手机锁定时,扫描计数始终为0。我还为我的扫描仪添加了过滤器,但仍然没钱。寻找帮助。

//adding filters of the manufacturer and the uuid

    fun startScan(){
        settings = ScanSettings.Builder()
                        .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
                        .build()
    
                val builder = ScanFilter.Builder()
                builder.setManufacturerData(0x004c,byteArrayOf())
                val manufactureFilter= builder.build()
    
                val uuidBuilder = ScanFilter.Builder()
                val serviceUuidString = "f8c62883-xxxx-xxxx-xxxx-430326af8bd0"
                val serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF"
                val parcelUuid: ParcelUuid = ParcelUuid.fromString(serviceUuidString)
                val parcelUuidMask: ParcelUuid = ParcelUuid.fromString(serviceUuidMaskString)
                uuidBuilder.setServiceUuid(parcelUuid,parcelUuidMask)
                val uuidFilter = uuidBuilder.build()
    
                filters = ArrayList<ScanFilter>()
                filters.add(manufactureFilter)
                filters.add(uuidFilter)
    
                scanLeDevice(true)
    }

//to start the ble scan for a short period

    fun scanLeDevice(enable: Boolean) {
        if (enable) {
            Log.i(TAG,"Scanning started")
            if(beaconCollectionTimer != null){
                beaconCollectionTimer?.cancel()
            }
            beaconCollectionTimer = Timer()
            beaconCollectionTimer?.schedule(object : TimerTask(){
                override fun run() {
                    scanLeDevice(false)
                }
    
            },SCANNING_INTERVEL)
    
            bluetoothAdapter.getBluetoothLeScanner()
                .startScan(filters,settings,mScanCallback)
    
        } else {
            Log.i(TAG,"scanning stopped")
            if (bluetoothAdapter.getBluetoothLeScanner() != null) {
                bluetoothAdapter.getBluetoothLeScanner().stopScan(mScanCallback)
            }
            isScanning = false
        }
    }

解决方法

尝试各种库以使扫描仪正常工作后,我意识到问题不在代码中,而与节电有关。我所做的只是从电池优化应用程序列表中删除了该应用程序,而我的扫描仪开始按预期运行。即使在锁定屏幕之后,也可以运行bleScanner并检测设备附近的情况。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...