Ограничение размера данных BLE Advertise

В приложении My Addroid я пытаюсь добавить дополнительные данные, когда пытаюсь запустить рекламу, и, как я читал, данные рекламы должны быть ‹= 31 байтом.

Вот как я это делаю:

var testData = "abcdefghij"
var data = AdvertiseData.Builder().apply {
               addServiceData(
                   ParcelUuid(MY_UUID),
                   testData.toByteArray(Charsets.UTF_8)
               )
           }
bleAdvertiser.startAdvertising(
    settings.build(),
    data.build(),
    advertiseCallback
)

Таким образом, все работает хорошо. Теперь, если testData поля станут

var testData = "abcdefghijk"

реклама начинает давать сбой из-за превышения лимита размера данных рекламы.

Если один символ занимает 2 байта, почему, если у меня есть строка из 11 символов, я превысил лимит в 30 байтов?


person giozh    schedule 02.09.2019    source источник


Ответы (1)


Сначала автоматически добавляются три байта флага.

Пакет служебных данных содержит первый байт, указывающий его длину, за которым следует однобайтовый идентификатор пакета, который сообщает, что сюда идет пакет служебных данных. Затем у вас есть полезная нагрузка uuid службы (16 байт), за которой следует 10-байтовая строка в кодировке UTF-8.

В сумме получается 31 байт. Если вы добавите «k», вы получите 32 байта, и, следовательно, данные станут слишком длинными.

person Emil    schedule 02.09.2019
comment
спасибо, мне не хватало байтов по умолчанию, добавляемых автоматически. - person giozh; 02.09.2019