Мне нужно создать приложение Android, которое считывает информацию о типе устройства, которое отображается только при сканировании, когда оно отфильтровано (при обычном сканировании это не отображается). Устройство похоже на маяк, поэтому оно рекламирует только те данные, в которых есть информация, которую я хочу найти в рекламе (она не может быть подключена). Фильтр, который производитель дал мне, представляет собой необработанные данные. Что:
0x02010612435542
Я не могу отфильтровать его по имени, потому что устройство не объявляет его имя. Я также не могу сделать это с помощью MAC Address
, потому что приложение ранее не будет знать адрес устройства (это будет много устройств такого типа).
Приложение nrfConnect делает это хорошо, как вы см. ниже:
Имя фильтра в приложении:
Фильтр по необработанным рекламным данным
И, после фильтрации, вот как устройство отображается в приложении:
Итак, вот в чем дело. Я не могу фильтровать ни по имени, ни по MAC Address
.
Другие опции для фильтрации Java (стандартная библиотека Android / ble):
ScanFilter scanFilter1 = new ScanFilter.Builder().setManufacturerData(manufacturerId, manufacturerData).build();
ScanFilter scanFilter2 = new ScanFilter.Builder().setServiceData(serviceDataUuid, serviceData).build();
ScanFilter scanFilter2 = new ScanFilter.Builder().setServiceUuid(serviceUuid).build();
У меня есть UUID, предоставленный производителем. Это
B54ADC00-67F9-11D9-9669-0800200C9A66
Но, как заявил производитель, UUID используется для сканирования на iOS, не будет работать на Android (проверил, это правда).
Итак, у меня осталось 2 варианта из ScanFilters выше.
У меня есть знания вроде: «Данные производителя публикуются в необработанные рекламные данные, которые можно найти через приложение nrfConnect. И первые два байта данных производителя - это идентификатор производителя для использования с фильтром setManufacturerData()
". Мне даже удалось получить необработанные объявленные производителем данные (используя фильтр setDeviceAddress()
(для тестирования, с использованием тестового устройства, потому что, как я уже сказал, приложение не будет знать MAC-адреса ранее), и я получил что-то вроде этого :
0X020106124355420000080390BECB49400400CB500CF
Извините за длинный вопрос, но я постарался сделать его максимально полным.
Я попробовал все, что мог используя те методы scanFilter, но не смог заставить его работать.
Кто-то знает, как это реализовать? Я схожу с ума из-за МЕСЯЦА за это.
Заранее спасибо!