设备的Ble扫描服务,无需连接它

3

我想使用BLE扫描一些设备。 我只想显示我的设备,所以现在我获取设备的名称,如果是我需要的设备,就把它加入到我的列表中。

if (device.getName().contains(DEVICE_NAME)) {
        mDevices.put(device.hashCode(), device);
        invalidateOptionsMenu();
    }

我的问题是,如果我更改设备名称,这个检查将会失败。 因此,我想知道是否有可能获取一些服务的uuid来进行检查,而不会发生变化。 唯一的方法就是使用 device.connectGatt(this, false, mGattCallback); 连接到设备,然后使用gatt发现服务,但是,是否有可能在未连接设备的情况下发现某些服务呢?

1个回答

3
我不熟悉安卓,但我了解BLE的工作原理。
请查看所有标准的GATT特征和所有标准的GATT服务。 特征设备名称(UUID为0x2A00)捆绑在通用访问服务(UUID为0x1800)中。 GAP始终在来自GATT服务器的广告数据包中进行广播。 GATT客户端应运行发现扫描以接收广告并解析广告数据包以接收GAP描述符。在此过程中,从技术上讲,连接尚未建立。
致:

如果我更改设备的名称,这个检查将失败,因此我想知道是否有可能获取一些服务的uuid来进行检查,而这些服务是不会更改的。

假设您希望您的应用程序仅连接到具有某些唯一标识的特定设备。例如,由您配置的启用BLE的数字笔只应连接到您的应用程序,其他设备小工具不应能够连接到您的应用程序。如果这是使用情况,并且如果您有权配置BLE设备上的GATT服务器,则可以在GAP服务中添加一些自定义特征,这些特征对这些设备是唯一的。不用说,您将必须为该特征生成一个128位的自定义UUID,并且该UUID也将为您的应用程序所知。这更像是一个解决方法。
请查看Android中的扫描过滤器。 它允许您通过广告传输服务UUID进行扫描。我没有使用过安卓,但我确定ScanFilter将允许您按16位或128位UUID进行过滤。
有关详细信息,请参阅蓝牙开发门户网站

链接似乎已经损坏。 - 230490
谢谢。给我几个小时,我会更新它们。 - WedaPashi
在广告传输时发送一些额外的数据,然后在应用程序扫描时解析广告包,查找那些额外数据是否为目标数据,如果是,则连接到它,这样不是也能实现相同的功能吗? - 230490
看一下BLE广告的基础知识。你提出的建议和我的回答几乎是一样的。你需要在你的广告中传递一个自定义UUID,而Android扫描API有能力根据该UUID过滤结果。 - WedaPashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接