我有一个完整的应用程序,准备发货,连接到我们已经制作的自定义蓝牙外设。 但是我刚刚发现了一个我无法确定的应用程序问题。
我正在Service
运行所有蓝牙操作,有时当我希望蓝牙操作结束时,我最终还是连接了1个外围设备,但我已经丢失了所有指针。而且整个蓝牙堆栈似乎都会锁定,并且需要重新启动手机。
我认为在我停止扫描后尝试清除任何连接的设备时会出现问题。 我有这种清理方法
private void clearAllDevices() {
Log.e(TAG, "Clear all devices");
for (int i = 0; i < _connectedPeripherals.size(); i++) {
Log.e(TAG, "int i:" + i + " _connectedPeripherals size:" + _connectedPeripherals.size());
BluetoothGatt gatt = (BluetoothGatt) _connectedPeripherals.get(i);
gatt.disconnect();
}
}
但是,我认为有时外围设备在断开与连接的所有连接的同时连接到一半。
是否有更好的方法来清除所有正在连接的连接设备或设备?
答案 0 :(得分:5)
bluetoothGatt.disconnect()
是不够的。您还应该致电bluetoothGatt.close()
。
一旦您的应用程序使用完BLE设备,就应该调用
close()
,以便系统可以正确释放资源。
请参阅:API Guides > Bluetooth Low Energy
您可以通过bluetoothGatt.disconnect()
回调查看BluetoothGattCallback.onConnectionStateChange
的结果。