BluetoothGattServer cancelConnection不会取消连接

时间:2016-08-04 08:53:18

标签: android bluetooth-lowenergy android-bluetooth gatt android-ble

我有暴露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

Google跟踪器中的类似问题:6346163464

3 个答案:

答案 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客户端/服务器应用程序开始使用此连接。