Android Marshmallow ScanSetting

Me gustaría crear mi configuración de escaneo en Android M para que pueda obtener devoluciones de llamada independientes para tres eventos diferentes en un objeto ScanCallback :

  1. Cuando el dispositivo remoto coincidía primero con el filtro
  2. Cuando el teléfono Android recibió anuncios después del primer descubrimiento (en este caso estoy comprobando si los datos del anuncio han cambiado o no)
  3. Cuando el dispositivo remoto está fuera de rango

Hay tres opciones en la API :

 CALLBACK_TYPE_ALL_MATCHES CALLBACK_TYPE_FIRST_MATCH CALLBACK_TYPE_MATCH_LOST 

Desafortunadamente, no hay una buena documentación acerca de si estas tres opciones pueden ser utilizadas todas juntas o no. De acuerdo con mis experimentos, debo elegir sólo uno de ellos. ¿La API requiere que CALLBACK_TYPE_ALL_MATCHES exploraciones simultáneas para obtener la devolución de llamada para CALLBACK_TYPE_ALL_MATCHES y CALLBACK_TYPE_MATCH_LOST al mismo tiempo? ¿Alguien tiene alguna experiencia en cómo usar estas opciones?

EDIT :

Después de comprobar el código fuente de la API descubrí que CALLBACK_TYPE_FIRST_MATCH | CALLBACK_TYPE_MATCH_LOST CALLBACK_TYPE_FIRST_MATCH | CALLBACK_TYPE_MATCH_LOST es también una combinación válida. Sin embargo, el uso de CALLBACK_TYPE_FIRST_MATCH hace mucho más lento (~ 30 segundos) para descubrir en comparación con CALLBACK_TYPE_ALL_MATCHES . Además, se llama a CALLBACK_TYPE_MATCH_LOST aunque el dispositivo está promocionando activamente. No creo que esta API sea ​​fiable.

Estos son mis resultados:

12: 02: 50.179 31627-31655 D / BluetoothLeScanner: onClientRegistered () – estado = 0 clientIf = 6
12: 03: 24.877 31627-31627 D / ScanCallbackMarshmallow: ScanResult {mDevice = E8: A8: C9: 82: 17: 61, …}
12: 03: 24.878 31627-31627 D / ScanCallbackMarshmallow: CALLBACK_TYPE_FIRST_MATCH
12: 03: 29.905 31627-31627 D / ScanCallbackMarshmallow: ScanResult {mDevice = C0: B6: 43: 1E: 45: 28, …}
12: 03: 29.906 31627-31627 D / ScanCallbackMarshmallow: CALLBACK_TYPE_FIRST_MATCH
12: 03: 39.721 31627-31627 D / ScanCallbackMarshmallow: ScanResult {mDevice = D8: 35: 26: 9D: 55: B4, …}
12: 03: 39.722 31627-31627 D / ScanCallbackMarshmallow: CALLBACK_TYPE_FIRST_MATCH

12: 04: 21.889 718-730 D / BluetoothLeScanner: onClientRegistered () – status = 0 clientIf = 6 12: 04: 22.073 718-718 D / ScanCallbackMarshmallow: ScanResult {mDevice = D8: 35: 26: 9D: 55: B4, …} 12: 04: 22.073 718-718 D / ScanCallbackMarshmallow: CALLBACK_TYPE_ALL_MATCHES 12: 04: 22.316 718-718 D / ScanCallbackMarshmallow: ScanResult {mDevice = E8: A8: C9: 82: 17: 61, …} : 04: 22.316 718-718 D / ScanCallbackMarshmallow: CALLBACK_TYPE_ALL_MATCHES 12: 04: 24.740 718-718 D / ScanCallbackMarshmallow: ScanResult {mDevice = E8: A8: C9: 82: 17: 61, …} 12: 04: 24.740 718 -718 D / ScanCallbackMarshmallow: CALLBACK_TYPE_ALL_MATCHES

EDIT 2 :

Establecer el modo de exploración como ScanSettings.SCAN_MODE_LOW_LATENCY realiza el descubrimiento utilizando CALLBACK_TYPE_FIRST_MATCH tan rápido como utilizando CALLBACK_TYPE_ALL_MATCHES . Sin embargo, si establezco el tipo de devolución de llamada como ScanSettings.CALLBACK_TYPE_FIRST_MATCH | ScanSettings.CALLBACK_TYPE_MATCH_LOST ScanSettings.CALLBACK_TYPE_FIRST_MATCH | ScanSettings.CALLBACK_TYPE_MATCH_LOST No podré comprobar si los datos del anuncio han cambiado o no en caso de que los datos del anuncio sean dinámicos. Creo que este es el problema con la API. Cabe señalar que los datos de anuncio no es predecible, así que no puedo filtrar los datos de publicidad basados ​​en su contenido.

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