2015-04-26 21 views
6

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?

+0

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

+0

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

+0

đặ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

Trả lời

1

Có vẻ như bạn không thể gọi cùng phương pháp này với nhau. Cuộc gọi lại ngắt kết nối có thể đến muộn hơn phương thức close() được thực hiện.

Bạn có thể thêm mGatt.close(); vào onConnectionStateChange gọi lại để đóng kết nối.

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

Các vấn đề liên quan