tutorial tecnologia studio low example ejemplo ble android asynchronous bluetooth-lowenergy

tecnologia - Android: BLE cómo leer múltiples características?



gatt ble android (3)

Es posible que ya lo haya descubierto usted mismo, pero podría ser útil para otros.

No entendí si eso así que por qué hicieron los métodos Async.

Probablemente lo hicieron porque enviar una solicitud de lectura a otro dispositivo en ejecución sincrónica significaría que no puede hacer nada con su aplicación hasta que se reciba una respuesta. Al hacerlo Async puede hacer otras cosas, pero no otras solicitudes de bluetooth.

Los métodos de la API BLE de Android para leer algunas características son de naturaleza Asíncrona y cuando solicite algún valor, se llamará a su método de devolución de llamada GATT.

Si solicita varios valores de características de lectura, simplemente descarta otros hasta que no entretiene la primera solicitud.

No entendí si eso así que por qué hicieron los métodos Async. Si alguien sabe qué patrón de diseño debemos adaptar para resolver este problema, por favor compártelo.

Si quieres leer algunas características, entonces tienes que solicitarlo.

// new value available will be notified in Callback Object mBluetoothGatt.readCharacteristic(ch);

Llamada GATT

public void onCharacteristicRead(BluetoothGatt gatt, android.bluetooth.BluetoothGattCharacteristic characteristic, int status)

Posible solución n. ° 1

https://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained

Cualquiera puede explicar cómo usar esto. Creo que esto ayudará en este caso, pero todavía estoy buscando cómo usarlo.

Posible solución n. ° 2

https://code.google.com/p/mobility-rpc/source/browse/mobility-rpc/trunk/src/main/java/com/googlecode/mobilityrpc/session/impl/MobilitySessionImpl.java#395

Posible solución n. ° 3

http://tutorials.jenkov.com/java-util-concurrent/synchronousqueue.html

Posible solución n. ° 4

http://examples.javacodegeeks.com/core-java/util/concurrent/synchronous-queue-example-to-execute-commands/

Posible solución n. ° 5

https://stackoverflow.com/a/15816566/185022

Actualizar

Me las he arreglado para hacer que funcione con una Queue Preferiblemente SynchronousQueue pero compartiré mi solución final después de la prueba. Especifique un tiempo de espera de lo contrario se bloqueará o si solicita alguna lectura de características que no admiten la operación de lectura.

Puede ver qué características son legibles y escribibles de declaración obligatoria ver esta publicación



Pseudo código:

1) Usar una Cola FIFO o Cola Prioritaria depende de su lógica comercial

2) inserte todas las características que desea leer

3) llame a su método RequestCharacteristics para que pueda comenzar a consumir su cola

4) desde su llamada onCharacteristicsRead vea si el tamaño de la cola es mayor a cero Solicite uno más ... asegúrese de peek() desde aquí

5) ahora en su solicitud. Método de características haga el poll() y solicite BLE GATT para la característica.