Я столкнулся с проблемой, связанной со сканированием рекламы BLE. После выключения экрана мое сканирование работает неопределенное время, а затем останавливается, пока я не включу экран. BtGatt.ScanManager регистрирует «Невозможно запустить неотфильтрованное сканирование при выключенном экране».
Я предоставляю фильтры сканирования, как показано ниже
class IBeaconScanFilterProvider : BeaconScanFilterProvider {
override fun get(uuid: UUID): ScanFilter {
val manufacturerData = ByteBuffer.allocate(23)
val manufacturerDataMask = ByteBuffer.allocate(23)
val uuidBytes = getByteArrayFromGuid(uuid.toString())!!
for (i in 2..17) {
manufacturerData.put(i, uuidBytes[i - 2])
manufacturerDataMask.put(i, 0x01)
}
return ScanFilter.Builder()
.setManufacturerData(
0x004C, //IBeacon
manufacturerData.array(),
manufacturerDataMask.array()
).build()
}
}
Затем я начинаю сканирование с использованием кода ниже
bluetoothScanner.startScan(
arrayListOf(beaconScanningContext.filters),
beaconScanningContext.settings,
RxBleBroadcastReceiver.newPendingIntent(context)
)
Каждые 10 минут я сбрасываю сканирование, чтобы избежать блокировки, которая отключает сканирование через 10 минут, добавлено в android 8
Я тестирую это решение на Android 5.1 (LG G2), Android 7.1.1 (Nexus 6P), Android 8.1 (Pixel XL) и Android 10 (Xiaomi Mi9), и возникла проблема на Pixel и Mi9
Что-то я делаю неправильно?