配对至Android中的低功耗蓝牙设备

jdepypere

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

Android文档指示[ BluetoothDevice.connectGatt()](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,布尔值,android.bluetooth.BluetoothGattCallback))具有自动连接参数:

布尔值,指示是否在可用时立即自动连接到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_BONDINGBOND_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);
        }
    }
};

因此,这种绑定似乎无效。

我的问题是:我在配对或自动连接时做错了吗?还是我目前的工作方式是唯一正确的方法?每次都必须扫描设备,看设备是否在那里,似乎很痛苦(而且会耗掉电池),如果这样,则读取数据并明天再检查,否则一小时左右再检查一次。蓝牙的要点是,只要附近有蓝牙,就应该直接配对,不是吗?

拉伊夫

它无需重新扫描即可工作。您根本不需要配对。只需BluetoothGatt.connect()再次调用从第一个连接中获取的gatt对象即可。只要onConnectionStateChange您的BluetoothGattCallback设备再次可用,您就会收到事件如果使用自动连接选项,则甚至不需要调用BluetoothGatt.connect()方法。只需监视您的Cllback,close()如果您看不到任何连接太长时间,就不要忘记关闭BluetoothGatt

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章