getServiceData возвращает пустой массив на некоторых устройствах

Контекст:

У меня с собой два устройства: 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 результатом, как и ожидалось.

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


person Davidjburgos    schedule 18.06.2019    source источник


Ответы (1)


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

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

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

person Dariusz Seweryn    schedule 19.06.2019
comment
Большое спасибо. Я буду следить за этим, чтобы увидеть, смогу ли я использовать его для своего проекта после того, как вы внедрите его. - person Davidjburgos; 23.06.2019
comment
Пожалуйста, имейте в виду, что у меня не будет достаточно времени, чтобы работать над этим в ближайшем будущем. Для оптимальной реализации этой темы потребуется какое-то умное решение, которого у меня нет в данный момент. Есть и другие темы, на которых я хочу сосредоточиться. Ваше здоровье! - person Dariusz Seweryn; 24.06.2019