getServiceData returns 某些设备中的空数组

getServiceData returns an empty array in some devices

上下文:

我有两个设备: 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 个结果。

我做错了什么吗?

你没有提到你的测试设备的 Android OS 版本,但似乎一个是 Android <8.0,另一个是 Android >= 8.0.

您所体验的是Android OS 实现的简单更改。您可以比较Android 7.1 and Android 8.0上广告数据是如何解析的。 Android 8.0 之前的广告数据包含来自 UUID 长于 16 位的服务的服务数据未被解析。

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