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



Am正在运行前台服务来扫描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并检测附近的设备。

最新更新