Ble扫描设备的服务而不连接它

时间:2015-05-06 14:33:09

标签: java bluetooth bluetooth-lowenergy device android-bluetooth

我想用BLE扫描一些设备。 我只想展示我的设备,所以知道我得到设备的名称,如果它是好的,我把它放在我的列表中。

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

我的问题是,如果我更改设备名称,则此检查将为false。 所以我看看是否有可能获得一些我添加的服务的uuid用不会改变的东西做检查。 唯一的方法是连接到执行 device.connectGatt(this, false, mGattCallback);的设备,然后使用gatt我发现服务,但是,是否可以从设备中发现某些服务而无需连接它?

1 个答案:

答案 0 :(得分:2)

我不是Android背景,但我了解BLE的工作原理。

特征Device Name, UUID=0x2A00捆绑在GAP (Generic Access), UUID = 0x1800中。 GAP始终在GATT服务器的广告包中广播 GATT客户端应运行发现扫描以接收广告并解析广告包以接收GAP描述符。当你这样做时,从技术上讲,这种联系还没有完成。

致以:

  

如果我更改了我的设备的名称,那么这个检查将是错误的,所以我看看是否有可能获得我添加的一些服务的某些uuid用不会改变的东西进行检查。

假设您希望应用仅连接到具有某些唯一标识的特定设备集。比如说,由您配置的支持BLE的数字笔应该只连接到您的应用程序,而其他任何设备小工具都不能与您的应用程序连接。如果这是用例,并且您可以自由地在BLE设备上配置GATT服务器,那么您可以在GATT服务器上的GAP服务中添加一些自定义特征,这些特性对于这些设备是唯一的。毋庸置疑,您必须为该特性生成128位自定义UUID,并且UUID也将为您的应用程序所知。这更像是一种解决方案。

请参阅Bluetooth Development Portal了解更多详情。