Я пытаюсь смоделировать iBeacon с помощью BluetoothLeAdvertiser.
Мне удалось без труда отсканировать и найти iBeacon, но при создании iBeacon отправленные рекламные данные кажутся неверными.
Маяки, которые я нашел, имеют следующий формат:
Значение байта 0: 0x02 Длина данных - 2 байта
Значение байта 1: 0x01 Тип данных - флаги
Значение байта 2: 0x06 флаг LE и BR / EDR
Значение байта 3: 0x1a Длина данных - 26 байтов
Значение байта 4: 0xff Тип данных - данные производителя
Значение байта 5: 0x4c Данные производителя
Значение байта 6: 0x00 Данные производителя
.. и т. д.
Я попытался создать аналогичные рекламные данные для имитации iBeacon, используя AdvertiseData.Builder.addManufacturerData, создав массив и скопировав значения выше. Однако, когда я отправляю рекламные данные, в начале добавляются дополнительные байты:
0x1a 0xff 0x4c 0x00
Я заметил, что количество дополнительных байтов и их значения меняются в зависимости от того, как я установил параметры рекламы. Например,
AdvertiseData.Builder.setConnectable (истина); добавляет еще 3 байта в начале моих рекламных данных (как обнаружено в BluetoothAdapter.LeScanCallback).
Есть ли способ получить абсолютный контроль над тем, что Рекламодатель отправляет в виде данных? Я проверил https://github.com/AltBeacon/android-beacon-library/blob/master/src/main/java/org/altbeacon/beacon/BeaconTransmitter.java,, но это делает более или менее то, что я делаю, насколько я могу судить.
Использование Bluetooth 5 на Android 9.0