Android BLE BluetoothGatt objeto permanece conectado y desencadena onCharacteristicChanged () incluso después de una llamada a desconectar ()

Estoy tratando de desconectar las notificaciones de características cuando estoy saliendo de mi aplicación. Aquí está cómo lo hago en mi función de exitCleanup ():

if (btGatt != null && mWriteChar != null) { boolean b=btGatt.setCharacteristicNotification(mWriteChar, false); Log.w("AppInfo", "Exiting and Unsubscribing: " + b); } 

El registro muestra: Exiting and Unsubscribing: true . Hasta aquí todo bien. A continuación, intento desconectar el objeto GATT completamente utilizando lo siguiente:

 if (btGatt != null && btManager!=null && btManager.getConnectionState(btDevice, BluetoothProfile.GATT) != BluetoothProfile.STATE_DISCONNECTED ) { //Making sure that gatt and bt manager are still with us //Also making sure that the connection state is NOT disconnected btGatt.disconnect(); btGatt.close(); Log.w( "AppInfo", "FINISHING. Connection state=" + btManager.getConnectionState(btDevice, BluetoothProfile.GATT) ); } 

Aquí es donde las cosas se ponen raras. El registro ahora muestra lo siguiente: FINISHING. Connection state=2 FINISHING. Connection state=2 , lo que indica que el Dispositivo Bluetooth sigue conectado.

Esto es un problema, porque cuando la aplicación termina y destruye todos los activos, el BluetoothGattCallback sigue recibiendo notificaciones tras bambalinas. Primero lanza la siguiente NullPointerException:

 04-25 22:49:54.392 17280-17293/com.myapp.appinfo D/BluetoothGatt﹕ onClientConnectionState() - status=0 clientIf=8 device=54:4A:16:26:A1:B5 04-25 22:49:54.392 17280-17293/com.myapp.appinfo W/BluetoothGatt﹕ Unhandled exception in callback java.lang.NullPointerException at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:168) at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:71) at android.os.Binder.execTransact(Binder.java:404) at dalvik.system.NativeStart.run(Native Method) 04-25 22:49:54.402 17280-17280/com.myapp.appinfo D/BluetoothManager﹕ getConnectionState() 

Y luego continúa publicando las llamadas onNotify () que activan las llamadas onCharacteristicChanged () incluso después de que la aplicación haya finalizado awile hace:

 D/BluetoothGatt﹕ onNotify() - Device=54:4A:16:26:A1:B5 UUID=0000ffe1-0000-1000-8000-00805f9b34fb 

¿Algún consejo sobre cómo desconectarse correctamente de las notificaciones características de GATT al salir de una aplicación?

One Solution collect form web for “Android BLE BluetoothGatt objeto permanece conectado y desencadena onCharacteristicChanged () incluso después de una llamada a desconectar ()”

Parece que no puedes llamar a estos métodos juntos. La devolución de llamada de desconexión puede llegar más tarde que el método close () realizado.

Puede agregar mGatt.close (); En onConnectionStateChange la devolución de llamada para cerrar la conexión.

https://code.google.com/p/android/issues/detail?id=183108

  • Android BLE API: GATT Notificación no recibida
  • BLE GATT onCharacteristicChanged no se llama después de suscribirse a la notificación
  • StartLeScan con 128 UUIDs de bits no funciona en la implementación BLE de Android nativa
  • Lectura de múltiples características de un dispositivo BLE de forma sincrónica (método recomendado para Android)
  • Error Android Bluetooth LE: Error al registrar la devolución de llamada
  • ¿Cómo mejorar el rendimiento de GATT de baja energía de Bluetooth de Android?
  • Android Cómo leer las propiedades de BLE Readable Writable Notifiable GATT Características
  • BLE con Android 5.0: ¿Cómo conseguir que un dispositivo actúe como Central AND Server?
  • ¿Cómo enviar datos a través de un enlace Bluetooth Low Energy (BLE)?
  • Samsung ble api no puede recibir notificación de múltiples características del GATT
  • ¿Tiene la naturaleza nativa de sincronización BLE GATT de implementación de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.