问题描述
正在运行前台服务以扫描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并检测设备附近的情况。