【问题标题】:Android Bluetooth Low Energy sometimes locking upAndroid 蓝牙低功耗有时会锁定
【发布时间】:2014-10-16 11:36:19
【问题描述】:

我有一个完整的应用程序,可以连接到我们制作的自定义蓝牙外围设备。 但是,我刚刚发现该应用程序存在无法确定的问题。

我在Service 中运行我的所有蓝牙操作,有时当我希望蓝牙操作结束时,我最终仍然连接了 1 个外围设备,但我丢失了所有指向它的指针。并且不时地整个蓝牙堆栈似乎被锁定并且需要重新启动手机。

我认为在我停止扫描后尝试清理任何连接的设备时会出现问题。 我有这个清理方法

private void clearAllDevices() {
        Log.e(TAG, "Clear all devices");
        for (int i = 0; i < _connectedPeripherals.size(); i++) {
            Log.e(TAG, "int i:" + i + " _connectedPeripherals size:" + _connectedPeripherals.size());
            BluetoothGatt gatt = (BluetoothGatt) _connectedPeripherals.get(i);
            gatt.disconnect();
        }
}

但是我认为有时外围设备在连接到一半的同时断开与所有连接的连接。

有没有更好的方法来清除所有连接的设备或正在连接的设备?

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy android-bluetooth


    【解决方案1】:

    bluetoothGatt.disconnect() 一个人是不够的。您还应该致电bluetoothGatt.close()

    一旦您的应用使用完 BLE 设备,它应该调用 close() 以便系统可以适当地释放资源。

    见:API Guides > Bluetooth Low Energy

    您可以通过BluetoothGattCallback.onConnectionStateChange回调查看bluetoothGatt.disconnect()的结果。

    【讨论】:

    • 谢谢。明天我拿回我们的原型时会试试。我从未见过在我读过的任何教程中使用过 close() 。一旦断开连接,我应该在 onConnectionStateChange 回调中调用 close() 吗?
    • 我曾经在onConnectionStateChange报告断开连接成功后拨打close()
    • 这是正确的,现在一切似乎都稳定了很多。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2020-05-12
    • 2013-08-14
    • 2016-06-14
    相关资源
    最近更新 更多