Я начинаю рекламодателя с такими данными:
AdvertiseData.Builder()
.setIncludeDeviceName(false)
.addServiceUuid(ParcelUuid(SERVICE_UUID))
.addServiceData(ParcelUuid(SERVICE_UUID), myByteArray)
.build()
С определенным SERVICE_UUID
:
UUID.fromString("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
Работает. Но если я изменю UUID (даже одну из цифр в конце), я получу onStartFailure
с 1 кодом ошибки, что, согласно документации, означает, что рекламные данные слишком велики. Чтобы тот же код работал с новым UUID, мне нужно уменьшить myByteArray
до пары байтов и удалить .addServiceUuid(ParcelUuid(SERVICE_UUID))
.
Есть идеи? Я много раз тестировал, и это стабильно происходит, только если не использовать «один» UUID сервиса. Переустановленное приложение, перезапущенное устройство, AS и т. Д. c.
Маловероятным объяснением (помимо ошибки в структуре) может быть то, что этот UUID является каким-то особенным, что позволяет транслировать больше данных, но даже если, странно, что с "другими" UUID я могу транслировать только пару байтов. Похоже, что один UUID работает так, как ожидалось.