android - 使用不同版本的 Android 设备进行扫描时,为同一 BLE 设备获取不同的 byte[] scanRecord 数据

标签 android bluetooth-lowenergy

private final BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
       }
 }

I scanned a single BLE device from Acer table of version 4.4.2 and Nexus 7 5.1 version. I want to filter the BLE devices using UUIDS, but I am getting different scanRecord data for same BLE device.

我附上了详细的图片。 enter image description here enter image description here

最佳答案

这在 BLE 世界中很常见。当 BLE 设备通告多个服务时 - 扫描器可以自由过滤 它需要什么或与之相关。我在 HRM(心率监测器)设备中看到了类似的行为,该设备也兼作 Food Pod(配置文件 - RSCP)——因此同时实现了 2 项服务。

对于此类设备(托管多个服务),最好为 BLE 扫描结果制定类型解析策略 - 例如,这可能是一个优先顺序:-

1. GAP Appearance  
2. GATT Service  

我上面提到的健身传感器 (TICKR RUN from Wahoo) 将 GAP 外观设置为 833 带式 HRM 并公布 2 个 UUID s-HRP 和 RSCP。因此,通过纯粹的扫描(广告)结果,我们得出的结论是它只是一个 HRM 设备。只有在您连接到它以检索 GATT 服务后,您才能获得全套 GATT UUID,结果证明它支持 RSCP(运行速度和节奏配置文件)和 HRP(心脏评价资料)

现在从扫描的角度来看 - 在发现阶段连接到每台设备是一场代价高昂的游戏,因此使用设备正在宣传的主要服务可能没问题

喂!

关于android - 使用不同版本的 Android 设备进行扫描时,为同一 BLE 设备获取不同的 byte[] scanRecord 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44126450/

相关文章:

android - 四元数旋转不能正常工作

android - 将 youtube 集成到 fragment

python - 用 python 在蓝牙低功耗中编写广告包?

c++ - Windows 上的蓝牙低功耗低速率?

java - 尝试使用 ionic 构建 Android 模拟器失败.. "Class not found: javac1.8"

android - Arc on canvas 没有抗锯齿

android - Android XmlResourceParser 的方便使用?

bluetooth-lowenergy - 网状消息传递操作码

android - Android 4.2 (Jelly Bean) 设备支持低功耗蓝牙 (BLE)

iOS - 连接一个/任何蓝牙设备时唤醒应用程序