我正在使用Cypress BLE模块进行测试,并且我正在进行其中一个测试,即从模块中断电。但是,
onConnectionStateChange
永远不会被调用!它只会响应成功的连接。显然,尝试连接数小时而没有放弃。我想延迟取消连接尝试,但没有办法取消蓝牙设备上的连接尝试(据我所知)!我认为它将一直尝试,直到电池耗尽。这是我的
onConnectionStateChange
目前看起来像什么,在Gatt回调内部。请注意,我正在尝试捕获和记录任何涉及任何连接状态更改的任何类型的回调...除非连接成功,否则永远不会被调用。请注意,此代码不在活动本身中。它在由单例持有的对象中。(我希望在多个活动之间保持连接) @Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
mGatt = gatt;
Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "Status: "+status+ " Newstate: "+newState);
switch(status)
{
case BluetoothGatt.GATT_SUCCESS:
mReconnectAttempts = MAX_ATTEMPTS;
if(newState == BluetoothGatt.STATE_CONNECTED)
{
DispatchEvent(Event.Type.BT_ON_CONNECT);
bIsConnected = true;
gatt.discoverServices();
} else if (newState == BluetoothGatt.STATE_DISCONNECTED)
{
DispatchEvent(Event.Type.BT_ON_DISCONNECT);
bIsConnected = false;
}
break;
default:
if(newState == BluetoothGatt.STATE_DISCONNECTED)
{
bIsConnected = false;
if(mReconnectAttempts > 0)
{ // if we have attempts left, auto attempt to reconnect
DispatchEvent(Event.Type.BT_RECONNECTING);
mReconnectAttempts--;
gatt.connect();
bIsConnected = false;
}
else
{
mReconnectAttempts = MAX_ATTEMPTS;
DispatchEvent(Event.Type.BT_ON_CONNECT_FAIL);
bIsConnected = false;
}
} else {
Logy.CallPrint(LOGY_ENABLE, CLASSNAME, "onConnectionStateChange: Failed?");
}
}
super.onConnectionStateChange(gatt, status, newState);
}
无法检测到断开连接是我代码中的一个问题,例如在显示进度对话框以指示应用程序正在连接到BLE设备时。然而,该对话框永远不会消失,因为从未触发“连接失败”事件。