Android BLE: ¿Identificar el tipo de característica?

Estoy desarrollando una aplicación android con BLE. El requisito de esta aplicación es actualizar la variación de voltaje en un hardware específico con varias entradas. Así que habilito BLE notificar API en esta aplicación. Esto notificará la aplicación en un período de tiempo con el voltaje de hardware más reciente.

Implementación

mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); BluetoothGattDescriptor des = characteristic.getDescriptors(); des.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); //Set the value of the descriptor to enable notification mBluetoothGatt.writeDescriptor(des); 

Estoy recibiendo una notificación en los valores de notificación en el método Gatt CallBack

  @Override public void onCharacteristicChanged(BluetoothGatt Gatt, BluetoothGattCharacteristic characteristic) { Log.w(TAG, "**ACTION_DATA_AVAILABLE**" + characteristic.getUuid()); //Indication or notification was received broadcastUpdate(BLEConstants.ACTION_DATA_AVAILABLE, characteristic); //Go broadcast an intent with the characteristic data } 

Pero mi problema es, estoy recibiendo la respuesta normal también en el mismo método de devolución de llamada de Gatt. Quiero actualizar la notificación como una forma específica en la interfaz de usuario. Así que necesito separar la respuesta normal y la notificación. ¿Hay alguna manera de hacer lo mismo? O cualquier opción para identificar el mensaje en particular es de notificar?

En general, creamos (en el lado del hardware) una característica con las propiedades de ESCRIBIR y NOTIFICAR, para que podamos leer cuando queramos o habilitar completamente notificar para obtener datos en tiempo real.

Si tiene acceso al firmware de hardware y puede agregar características, sería bueno separar la característica de voltaje y la respuesta. Por lo tanto, puede probar el argumento onCharacteristicChanged:

 int propertiesFlags = characteristic.getUuid(); 

Otra buena manera de hacerlo, y eso es lo que hago usualmente, es usar una característica, pero asignar intervalos de datos. Una especie de convención entre tu aplicación y el hardware:

 @Override public void onCharacteristicChanged(BluetoothGatt Gatt, BluetoothGattCharacteristic characteristic) { byte[] data = characteristic.getValue(); if(data[1] < SOME_PREDIFINDED_VALUE){ //it's a real-time data update }else{ //it's a response to some data you sent. } } 

De lo contrario, la respuesta sólo será un cambio característico que significa un nuevo valor de voltaje de hardware.

No, si no tiene la posibilidad de cambiar el firmware. De acuerdo con su explicación, parece que NOTIFY tipo de característica se activa no medidor si le pedimos valor o el valor se cambia.

Si es así, la única manera que puedo imaginar como solución es el siguiente.

  1. Usted ha pedido valor. Usted tiene que fijar la bandera y usted tiene que considerar que todos los valores divulgados mientras que la bandera se fija son los valores que usted ha estado pidiendo.
  2. No has pedido valor. Considéralo como notificaciones.

Espero eso ayude.

Actualizar:

Parece que usted está usando RN4020 MLDP que no tiene documentación expuesta para el servicio privado, de acuerdo con esto

Lo mejor que pude encontrar fue lo siguiente:

 // private static final String MLDP_PRIVATE_SERVICE = "00035b03-58e6-07dd-021a-08123a000300"; //Private service for Microchip MLDP // private static final String MLDP_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301"; //Characteristic for MLDP Data, properties - notify, write // private static final String MLDP_CONTROL_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a0003ff"; //Characteristic for MLDP Control, properties - read, write // private static final String CHARACTERISTIC_NOTIFICATION_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; //Special UUID for descriptor needed to enable notifications 

Desde aquí

Lo que significa que la única manera de transferir datos es usar

 // private static final String MLDP_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301"; //Characteristic for MLDP Data, properties - notify, write 

Y esta característica solo tiene NOTIFICAR, no leer. Así que si lo está utilizando, no puede evitar la devolución de llamada de notificación en el lado del dispositivo.

  • AndroidPDFViewer - No se puede abrir el documento pdf en mi aplicación
  • Longitud máxima del método PutExtra de Intención? (Cierre de la fuerza)
  • Devolución de una secuencia de entrada del descriptor de archivo de parcela mediante Androids DownloadManager
  • Entendiendo Clase <?>
  • Lectura de transacciones no confirmadas en Android
  • Desarrollo de aplicaciones para Android: java vs. jquery mobile
  • ¿Cómo conectarse a SQLite DB con contraseña con OrmLite?
  • Desconcertado por el valor de píxeles en Bitmap (pre multiplicado usando setPixel)
  • JSON `date (...)` a `java.Util.Date` usando` org.json`
  • Hacer algunas cosas de la interfaz de usuario de Android en un subproceso no UI
  • ¿Hay alguna manera de agregar parámetros de consulta a cada solicitud con Retrofit 2?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.