首页 > 解决方案 > getServiceData 在某些设备中返回一个空数组

问题描述

语境:

我有两台设备: 1. LG G7 2. 华为 Pra LX1

我目前正在使用实现“com.polidea.rxandroidble2:rxandroidble:1.10.0”

当我打电话给

Disposable scanSubscription = rxBleClient.scanBleDevices(
        new ScanSettings.Builder()
            // .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) // change if needed
            // .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // change if needed
            .build()
        // add filters if needed
)
    .subscribe(
        scanResult -> {
            // Process scan result here.
        },
        throwable -> {
            // Handle an error here.
        }
    );

当我在 scanResults 对象中调用 getScanRecord().getServiceData() 时,我得到了不同的行为:

对于设备 #1,我得到一个带有值的数组(这是正确的) 对于设备 #2,我得到一个空数组(错误)

问题是我正在使用第三个应用程序(nRF Connect)来查看设备 #2 是否有任何硬件限制,并且我可以看到广告具有 ServiceData 信息和预期的 1 个结果。

我做错什么了吗?

标签: bluetooth-lowenergyrxandroidble

解决方案


您没有提到您的测试设备的 Android 操作系统版本,但似乎它们一个是 Android <8.0,另一个是 Android >=8.0。

您所体验的是Android OS 实现的简单更改。您可以比较在Android 7.1Android 8.0上解析广告数据的方式。在 Android 8.0 之前,包含来自 UUID 超过 16 位的服务的服务数据的广告数据不会被解析。

Android OS 广告解析的较新实现可能会在库中向后移植。我为此创建了一个问题


推荐阅读