我有暴露BLE Server的Android应用程序。我与BluetoothGattServer#connect联系。它有效 - 我的应用程序通过BluetoothGattServerCallback#onConnectionStateChange拨打STATE_CONNECTED。当我完成客户端后,我尝试使用BluetoothGattServer#cancelConnection与我的应用断开连接。
但是我没有接到BluetoothGattServerCallback#onConnectionStateChange 的电话,似乎连接仍处于活动状态,因为我的BLE客户端没有开始做广告(当没有任何东西连接到它时它就会这样做)。
在logcat中我只看到:
BluetoothGattServer: cancelConnection() - device: XX:XX:XX:XX:XX:XX
有趣的是,只要我完全关闭BT,我的应用就会BluetoothGattServerCallback#onConnectionStateChange拨打STATE_DISCONNECTED。
答案 0 :(得分:2)
调用disconnect()方法时遇到同样的问题..我的BluetoothGattCallback中的onConnectionStateChange没有给出断开连接。
骑自行车蓝牙似乎是唯一可行的。
编辑: 另外,在调用disconnect()和close()方法之后,我仍然按照以下代码连接:
public int getConnectedBLEDevices() {
int i = 0;
List<BluetoothDevice> devices = mBluetoothManager.getConnectedDevices(BluetoothProfile.GATT);
for(BluetoothDevice device : devices) {
if(device.getType() == BluetoothDevice.DEVICE_TYPE_LE) {
Logs.writeEvent(TAG+".getConnectedBLEDevices()", device.getAddress() + "\n"+ getStateAsString(mBluetoothManager.getConnectionState(device, BluetoothProfile.GATT)));
i++;
}
}
return i;
}
答案 1 :(得分:0)
当newState == BluetoothProfile.STATE_CONNECTED时,您必须调用BluetoothGattServer.connect();。
DataType
答案 2 :(得分:0)
请参阅https://issuetracker.google.com/issues/37127644
状态:无法解决(预期行为) 您必须调用BluetoothGattServer.connect()将连接标记为已使用,然后再调用BluetoothGattServer.disconnect()将其标记为不再使用。然后,在超时之后,如果没有其他人正在使用该连接,则堆栈可以决定从远程断开连接。 如果建立连接后未调用BluetoothGattServer.connect(),则堆栈将一直保持连接,直到某些gatt客户端/服务器应用程序开始使用此连接。