我想用BLE扫描某些设备。我只想显示我的设备,所以我知道了设备的名称,如果是好的设备,我会将其放在列表中。
if (device.getName().contains(DEVICE_NAME)) { mDevices.put(device.hashCode(), device); invalidateOptionsMenu(); }
我的问题是,如果我更改设备的名称,此检查将为false。因此,我看是否有可能获得一些我添加的用于执行检查的服务的不变的东西。唯一的方法是device.connectGatt(this, false, mGattCallback);使用gatt在发现服务后执行此操作,然后再连接到该设备,但是,是否有可能在不连接设备的情况下从该设备发现某些服务?
device.connectGatt(this, false, mGattCallback);
我不具备android背景知识,但是我对BLE的工作原理有所了解。
在这里查看所有标准GATT特性以及在这里所有标准GATT服务。 特征设备名称(UUID为0x2A00)捆绑到通用访问服务(UUID为0x1800)中。GAP总是在来自GATT服务器的广告包中广播。 GATT客户端应运行发现扫描以接收广告,并解析广告包以接收GAP描述符。在执行此操作时,从技术上讲,尚需建立连接。
地址:
如果我更改设备的名称,则此检查将为false。因此,我看是否有可能获得一些我添加来执行检查的服务的uuid,而这些服务不会更改。
假设您希望您的应用仅连接到具有某些唯一标识的一组特定设备。举例来说,由您配置的支持BLE的数字笔应仅连接到您的应用程序,其他设备小工具均不能与您的应用程序连接。如果是用例,并且您有自由在BLE设备上配置GATT服务器,则可以在GATT服务器上的GAP服务中添加一些自定义特征,这些特征对于这些设备是唯一的。不用说,您将必须针对该特征生成一个128位的自定义UUID,并且该UUID也将为您的应用程序所了解。这更像是一种变通解决方案。
看看android中的扫描过滤器。它允许您按服务UUID进行扫描,该服务需要通过BLE外围设备通过广告发送。我尚未在android上工作,但可以肯定的是,ScanFilter它将允许您按16位或128位但UUID进行过滤。
ScanFilter
请参考蓝牙开发门户以获取更多详细信息。