Bluetooth 如何返回BLE外设';s连接状态

Bluetooth 如何返回BLE外设';s连接状态,bluetooth,bluetooth-lowenergy,nrf51,Bluetooth,Bluetooth Lowenergy,Nrf51,我注意到,当外围设备非手动断开连接时(例如,当外围设备断电时),方法onConnectionStateChange()并不总是被调用(或者只是没有及时调用)。是否有一种方法可以手动获取已连接的可编程外围设备的连接状态,而不是仅仅等待onConnectionStateChange()启动?我尝试使用BluetoothManager#getConnectionState,但该方法似乎正在访问由调用onConnectionStateChange()的任何线程更新的连接状态,实际上并不询问设备是否已连接

我注意到,当外围设备非手动断开连接时(例如,当外围设备断电时),方法
onConnectionStateChange()
并不总是被调用(或者只是没有及时调用)。是否有一种方法可以手动获取已连接的可编程外围设备的连接状态,而不是仅仅等待
onConnectionStateChange()
启动?我尝试使用
BluetoothManager#getConnectionState
,但该方法似乎正在访问由调用
onConnectionStateChange()
的任何线程更新的连接状态,实际上并不询问设备是否已连接。换句话说,如果尚未调用
onConnectionStateChange()
,则
BluetoothManager#getConnectionState
仅返回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;
}

一旦蓝牙控制器向主机蓝牙堆栈报告链路已终止,就会调用onConnectionStateChange。如果在没有正常断开连接的情况下突然关闭外围设备电源,则连接将一直保持,直到触发监控超时。在最新的Android版本中,默认值从20秒改为5秒,因为人们抱怨它太长了。iOS上的默认值为0.72秒。在Android上,您可以通过从外围设备执行连接参数更新请求来手动降低它。

一旦蓝牙控制器向主机蓝牙堆栈报告链路已终止,就会调用onConnectionStateChange。如果在没有正常断开连接的情况下突然关闭外围设备电源,则连接将一直保持,直到触发监控超时。在最新的Android版本中,默认值从20秒改为5秒,因为人们抱怨它太长了。iOS上的默认值为0.72秒。在Android上,您可以通过从外围设备发出连接参数更新请求来手动降低它。

谢谢,您能提供一个连接参数更新的示例吗?不确定你的意思是什么。这必须从外围设备上完成,因为不幸的是Android没有提供这样的api。请参阅。如果外围设备处于关闭状态,为什么外围设备会设置连接监控超时参数?主设备不应该负责询问外设是否已断开连接吗?或者外设是否将参数发送给主机?在外设断开连接之前,您必须从外设发送请求。之后,应用新参数。对不起,我想我误解了您的意思。主机与外围设备相连。例如,外围设备可以是信标,主设备可以是运行主机Android应用程序的手机。监控超时参数是否已编程到信标或手机中?谢谢,能否提供连接参数更新的示例?不确定你的意思是什么。这必须从外围设备上完成,因为不幸的是Android没有提供这样的api。请参阅。如果外围设备处于关闭状态,为什么外围设备会设置连接监控超时参数?主设备不应该负责询问外设是否已断开连接吗?或者外设是否将参数发送给主机?在外设断开连接之前,您必须从外设发送请求。之后,应用新参数。对不起,我想我误解了您的意思。主机与外围设备相连。例如,外围设备可以是信标,主设备可以是运行主机Android应用程序的手机。监控超时参数是否已编程到信标或手机中?