如何在该地区获得蓝牙配对设备

时间:2011-08-03 15:01:06

标签: android bluetooth area device

我想获得该地区所有设备的清单。

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

所以我想获得一个列出绑定设备的列表(但只包括该区域的设备)和可发现的设备。

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

我解决这个问题的方法是尝试连接到设备。只要有问题的设备实际上正在侦听连接,它似乎就可以工作。如果您不知道要处理的设备类型,则必须扫描它提供的可用服务。这有点奇怪,因为看起来你只能通过使用反射来调用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");
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我所拥有的蓝牙设备一旦被绑定就无法被发现,这就是为什么这个发现没有列出它们。这是设备的性质(如果您已经在使用它,则没有其他人可以使用设备),而不是Android API的限制。

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

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