Tôi đang cố ngắt kết nối các thông báo đặc trưng khi tôi thoát khỏi ứng dụng của mình. Đây là cách tôi làm điều đó trong hàm exitCleanup() của tôi:Đối tượng Bluetooth BLE Android BLE vẫn được kết nối và kích hoạt trênCharacteristicChanged() ngay cả sau khi cuộc gọi ngắt kết nối()
if (btGatt != null && mWriteChar != null) {
boolean b=btGatt.setCharacteristicNotification(mWriteChar, false);
Log.w("AppInfo", "Exiting and Unsubscribing: " + b);
}
Nhật ký hiển thị: Exiting and Unsubscribing: true
. Càng xa càng tốt. Sau đó tôi cố gắng để ngắt kết nối GATT đối tượng hoàn toàn bằng cách sử dụng sau đây:
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));
}
Đây là nơi mà mọi thứ trở nên kỳ lạ. Nhật ký hiện hiển thị như sau: FINISHING. Connection state=2
, cho biết BluetoothDevice vẫn được kết nối.
Đây là một vấn đề, bởi vì khi ứng dụng hoàn tất và phá hủy tất cả nội dung, BluetoothGattCallback vẫn tiếp tục nhận được thông báo phía sau hậu trường. Đầu tiên nó ném NullPointerException sau:
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()
Và sau đó tiếp tục công bố onNotify() gọi đó kích hoạt onCharacteristicChanged() gọi ngay cả sau khi ứng dụng đã chấm dứt awile trước:
D/BluetoothGatt﹕ onNotify() - Device=54:4A:16:26:A1:B5 UUID=0000ffe1-0000-1000-8000-00805f9b34fb
Bất kỳ lời khuyên về cách ngắt kết nối đúng cách khỏi các thông báo đặc trưng của GATT khi thoát khỏi ứng dụng?
Xin chào, tôi cũng gặp vấn đề tương tự. Bạn đã có thể tìm thấy một giải pháp? hãy chia sẻ. – Brabbeldas
Cách duy nhất để bỏ qua lỗi này là tắt và sau đó bật lại thiết bị bluetooth, đó là một cách tiếp cận rất dễ bị tấn công. Tôi vẫn đang tìm kiếm các đề xuất tốt hơn. – Temperage
đặt một sự chậm trễ giữa ngắt kết nối và đóng mà nên thoát khỏi ngoại lệ – Amit