Как создать URL-идентификаторы Eddystone?

Я использую версию 2.5.1 Android Beacon Library с недавно добавленной поддержкой Eddystone. . Я изо всех сил пытаюсь создать новый регион с заданным URL-адресом, чтобы фильтровать только маяки с этим URL-адресом. Например, я хочу обрабатывать только маяки, начинающиеся с http://example.com.

Макет BeaconParser, который я использую, устанавливает (в моем случае) фиксированную длину Scheme+Host+TLD в Id1 и путь к Id2.

Как мне создать такой Identifier для URL-маяка Eddystone?

Я хочу создать новый регион следующим образом:

Identifier exampleIdentifier = Identifier.parse("http://example.com");
Region exampleRegion = new Region("Example Region", exampleIdentifier, null, null);

Очевидно, это не работает, потому что синтаксический анализатор не может обработать данный URL-адрес. Это еще не поддерживается, или я здесь совершенно не на том пути?

Что сработало для меня, так это сначала преобразовать идентификатор во что-то, что понимает библиотека (например, в шестнадцатеричной нотации), а затем попытаться проанализировать это ( .parse("0x123456..." ). Но я не уверен, что это лучший и самый чистый способ сделать это.


person dermatthias    schedule 09.08.2015    source источник


Ответы (1)


Eddystone-URL использует собственный алгоритм сжатия для преобразования удобочитаемого URL-адреса в передаваемые байты. Android Beacon Library включает служебный класс, который выполняет сжатие/распаковку за вас.

byte[] urlBytes = UrlBeaconUrlCompressor.compress("http://example.com")
Identifier identifier = Identifier.fromBytes(urlBytes, 0, urlBytes.length, false);

Первая строка выше генерирует массив байтов, который можно преобразовать в идентификатор с помощью второй строки. дополнительную информацию о работе с URL-маяками см. в документации по библиотеке.

person davidgyoung    schedule 09.08.2015
comment
Полностью пропустил эту часть документации. Спасибо! - person dermatthias; 09.08.2015