当前位置: 首页 > 知识库问答 >
问题:

与Android中的蓝牙低能耗设备配对

汝天宇
2023-03-14

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

Android文档表明[BluetoothDevice.connectGatt()](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,boolean,android.bluetooth.BluetoothGattCallback))有一个自动连接参数:

布尔值,指示是否在BLE设备可用时立即自动连接到该设备

但是,要调用它,您首先需要BluetoothDevice。AFAIK的唯一方法是扫描可用设备。每次设置扫描以连接到设备似乎不是一个理想的方式。此外,我尝试使用nRF控制主面板使用autoConnect=true连接到我的外围设备,但这并未连接到设备。然而,在没有autoConnect的情况下连接确实会使其连接,我已经成功地以这种方式从外围设备读取和写入数据。

蓝牙中配对两个设备的一般方法。但是,搜索我的BLE设备并使用BluetoothDevice.createBond()似乎不起作用。在我的ACTION_BOND_STATE_CHANGED-回调中,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);
        }
    }
};

所以这种结合似乎不起作用。

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

共有1个答案

蒲昀
2023-03-14

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

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

 类似资料:
  • 最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了: https://github.com/RadiusNetworks/android-ibeacon-serv

  • 我试图访问Android中低能蓝牙设备的UUID,最终将字符串发布到web API。 以下是我的代码,可以很好地为本地名称和mac地址敬酒: 有人能帮忙吗?

  • 有人知道如何添加蓝牙低能耗作为设备要求,只允许iOS应用程序在蓝牙LE设备上可用吗?谢啦

  • ap.connectBLEDevice(OPTION | deviceId, CALLBACK) 连接低功耗蓝牙设备。可直接传入一个字符串作为 OPTION.deviceId。 OPTION 参数说明 名称 类型 必填 描述 deviceId String 是 蓝牙设备 id 错误码说明 error 描述 12 链接失败 代码示例 <script src="https://gw.alipayobj

  • ap.disconnectBLEDevice(OPTION | deviceId, CALLBACK) 断开与低功耗蓝牙设备的连接。可直接传入一个字符串作为 OPTION.deviceId。 OPTION 参数说明 名称 类型 必填 描述 deviceId String 是 蓝牙设备 id 错误码说明 error 描述 12 断开失败 代码示例 <script src="https://gw.al

  • 我的应用程序应连接到蓝牙LE设备。通常使用mBluetoothAdapter执行设备扫描。Stratescan(mLeScanCallback) 。回调为您提供有关可用设备的信息。 如果要连接到专用设备,请执行以下操作 然后 在我看来,连接到BLE设备的唯一需要是知道BLE地址,然后通过以上两个步骤连接到它。因此,如果我已经知道一个BLE地址(例如,它写在BLE设备的标签上),我就不需要执行BLE