El dispositivo Android BLE recibe resultados extremadamente irregulares

Mi beacon (SensorTag CC2541) es un anunciante que transmite su información 10 veces por segundo.

Mi aplicación de Android se escanea con un BluetoothLeScanner . Mayormente el tiempo entre cada resultado de escaneo registrado por mi BluetoothLeScanner es de 0,1 segundo a 0,6 segundos, lo cual es completamente bueno. Pero a veces (cada 5ish segundos) el tiempo entre cada resultado de la exploración es más de 2 segundos. A veces hasta 5. Que pone mi aplicación como estoy en necesidad de detección rápida de la baliza.

No batch escaneo, simplemente manejar cada resultado de escaneo como viene.

Intenté combatir este problema de irragularidad creando mi propio scanSettings y forzando el reportDelay a 0 y el modo de escaneado a baja latencia. Sin embargo, cuando lo implemento con el código de abajo, mi escáner sólo recoge cada beacon UNA VEZ. Pero al usar mLeScanner.startScan(scanCallback) sin scanSettings obtengo varios resultados del mismo beacon (aunque en intervalos inconsistentes como se explica arriba). ¿Alguien tiene alguna idea de lo que este problema podría ser causado por?

 BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter(); BluetoothLeScanner mLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); ScanSettings.Builder scanSettingsBuilder = new ScanSettings.Builder(); scanSettingsBuilder.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY); scanSettingsBuilder.setReportDelay(0); scanSettingsBuilder.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES); ScanSettings scanSettings = scanSettingsBuilder.build(); ScanCallback scanCallback = new ScanCallback() { @Override public void onScanResult(int callbackType, ScanResult result) { super.onScanResult(callbackType, result); //Handle result } @Override public void onBatchScanResults(List<ScanResult> results) { super.onBatchScanResults(results); //Not used, any code I put here never gets run } @Override public void onScanFailed(int errorCode) { super.onScanFailed(errorCode); } }; mLeScanner.startScan(null, scanSettings, scanCallback); 

El resultado muestra callbackType = 1, y el scanSettings hace lo mismo cuando lo registro antes de mLeScanner.startScan (….), por lo que puedo entender que no es el problema.

ACTUALIZACIÓN: Parece que el único problema escaneado una vez que se utiliza scanSettings es porque mis balizas tienen habilitado el modo de conexión. Intentaré inhabilitarlos mañana.

Sin embargo, la sustitución de los scanSettings como que incluso ayudar a mi situación de irregularidad?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.