在Android 12中,使用BLE连接设备时,调用BluetoothGatt.disconnect()方法成功断开连接后,回调方法onConnectionStateChange()将返回状态0,这是不正确的行为。为了解决这个问题,可以在断开连接之前先取消连接并关闭Gatt实例,如下所示:
bluetoothGatt.cancelConnection();
bluetoothGatt.close();
然后,在onConnectionStateChange()回调方法中手动更新连接状态,如下所示:
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_DISCONNECTED) {
// 更新断开连接状态
status = BluetoothGatt.GATT_SUCCESS;
}
// 处理连接状态变化
// ...
}
这样,就可以避免Android 12在BLE断开连接后永远返回状态0的错误行为。