【问题标题】:How to get bluetooth paired devices in the area如何在该地区获取蓝牙配对设备
【发布时间】:2011-10-19 04:57:22
【问题描述】:

我想获取该区域内所有设备的列表。

为此,我使用 getBondedDevices() 请求绑定设备,然后进行发现。但这给了我所有绑定设备(在该区域内或不在该区域内)和可发现设备的列表。如果我只是进行发现(不使用 getBondedDevices()),我不会在该区域获得绑定的设备。

所以我想获取绑定设备(但仅限于该区域内的设备)和可发现设备的列表。

感谢您的帮助

【问题讨论】:

    标签: android bluetooth area device


    【解决方案1】:

    我解决这个问题的方法是尝试连接到设备。只要有问题的设备实际上正在侦听连接,它似乎就可以工作。如果您不知道您正在处理的设备类型,您必须扫描它提供的可用服务。这有点奇怪,因为您似乎只能通过使用反射来调用 getUuids。请参阅下面的代码。

    try {
        Method method = device.getClass().getMethod("getUuids"); /// get all services
        ParcelUuid[] parcelUuids = (ParcelUuid[]) method.invoke(device); /// get all services
    
        BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(parcelUuids[0].getUuid()); ///pick one at random
        socket.connect();
        socket.close();
    } catch (Exception e) {
        Log.e("BluetoothPlugin", device.getName() + "Device is not in range");
    }
    

    【讨论】:

      【解决方案2】:

      没有直接的 API,您可以比较发现和 getBondedDevices 返回的常见设备,以查找附近的绑定设备并且可见/可发现。

      【讨论】:

        【解决方案3】:

        我拥有的蓝牙设备一旦绑定就无法被发现,这就是发现没有列出它们的原因。这是设备的特性(如果您已经在使用设备,其他人将无法使用它),而不是 Android API 的限制。

        因此,获得该区域内设备的完整列表的唯一方法可能是尝试打开与每个绑定设备的连接以查看它是否在该区域内,然后将该子集与可发现列表合并。这是一种间接的方式,但我找不到其他方式。

        我认为其他软件处理此问题的方式是将绑定和可发现列表分开,并让用户确定他们关心哪些绑定设备(通过个人知识已知在范围内)。

        【讨论】:

        • 在 Android 2.2 上,当我发现时,我也会得到绑定/配对的设备。您测试过哪些 Android 版本?
        • 我所指的设备在配对时实际上会忽略发现请求,这与 Android 无关。我碰巧测试过 Android 1.6 和 2.2,但我了解到这一点是因为我为使用蓝牙外围设备的医疗设备编写的固件。当然,这取决于设备,因此您测试过的任何蓝牙设备的行为都会有所不同。
        • 那我就试试吧。实际上我的程序也是一个通过蓝牙与其他设备连接的医疗应用程序。用户必须选择他想要连接的设备,这就是为什么似乎没有必要显示所有不在该区域的绑定设备,我可以有很多。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-04-08
        • 2021-04-26
        • 2022-06-13
        • 2016-09-26
        相关资源
        最近更新 更多