【问题标题】:Pairing to a Bluetooth Low Energy device in Android在 Android 中与蓝牙低功耗设备配对
【发布时间】:2015-06-25 17:30:01
【问题描述】:

是否可以自动连接到蓝牙低功耗 (BLE) 设备?

Android documentation 表示 [BluetoothDevice.connectGatt()](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback)) 有一个 autoConnect 参数:

boolean 是否自动连接BLE设备 只要它可用

但是,要调用它,您首先需要 BluetoothDevice。 AFAIK 获得此功能的唯一方法是扫描可用设备。每次都设置扫描以连接到设备似乎不是一种理想的方式。另外,我尝试使用nRF Control Master Panel 使用autoConnect = true 连接到我的外围设备,但这并没有连接到设备。但是,在没有 autoConnect 的情况下连接确实可以连接,并且我已经成功地以这种方式从外围设备读取数据和向外围设备写入数据。

蓝牙中配对两个设备的一般方式。但是,搜索我的 BLE 设备并使用 BluetoothDevice.createBond() 似乎不起作用。在我的ACTION_BOND_STATE_CHANGED-callback 中,EXTRA_BOND_STATEEXTRA_PREVIOUS_BOND_STATE 只是从 BOND_BONDING 转到 BOND_NONE 并返回。我没有读出错误或任何东西 - 所以也许我在这里遗漏了一些东西。这是回调:

private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {

            final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
            final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);

            Log.e(TAG, "prevState " + prevState + ", state " + state);
        }
    }
};

所以这种类型的绑定似乎不起作用。

我的问题是:我在配对或自动连接方面做错了吗?或者我目前如何让它以唯一正确的方式工作?每次都必须扫描设备,查看设备是否存在,如果有,则读取数据并明天再检查,否则一小时左右再检查,这似乎是一种真正的痛苦(和电池消耗)。蓝牙的重点是只要靠近就直接配对,不是吗?

【问题讨论】:

    标签: android bluetooth bluetooth-lowenergy


    【解决方案1】:

    无需重新扫描即可工作。您根本不需要配对。只需再次致电BluetoothGatt.connect() 获取您从第一次连接中获得的 gatt 对象。 一旦 ble 设备再次可用,您将在 BluetoothGattCallback 中收到 onConnectionStateChange 事件。如果你使用自动连接选项,你甚至不需要调用BluetoothGatt.connect() 方法。只需监控您的 cllback,如果您长时间没有看到任何连接,请不要忘记使用 close() 关闭 BluetoothGatt。

    是的,要获得第一个连接,您应该使用BluetoothAdapter.startLeScan 扫描 ble 设备,而不是常见的蓝牙设备扫描。

    【讨论】:

    • 所以每次应用启动,第一次我都要扫描吗?与配对设备相比,这似乎不是一种非常用户友好的方法。
    • 是的,Android ble stack 根本不是用户友好的))))所有异步,每次启动时重新扫描,等等......你可以尝试保持所有的粘性服务,但如果它将被关闭 - 您需要重新扫描。
    • 好的,谢谢,我以为我遗漏了什么,因为我认为 BLE 会得到大规模支持......
    • 好的一面是所有重新扫描重新连接都无需​​与用户进行任何协商,不像普通的蓝牙配对。
    • 是的,但配对只有一次,现在您仍然需要存储 BLE 设备的地址才能知道您必须自动连接到哪个设备
    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2016-10-09
    • 1970-01-01
    相关资源
    最近更新 更多