![](/img/trans.png)
[英]Writing to Multiple BluetoothGatt objects on Android 4.4.4 Nexus 4
[英]NullPointerException in BluetoothGatt.java on Nexus 4
我正在斷開連接並關閉藍牙GATT實例,並在logcat中看到以下內容:
07-22 09:33:20.699 5095-5113/com.assaabloy.stg.cliqconnect.android 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)
以下是此錯誤之前的本機事件:
07-22 09:33:20.689 1260-1277/? D/BtGatt.GattService﹕ clientDisconnect() - address=84:EB:18:44:D2:04, connId=9
07-22 09:33:20.689 1260-1277/? D/BtGatt.btif﹕ btif_gattc_close
07-22 09:33:20.689 1260-1322/? D/BtGatt.btif﹕ btgattc_handle_event: Event 1005
07-22 09:33:20.689 1260-1568/? E/bt-btif﹕ Do not find the bg connection mask for the remote device
07-22 09:33:20.689 1260-1322/? D/BtGatt.btif﹕ btif_gattc_upstreams_evt: Event 5
07-22 09:33:20.689 1260-1322/? D/BtGatt.GattService﹕ onDisconnected() - clientIf=9, connId=9, address=84:EB:18:44:D2:04
07-22 09:33:20.689 1260-1328/? D/BtGatt.GattService﹕ unregisterClient() - clientIf=9
07-22 09:33:20.689 1260-1328/? D/BtGatt.btif﹕ btif_gattc_unregister_app
作業系統版本: Android 4.4.4
裝置: Nexus 4
有人可以解釋發生了什么嗎?
看來您無法一起調用這些方法。 斷開連接回調可能在執行close()
方法之后到達。
您可以添加mGatt.close();
進入onConnectionStateChange
回調以關閉連接。
在此位置, BluetoothGatt
嘗試在您的BluetoothGattCallback
實例上調用onConnectionStateChange(...)
。
你覆蓋了那個嗎?
private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
...
}
}
我在三星SM G318H“趨勢2精簡版”中遇到了類似的異常:
D/BluetoothGatt( 4182): onClientConnectionState() - status=0 clientIf=6 device=D0:5F:B8:57:FE:33
W/BluetoothGatt( 4182): Unhandled exception in callback
W/BluetoothGatt( 4182): java.lang.NullPointerException
W/BluetoothGatt( 4182): at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:172)
W/BluetoothGatt( 4182): at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:71)
W/BluetoothGatt( 4182): at android.os.Binder.execTransact(Binder.java:404)
W/BluetoothGatt( 4182): at dalvik.system.NativeStart.run(Native Method)
嘗試從狀態更改處理程序內部重新連接時:
public final void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
switch (newState) {
case BluetoothProfile.STATE_DISCONNECTED:
device.connectGatt(...);
break;
}
}
通過將重新連接移動到計時器線程來解決該問題:
case BluetoothProfile.STATE_DISCONNECTED:
timer.schedule(
new TimerTask() {
@Override
public void run() {
device.connectGatt(...);
}
}, 3000);
break;
一種解決方案是僅對BluetoothGatt對象調用disconnect()。 在OnConnectionStateChange()回調中調用close()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.