我写了一个android应用程序(4.4.2),它可以在大部分时间正确地连接/断开ble外设。但是,每隔一段时间,我就会收到一个logcat警告:bluetootgatt.java onclientconnectionstate()中存在nullpointerexception:
我的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年的Nexus7上运行这个。为什么会发生这种异常?
最佳答案
这似乎是由我在onpause()函数中调用disconnect()和close()引起的。我删除了disconnect()并使用close()处理断开连接,我不再看到异常。