¿Cómo saber cuándo un dispositivo BLE se suscribe a una característica de Android?
Viniendo de un fondo de dev iOS, al trabajar con Bluetooth LE actuando como un periférico puede registrarse para una devolución de llamada cuando un dispositivo "central" BLE se suscribe (habilita notificaciones) para una característica.
Estoy luchando para ver cómo se logra esto en Android. Si estás trabajando con Bluetooth LE actuando como central, puedo ver cómo te suscribiste: bluetoothGatt.setCharacteristicNotification(characteristicToSubscribeTo, true);
- Google android maps api v2 Mostrar el título del marcador Siempre
- Widget de conmutador vertical Android
- ¿No se puede pausar la actividad?
- Error en el registro de Android SIP (-9 IN_PROGRESS)
- Manejo de InterruptedException mientras espera una señal de salida (error en Android?)
Cuál es igual que esto en iOS: peripheralDevice.setNotifyValue(true, forCharacteristic characteristicToSubscribeTo)
Ahora, después de llamar a lo anterior en iOS, en el lado periférico, obtendrá una devolución de llamada para decir que la central se ha suscrito con un método similar a: peripheralManager(manager, central subscribedCentral didSubscribeToCharacteristic characteristic)
que le da una referencia al dispositivo que se suscribió / Enabled notificaciones ya qué característica.
¿Cuál es el equivalente en Android?
Para mayor claridad señalaré que no necesito suscribirme a una característica de Android, el dispositivo está actuando como el periférico y debe ser notificado cuando otros dispositivos se suscriban a las características.
Lo siento si esto es obvio, pero no puedo encontrarlo en los documentos o en otro lugar.
- ¿Cómo comprobar el título de la barra de herramientas en la prueba instrumental android?
- OOD y pasando la actividad como un parámetro a los constructores de otras clases
- Bucle liso del juego del androide
- Cómo obtener la dirección IP directa de WiFi de mi dispositivo
- ¿Hay alguna forma sólida de hacer frente a la autenticación integrada de Windows (NTLM) desde una aplicación de Android?
- Android: Pasar un servicio a un manejador
- Intenta invocar el método virtual 'android.text.Editable android.widget.EditText.getText ()' en una referencia de objeto nulo
- Uso del patrón de diseño Singleton para SQLiteDatabase
Justo después de establecer la recompensa tuve una idea, haha debería haber esperado un poco más dar a mi cerebro más tiempo para pensar;)
Parece que iOS ha abstraído un poco cómo funcionan las suscripciones internamente. Bajo la campana ios CoreBluetooth un cierto "Descriptor" de la característica es escrito por el Centro, lo que indica que el centro quiere suscribir el valor de la característica.
Aquí está el código que usted necesita agregar a su subclase de BluetoothGattServerCallback
:
@Override public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) { super.onDescriptorWriteRequest(device, requestId, descriptor, preparedWrite, responseNeeded, offset, value); Log.i(TAG, "onDescriptorWriteRequest, uuid: " + descriptor.getUuid()); if (descriptor.getUuid().equals(Descriptor.CLIENT_CHARACTERISTIC_CONFIGURATION) && descriptor.getValue().equals(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE)) { Log.i(TAG, "its a subscription!!!!"); for (int i = 0; i < 30; i++) { descriptor.getCharacteristic().setValue(String.format("new value: %d", i)); mGattServer.notifyCharacteristicChanged(device, descriptor.getCharacteristic(), false); } } }
Sería mejor utilizar https://github.com/movisens/SmartGattLib para el uuid ( Descriptor.CLIENT_CHARACTERISTIC_CONFIGURATION
pero el valor bruto es 00002902-0000-1000-8000-00805f9b34fb
)
Acepto con @stefreak
y,
bluetoothGatt.setCharacteristicNotification(characteristicToSubscribeTo, true);
No hizo nada para el dispositivo remoto, esta API sólo cambió un bit de notificación en la pila local de Bluetooth, es decir, si las notificaciones de envío periférico a local, pila local juzgará si las aplicaciones ya han registrado esta notificación y si sí,
Por lo que, salvo setCharacteristicNotification, también debe escribir writeDescriptor para su notificación registrada (estos son los pasos que indican que las notificaciones de envío de necesidad remota).
- ¿Cómo puedo obligar a Proguard a guardar mi archivo de recursos .xml?
- Leer ApplicationManifest de Aplicación de Android (apk) usando .NET