如何return BLE外设连接状态
How to return BLE peripheral's connection status
我注意到当外围设备非手动断开连接时(例如当外围设备关闭时),方法 onConnectionStateChange()
并非总是被调用(或者只是没有按时调用)。有没有办法手动获取连接的 BLE 外围设备的连接状态,而不是等待 onConnectionStateChange()
触发?我尝试使用 BluetoothManager#getConnectionState
,但此方法似乎正在访问由调用 onConnectionStateChange()
的任何线程更新的连接状态,并且实际上并不询问设备是否已连接。换句话说,如果尚未调用 onConnectionStateChange()
,则 BluetoothManager#getConnectionState
只是 returns false。
这是我的isConnected
方法
public boolean isConnected(){
// If the device has never connected, it's gatt service is null.
if(mGatt != null){
BluetoothManager btm =
(BluetoothManager)
MainActivity.mMainActivity.getSystemService(Context.BLUETOOTH_SERVICE);
int state = btm.getConnectionState(mGatt.getDevice(), BluetoothProfile.GATT);
return state == 2;
}
// The gat service is null, the device is not connected, return false.
return false;
}
一旦蓝牙控制器向主机蓝牙堆栈报告 link 已终止,就会调用 onConnectionStateChange。如果您突然关闭外围设备而没有正常断开连接,连接将一直保持到监控超时触发。在最新的 Android 版本中,默认值刚刚从 20 秒更改为 5 秒,因为人们抱怨它太长了。 iOS 的默认值为 0.72 秒。在 Android 上,您可以通过从外围设备执行连接参数更新请求来手动降低它。
我注意到当外围设备非手动断开连接时(例如当外围设备关闭时),方法 onConnectionStateChange()
并非总是被调用(或者只是没有按时调用)。有没有办法手动获取连接的 BLE 外围设备的连接状态,而不是等待 onConnectionStateChange()
触发?我尝试使用 BluetoothManager#getConnectionState
,但此方法似乎正在访问由调用 onConnectionStateChange()
的任何线程更新的连接状态,并且实际上并不询问设备是否已连接。换句话说,如果尚未调用 onConnectionStateChange()
,则 BluetoothManager#getConnectionState
只是 returns false。
这是我的isConnected
方法
public boolean isConnected(){
// If the device has never connected, it's gatt service is null.
if(mGatt != null){
BluetoothManager btm =
(BluetoothManager)
MainActivity.mMainActivity.getSystemService(Context.BLUETOOTH_SERVICE);
int state = btm.getConnectionState(mGatt.getDevice(), BluetoothProfile.GATT);
return state == 2;
}
// The gat service is null, the device is not connected, return false.
return false;
}
一旦蓝牙控制器向主机蓝牙堆栈报告 link 已终止,就会调用 onConnectionStateChange。如果您突然关闭外围设备而没有正常断开连接,连接将一直保持到监控超时触发。在最新的 Android 版本中,默认值刚刚从 20 秒更改为 5 秒,因为人们抱怨它太长了。 iOS 的默认值为 0.72 秒。在 Android 上,您可以通过从外围设备执行连接参数更新请求来手动降低它。