我写了一个Android应用程序(4.4.2),它可以在大多数情况下正确连接/断开BLE外设。但是,每隔一段时间我就会在Bluetootgatt.java onClientConnectionState()中收到NullPointerException的LogCat警告:
我的BluetoothGattCallback回调如下:
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState)
{
if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_CONNECTED)
{
gatt.discoverServices(); // triggers onServicesDiscovered() callback
}
else if (status == BluetoothGatt.GATT_SUCCESS && newState == BluetoothProfile.STATE_DISCONNECTED)
{
return;
}
else if (status != BluetoothGatt.GATT_SUCCESS)
{
gatt.disconnect();
}
}
应用程序始终在连接时正确转到onConnectionStateChange newState == STATE_CONNECTED回调,但是当它抛出异常时(在应用程序断开连接时),它永远不会进入onConnectionStateChange回调中的任何位置。我在2013 Nexus 7上运行此操作。为什么会发生此异常?
答案 0 :(得分:3)
这似乎是由我在onPause()函数中调用disconnect()后跟close()引起的。我删除了disconnect(),close()处理断开连接,我不再看到异常了。