Подтвердить что ты не робот

"Приложение просматривает слишком часто" с помощью ScanSettings.SCAN_MODE_OPPORTUNISTIC

Я заметил проблему на Samsung S8, Android 7.0 (обновление. Это также происходит на Android 7.0: Samsung S7, Nexus 5x), который сообщает (после нескольких тестов), что приложение сканирует слишком часто:

08-14 12:44:20.693 25329-25329/com.my.app D/BluetoothAdapter: startLeScan(): null
08-14 12:44:20.695 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.696 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.698 25329-25329/com.my.app D/BluetoothLeScanner: Start Scan
08-14 12:44:20.699 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.700 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.700 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.701 25329-25329/com.my.app D/BluetoothAdapter: STATE_ON
08-14 12:44:20.703 4079-4093/? D/BtGatt.GattService: registerClient() - UUID=dbaafee1-caf1-4482-9025-b712f000eeab
08-14 12:44:20.807 4079-4204/? D/BtGatt.GattService: onClientRegistered() - UUID=dbaafee1-caf1-4482-9025-b712f000eeab, clientIf=5, status=0
08-14 12:44:20.808 25329-25342/com.my.app D/BluetoothLeScanner: onClientRegistered() - status=0 clientIf=5 mClientIf=0
08-14 12:44:20.809 4079-7185/? D/BtGatt.GattService: start scan with filters
08-14 12:44:20.811 4079-7185/? D/BtGatt.GattService: getScanSettings 
08-14 12:44:20.812 4079-7185/? D/BtGatt.GattService: Is it foreground application = true
08-14 12:44:20.812 4079-7185/? D/BtGatt.GattService: not a background application
08-14 12:44:20.817 4079-7185/? E/BtGatt.GattService: App 'com.my.app' is scanning too frequently

Проблема, безусловно, заключается в результатах этих 6 STATE_ON вызовов, это часть изменения недокументированного поведения BLE, впервые упомянутая в примечаниях к выпуску DP4:

Weve изменил поведение сканирования BLE, начиная с DP4. Удалите приложения от запуска и остановки сканирования более 5 раз за 30 секунд. Для длительных сканирований хорошо преобразуйте их в оппортунистическое сканирование.

То, что я не получаю, это эти 6 сканирований менее чем за 30 секунд, даже если я установил ScanSettings.setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC).

Код:

            List<ScanFilter> filters = new ArrayList<>();
            ScanSettings scanSettings = new ScanSettings.Builder()
                    .setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC)
                    .build();
            bluetoothAdapter.getBluetoothLeScanner().startScan(filters, scanSettings, recoderScanCallback);
            //events from the log happen before this log is printed
            Log.i("test", " started!");
            return recoderScanCallback.scanResultObservable().map((ScanResult record) -> {
                 //never gets here
                 Log.i("test", " result!");
            });

RecorderScanCallback получен из ScanCallback. Мы не можем использовать RxAndroidBle#rxBleClient.scanBleSettings (ScanSettings), потому что наш код вот-вот замерзнет, ​​и мы используем версию lib версии 1.1.0.

Почему ScanSettings.setScanMode не изменяет результаты поиска?

4b9b3361