AltBeacon getIdentifier возвращает неправильное значение

У меня проблема с тем, что мой код или маяк возвращают "неправильное" значение (в кавычках, так как это, скорее всего, ошибка в моем коде). Я читал о маяках, и насколько я понимаю, я могу дать своим маякам 3 идентификатора. Я настроил идентификаторы своего маяка на 000000000000001234 (много нулей, заканчивающихся на 1234), 0001 для основного и 0002 для дополнительного.

Вот некоторый код, который я использую при выборе маяков:

String id1 = beacon.getId1().toString(); 
String id2 = beacon.getId2().toString();
String id3 = beacon.getId3().toString();

Я предполагал, что они будут представлять идентификаторы, которые у меня были в моем маяке, но значение, которое я получаю для id1, равно «0x02676f6f2e67c...», а id2 и id3 равны нулю. Я совсем отключился?

Может быть, я использую неправильный парсер? (Это я получил на почте от поддержки клиентов маяка, хотя я не уточнил, что хочу использовать идентификаторы)

.setBeaconLayout("s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-20v"));

Должен признаться, я не совсем понимаю, зависит ли синтаксический анализатор маяка от того, КАК я хочу декодировать свой маяк, или от того, КАКОЙ у меня маяк, или, может быть, даже от того и другого.

Для справки, я использую Android, но я предполагаю, что это не имеет значения.


person mathkid91    schedule 22.03.2016    source источник


Ответы (1)


Несколько моментов:

  • Существует несколько популярных форматов маяков, каждый из которых передает разное количество идентификаторов с разной длиной идентификатора. AltBeacon и iBeacon отправляют три идентификатора размером 16, 2 и 2 байта соответственно. Eddystone-UID отправляет два идентификатора по 10 и 6 байт соответственно. А Eddystone-URL отправляет один идентификатор переменной длины от 1 до 17 байт.

  • В вопросе не говорится, какой формат маяка передается. Похоже, что он предназначен для iBeacon или AltBeacon, потому что эти форматы имеют идентификатор из трех частей (иногда называемый ProximityUUID, основной и дополнительный). Но первый идентификатор этих форматов — это 16-байтовый UUID, и в примере показан такой идентификатор: 0000000000000001234, который может быть 9 байтов, если он отображается в шестнадцатеричном формате, или неизвестное количество байтов, если он выражен в десятичном формате.

  • Показанная строка макета маяка ("s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-20v") предназначена для Eddystone-URL, который представляет собой формат с единый идентификатор переменной длины, который можно преобразовать в строку URL-адреса с помощью пользовательского алгоритма сжатия.

  • Маяк, обнаруженный с одним идентификатором (ID2 и ID3 равны нулю), вероятно, является передачей Eddystone-URL. Частично показанный ID1 0x02676f6f2e67c... эквивалентен URL "http://goo.g"...

Выводы:

  • Обнаруженный маяк, вероятно, не тот, который вы собираетесь обнаружить.

  • У вас может быть несколько передающих маяков поблизости или маяк, который отправляет несколько передач разных типов, поэтому вы обнаруживаете маяк Eddystone-URL.

  • Передача маяка, которую вы собираетесь обнаружить, скорее всего, не имеет формата Eddystone-URL, поэтому для этого вам, вероятно, понадобится другой BeaconParser. Сначала вам нужно выяснить формат, чтобы вы могли добавить правильный BeaconParser.

person davidgyoung    schedule 22.03.2016
comment
Большое спасибо! Для справки, я передаю iBeacon, UID и URL-адрес, поэтому, как упоминалось здесь, я, вероятно, получил URL-адрес в результате в моем Id1. Покопавшись в своих письмах службы поддержки, я нашел еще один парсер маяков, который они упомянули, который я пробовал, и теперь я правильно получаю ответ, который мне нужен. Однако до этого разъяснения я не был уверен, в чем была моя ошибка :) - person mathkid91; 23.03.2016