getServiceData возвращает пустой массив в некоторых устройствах - PullRequest
0 голосов
/ 19 июня 2019

Контекст:

У меня есть два устройства: 1. LG G7 2. Huawei 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.
        }
    );

, когда я вызываю getScanRecord (). GetServiceData () в объекте scanResults, я получаю другое поведение:

Для устройства #1, я получаю массив со значением (что правильно). Для устройства № 2 я получаю пустой массив (неправильно)

Дело в том, что я использую третье приложение (nRF Connect) дляпосмотрите, имеет ли устройство №2 какие-либо аппаратные ограничения, и я вижу, что в рекламе есть информация ServiceData с ожидаемым результатом 1.

Я что-то не так делаю?

1 Ответ

1 голос
/ 19 июня 2019

Вы не упомянули версии тестовых устройств для ОС Android, но кажется, что одна из них - Android <8.0, а другая - Android> = 8.0.

То, что вы испытываете, - это простое изменение реализацииОС Android.Вы можете сравнить, как данные рекламы анализируются на Android 7.1 и Android 8.0 .До Android 8.0 рекламные данные, которые содержали служебные данные из сервисов с UUID длиной более 16 бит, не анализировались.

Более новая реализация синтаксического анализа рекламы в ОС Android может быть перенесена в библиотеку.Для этого я создал проблему .

...