Получение URL-адреса от виртуального маяка Eddystone-URL с использованием Android Beacon Library

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

try {
        byte[] buf = UrlBeaconUrlCompressor.compress("http://www.google.com");
        beacon = new Beacon.Builder()
                .setId1("0000FEAA-0001-1000-8000-00805F9B34FB")
                .setManufacturer(0xFEAA)
                .setTxPower(-59)
                .setDataFields(bytesToListOfLongs(buf))
                .build();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    BeaconParser beaconParser = new BeaconParser()
            .setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT);
    beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);

Я расшифровал поля данных перед началом передачи и хорошо вижу URL-адрес, но я ничего не получаю в этих полях на другом смартфоне.


person Alejandro Pérez    schedule 13.07.2017    source источник


Ответы (1)


Вы просто не можете использовать поля данных для этого случая. Поля данных предназначены для хранения только нескольких битов информации.

Вместо этого поместите данные, которые вы хотите передать, внутрь самого поля ID1. В случае форматов iBeacon и AltBeacon этот идентификатор имеет длину 16 байтов. Вам нужно будет преобразовать байты ваших дней, чтобы они всегда были ровно 16 байтами, и отформатировать их как uuid, чтобы метод синтаксического анализа идентификатора мог преобразовать их в идентификатор.

person davidgyoung    schedule 13.07.2017
comment
Хорошо, но что тогда дает мне формат Eddystone-URL? - person Alejandro Pérez; 16.07.2017
comment
Если вы кодируете данные при передаче маяка, то вы действительно выходите за рамки предполагаемого использования маяков Bluetooth, которые предназначены для передачи простого уникального идентификатора. Вы можете сделать это, но поскольку вы выходите за рамки предполагаемого использования, на самом деле не имеет значения, какой формат вы используете. Если вы используете Eddystone-URL, вы кодируете данные внутри URL. Если вы используете Eddystone-UID, вы кодируете его внутри идентификаторов пространства имен и экземпляра. Если вы используете iBeacon или AltBeacon, вы кодируете его внутри UUID, основного и дополнительного идентификаторов. - person davidgyoung; 17.07.2017