J'ai remarqué un problème sur le Samsung S8, Android 7.0 (upd. C'est également le cas sur Android 7.0: Samsung S7, Nexus 5x) qui indique (après quelques essais) cette application est l'analyse trop souvent:
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
Le problème se trouve dans les 6 STATE_ON des résultats des appels, c'est la partie des sans-papiers, POUR le changement de comportement, d'abord mentionné dans DP4 notes de version:
Nous avons changé le BLE de la Numérisation de comportement de départ en DP4. Nous allons empêcher les applications de démarrage et d'arrêt des scans plus de 5 fois en 30 secondes. Pour de longues analyses, nous allons convertir en opportuniste analyses.
Ce que je n'ai pas sont les 6 scans en moins de 30 secondes, même si j'ai mis: ScanSettings.setScanMode(ScanSettings.SCAN_MODE_OPPORTUNISTIC)
.
Le code est:
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
est dérivé de l' ScanCallback
.
Nous ne pouvons pas utiliser RxAndroidBle#rxBleClient.scanBleSettings
(ScanSettings) parce que notre code est sur le point de geler et nous utilisons la version 1.1.0 de la version de la lib.
Pourquoi est - ScanSettings.setScanMode
de ne pas modifier les résultats de la recherche?