Android BLE: recupera UUID de service en la callback onLeScan () cuando se anuncia desde iOS Periférico

Estoy usando Nexus 4 (4.4 kitkat) como central y iPad como periférico. El periférico tiene un service que publicita. El package de publicidad tiene algunos datos (22bytes) + UUID de service. Cuando bash escanear el periférico desde Android, iPad se descubre el periférico. Sin embargo, cuando bash get el UUID del service del parámetro scanRecord en la callback, no pude encontrarlo. Todo lo que obtengo son los datos de 20 bytes que envía el periférico. Cuando trato de search dispositivos con el UUID I No soy capaz de descubrir esos periféricos.

A continuación se muestra el código de iOS para publicitar un service. La ID de service que se utiliza es "0000192f-0000-1000-8000-00805f9b34fb"

CBUUID *serviceUuid = [CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]; [self.peripheralManager startAdvertising:@{CBAdvertisementDataServiceUUIDsKey : @[serviceUuid], CBAdvertisementDataLocalNameKey:[[BTLEConfigs shanetworkingBTLEConfig] getAdvertizingUUID]}]; 

El dispositivo se descubre cuando escaneo sin UUID de service.

 // Device scan callback. private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi, final byte[] scanRecord) { runOnUiThread(new Runnable() { @Override public void run() { //-- how to retrieve the service id from scanRecord } }); } }; 

Los services se descubren entre dos dispositivos iOS, pero entre el dispositivo Android y el periférico iOS no funciona. ¿Cómo escanear un periférico con un UUID de service de 16 bits? Se agradece cualquier ayuda.

La matriz de bytes de logging de exploración contiene datos formateados EIR. Consulte la sección 8 de la Especificación Core de Bluetooth .

El logging de escaneo contiene una o más inputs secuenciales de EIR, que tienen el siguiente formatting:

 <entry length (1 byte)> <data type (1 byte)> <data (length - 1 bytes)> 

Está buscando una input EIR con un tipo de 0x02 o 0x03 (consulte la sección 18.2 de la especificación Core de Bluetooth ). Los datos para la input contendrán uno o más UUID en formatting Little Endian.

Ejemplo de logging de exploración:

 02011a0303b4540a094c69676874426c7565 

Se puede descomponer en:

 02 01 1a Flags - 1a 03 03 b454 16-bit service UUID - 54b4 0a 09 4c69676874426c7565 Local name - LightBlue 

Este es un error conocido en Android BLE: el filtrado solo funciona con UUID de 16 bits no completo de 128 bits.

Ver el problema de Google 58931