当前位置: 首页 > 面试题库 >

不连接设备的Ble Scan服务

西门飞星
2023-03-14
问题内容

我想用BLE扫描某些设备。我只想显示我的设备,所以我知道了设备的名称,如果是好的设备,我会将其放在列表中。

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

我的问题是,如果我更改设备的名称,此检查将为false。因此,我看是否有可能获得一些我添加的用于执行检查的服务的不变的东西。唯一的方法是device.connectGatt(this, false, mGattCallback);使用gatt在发现服务后执行此操作,然后再连接到该设备,但是,是否有可能在不连接设备的情况下从该设备发现某些服务?


问题答案:

我不具备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进行过滤。

请参考蓝牙开发门户以获取更多详细信息。



 类似资料:
  • 我正在使用Azure设备预配服务(DPS)自动向Azure IoT中心注册和预配设备。 我想得到一个特定设备的孪生设备。 我可以通过使用de DeviceClient类来管理设备双胞胎: 但是我想通过使用RegistryManager获取设备,它需要特定IoTHub的连接字符串。 是否可以从DPS、连接的设备或IoT中心名称(即结果)中获取IoT中心连接字符串。AssignedHub)?我正在使用

  • 有没有办法打开tcpip端口5555进行调试,而不需要通过USB连接到电脑?

  • 连接设备 接口说明 用于连接 扫描出来的蓝牙设备。 参数说明 字段 类型 必须? 说明 device RKBLEDevice 是 蓝牙设备 示例代码 Swift: RokidMobileSDK.binder.connect(device: RKBLEDevice) Objc: [RokidMobileSDK.binder connect:device]; 断开设备 接口说明 用于断开已经连接的

  • 连接蓝牙设备 接口说明 接口需传入蓝牙名称(蓝牙address重启后会变) 参数说明 字段 类型 必须? 说明 name String 是 设备名称 举个大栗子 RokidMobileSDK.binder.connectBT(name, new IBTConnectCallBack() { @Override public void onConnectSucceed(BTDevic

  • Android问题 一旦我的设备收到数据从GATT服务器,一次收到数据后,它被断开连接。我尝试了许多不同的方法,但都不起作用。我已经阅读了整个网址也...Android4.3蓝牙低能耗不稳定

  • 我如何获得Android所有已连接蓝牙设备的列表,而不考虑配置文件? 或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。 我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。 但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。