Отфильтрованные сканы на Android 9 не найдут маяки, использующие фильтры UUID - PullRequest
0 голосов
/ 10 февраля 2019

Я сейчас пытаюсь сканировать устройства BLE, я использую Galaxy S9 + с Android 9.0.Кажется, нефильтрованные сканы не работают с galaxy s9 +, поэтому я добавил фильтры вот так

String serviceUuidString = "51525354-5556-5758-5950-abbccddeeff0"; //uuid i wanna scan
String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
ParcelUuid parcelUuid = ParcelUuid.fromString(serviceUuidString); 
ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);

ScanFilter filter1 = new ScanFilter.Builder().setServiceUuid(parcelUuid, parcelUuidMask).build();
filters.add(filter1);

Это не сработало, но как только я добавил это

ScanFilter filter = new ScanFilter.Builder().setDeviceAddress("D8:09:1A:58:41:39").build();
filters.add(filter);

Он начал обнаруживать маякипосле того, как телефон заблокирован.Я не думаю, что добавление каждого Mac будет хорошим методом.Что-то не так делается при добавлении фильтров для uuid?

- вот как я строю настройки

settings = scanSettingsBuilder.build();

1 Ответ

0 голосов
/ 10 февраля 2019

Двойная проверка, чтобы быть абсолютно уверенным, что ваш UUID службы указан правильно в фильтре.Может быть полезно распечатать строку LogCat из операционной системы при обнаружении пакета объявления службы (без фильтров) и опубликовать его здесь.

Для чего стоит, в библиотеке маяков Android существует очень похожий код.для сканирования в фоновом режиме для UUID Eddystone Service, используя следующий код, и я убедился, что он работает на Galaxy S9 (хотя пока не с Android 9.0).Основное отличие кода ниже от того, что у вас есть, состоит в том, что он форматирует 16-битный UUID как 128-битный UUID.Но я думаю, что это вряд ли что-то изменит.

            ScanFilter.Builder builder = new ScanFilter.Builder();
            String serviceUuidString = String.format("0000%04X-0000-1000-8000-00805f9b34fb", sfd.serviceUuid);
            String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
            ParcelUuid parcelUuid = ParcelUuid.fromString(serviceUuidString);
            ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);
            builder.setServiceUuid(parcelUuid, parcelUuidMask);
            ScanFilter scanFilter = builder.build();
            scanFilters.add(scanFilter);
...