Я работаю с Galaxy S10, android 10. Из здесь , сканирование BLE с устройствами Samsung требует непустого фильтра сканирования для сканирования в состоянии без экрана.
Ниже показано мой код AdvertiseData и ScanFilter.
ParcelUuid aaUuid = ParcelUuid.fromString("0000aa11-0000-1000-8000-00805F9B34FB");
AdvertiseData advertiseData = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(aaUuid)
.build();
ScanFilter scanFilter = new ScanFilter.Builder()
.setServiceUuid(aaUuid)
.build();
При включенном экране все работает хорошо. Однако с выключенным экраном тоже не работает.
Я установил 10-кратное сканирование, чтобы проверить это. Сначала при включенном экране все работает хорошо. Когда стал выключенным, первое сканирование работает нормально. Но результат следующего сканирования не появляется, и он просто запускает следующий процесс сканирования (без результата).
'WakeLock' для каждого повторения сканирования дает тот же результат. Как решить эту проблему?
Добавить 1. Я использовал WorkManager для обработки фонового процесса. Тогда я искал другой метод.
Добавить 2. Ниже мой код обратного вызова.
private ScanCallback mScanCallback = new ScanCallback() {
@Override
public void onScanResult(int callbackType, ScanResult result) {
super.onScanResult(callbackType, result);
if (result.getDevice().getName() != null)
setBleScanResult(result);
}
@Override
public void onBatchScanResults(List<ScanResult> results) {
super.onBatchScanResults(results);
}
@Override
public void onScanFailed(int errorCode) {
super.onScanFailed(errorCode);
Log.d("LOG_BLESCANNING_onScanFailed", "Error Code : " + errorCode);
}
};
Добавить 3. Ниже мой журнал при выключенном экране
...
D/Worker: ============ Bluetooth Scanning start ============
D/LOG_BluetoothScan: Bluetooth scanning started successfully
D/BluetoothAdapter: isLeEnabled(): ON
D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=4 mScannerId=0
D/BluetoothAdapter: isLeEnabled(): ON
D/LOG_BluetoothScan: Bluetooth scanning stopped
...
и экран на
D/Worker: ============ Bluetooth Scanning start ============
D/LOG_BluetoothScan: Bluetooth scanning started successfully
D/BluetoothAdapter: isLeEnabled(): ON
D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=4 mScannerId=0
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/LOG_BluetoothScan: W S10 | [00001111-0000-1000-8000-00805f9b34fb] | 55:40:DE:86:D0:03
D/BluetoothAdapter: isLeEnabled(): ON
D/LOG_BluetoothScan: Bluetooth scanning stopped
Добавьте 4. Мне любопытно: «Почему эта проблема возникает только при сканировании изображения?» Проверяю, что реклама в выключенном состоянии не вызывает никаких проблем.
Добавить 5. С рекламой тоже есть проблема ... но это несущественно. Я считаю, что соединение MainActivity - Worker (из WorkManager) плохо для контроля этой ситуации.