things - bluetooth low energy android example
BLE con Android 5.0: ¿Cómo hacer que un dispositivo actúe como Central Y Servidor? (2)
Estoy usando dos dispositivos Android 5.0 para comunicarme a través de Bluetooth Low Energy y no quiero:
Dispositivo 1 para actuar como Central y Servidor .
Dispositivo 2 para actuar como Periférico y Cliente .
Este es el comportamiento que me gustaría lograr:
1) El dispositivo 2 comienza a anunciarse (rol periférico).
2) El dispositivo 1 comienza a escanear (función central) y obtiene el dispositivo de publicidad (objeto Dispositivo Bluetooth) a través del método ScanStaResult de ScanCallback.
3) Ahora quiero que se notifique al dispositivo publicitario (Dispositivo 2) que se ha escaneado y que se pueda obtener el Dispositivo Bluetooth asociado con el Dispositivo 1.
4) El dispositivo 1 tiene una instancia de BluetoothGattServer. El dispositivo 2 ahora llamaría connectGatt (Context context, boolean autoConnect, BluetoothGattCallback callback) en el Dispositivo 1 para obtener una instancia de BluetoothGatt.
5) Al final, el Dispositivo 1 es el Servidor y el Dispositivo 2 es el Cliente.
Hasta ahora, he encontrado que en el paso 2, una vez que el Dispositivo 1 tiene el Dispositivo Bluetooth para el Dispositivo 2, solo se puede conectar como cliente en el paso 4 usando connectGatt.
Podría usar el BluetoothGattServer definido en el Dispositivo 1 y llamar a: gattServer.connect (dispositivo BluetoothDevice, boolean autoConnect) con el dispositivo que es el Dispositivo 2.
¿ Pero cómo se notificará el Dispositivo 2 al que se ha conectado?
¿ Y cómo obtendré una instancia de BluetoothGatt en el Dispositivo 2 si no puedo llamar a connectGatt (Context, boolean, BluetoothGattCallback) en un dispositivo Bluetooth ?
Gracias de antemano por su ayuda !
Alguna documentación:
Debes darle vuelta un poco. El escáner es el que se conecta al anunciante. Dev1 escanea dev2 adv y scan response. entonces dev1 debería conectarse. Dev2 recibirá una devolución de llamada en Connect. No hay devolución de llamada cuando alguien escucha su anuncio o solicita una respuesta de escaneo en Android. Compruebe en su lugar 0x14 «Lista de UUID de solicitud de servicio de 16 bits» de btsig si desea anunciar la solicitud de servidores con un determinado servicio para conectarse con usted. Es un poco inusual ver esto usado.
1) El dispositivo 2 comienza a anunciarse (rol periférico).
El rol periférico se anunciará, asegúrese de agregar CONECTABLE
AdvertiseSettings.Builder settingBuilder = new AdvertiseSettings.Builder();
settingBuilder.setConnectable(true);
Y comienza la publicidad en consecuencia.
2) El dispositivo 1 comienza a escanear (función central) y obtiene el dispositivo de publicidad (objeto Dispositivo Bluetooth) a través del método ScanStaResult de ScanCallback.
Perfecto, ahora llame a connectGatt en este dispositivo (periférico), asegúrese de detener el anuncio después de obtener el dispositivo requerido, de lo contrario terminará enviando múltiples comandos de conexión.
3) Ahora quiero que se notifique al dispositivo publicitario (Dispositivo 2) que se ha escaneado y que se pueda obtener el Dispositivo Bluetooth asociado con el Dispositivo 1.
Cuando llama a connectGatt desde la función Central / cliente, su periférico recibirá una notificación en su BluetoothGattServerCallback''onConnectionStateChange
.
allí sabrá que se ha hecho la conexión. aunque debe registrar el servicio Gatt con características en el lado periférico.
4) El dispositivo 1 tiene una instancia de BluetoothGattServer. El dispositivo 2 ahora llamaría connectGatt (Context context, boolean autoConnect, BluetoothGattCallback callback) en el Dispositivo 1 para obtener una instancia de BluetoothGatt.
Incorrecto, el Dispositivo 1 iniciará la conexión tal como lo dije en el punto 3. Se llamará a ambos OnConnectionStateChange de ambos dispositivos para saber que se ha realizado la conexión.
5) Al final, el Dispositivo 1 es el Servidor y el Dispositivo 2 es el Cliente.
Incorrecto, el Dispositivo 2 es periférico (Servidor), el Dispositivo 1 es Monitor (Cliente)