Реклама Bluetooth LE не срабатывает, когда запускается и останавливается циклически

Я опробовал рекламу Bluetooth LE, т. Е. Используя телефон Android в качестве BLE-устройства. Запуск и остановка постоянной рекламы, когда-то работает нормально, но если я действительно хочу передать некоторые изменяющиеся данные, мне нужно было бы запускать, останавливать и перезапускать рекламу в цикле и всегда менять рекламный пакет.

Я использую эти методы, конечно:
BluetoothLeAdvertiser.startAdvertising ()
BluetoothLeAdvertiser.stopAdvertising ()

По крайней мере, на Motorola Moto G 4G 2-го поколения. (XT1072) с Android 5.0.2 цикл работает только некоторое время, а затем в стеке Bluetooth что-то идет не так, и новая реклама больше не может быть запущена. При быстром запуске цикла это происходит быстро, а если работает медленно, это занимает больше времени, поэтому это может быть связано с заполнением некоторого буфера.

Мой вопрос: Это также происходит на других устройствах, кроме Motorola?

(И любые другие связанные комментарии, конечно, приветствуются.)

Теоретически, это может зависеть от конкретной реализации HAL от конкретного производителя и т. Д., Поэтому я хотел бы знать, стоит ли мне просто получить другое устройство, которое сможет работать над этим, поскольку любое исправление от Google / Motorola, конечно, займет некоторое время.

Это тестовое приложение. можно использовать, чтобы попробовать это:

https://bitbucket.org/MarkusKauppinen/bleadvertisertest

Если все пойдет хорошо, он с радостью сохранит рекламу навсегда, а если эта проблема воспроизведется, то через пару минут появится диалоговое окно. Если ваше устройство не поддерживает рекламу Bluetooth LE или BLE вообще, оно просто рухнет. (Это просто быстрое тестовое приложение.)

Другой простой способ воспроизвести это - запустить приложение «bluetoothadvertiser» изhttps://github.com/devunwired/accessory-samples и просто продолжайте быстро нажимать кнопку «Обновить рекламу» в интерфейсе на некоторое время.

Дополнительные детали:

Поддержка периферийного режима Bluetooth LE (необходима для рекламы) была добавлена ​​в Lollipop и недоступна в 4.x. Только определенные устройства имеют поддержку периферийного режима. Совместимость кроется как минимум в:

https://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html Чипсеты / устройства с поддержкой периферийного режима Android 5 BLE чипсеты с поддержкой периферийной роли BLE на Android 5

Например, эти устройства должны иметь поддержку: Motorola Moto E 4G (2015), Motorola Moto G 4G (2-го поколения), Sony Xperia M4 Aqua, ZTE Blade S6, Motorola Moto X (2014), Samsung Galaxy S6, Google Nexus 6 , Google Nexus 9, HTC One M9, Samsung Galaxy S6 Edge.

Что касается «грязных деталей», я всегда вижу «GKI_Exception» в LogCat, прежде чем это произойдет:

GKI_exception (): 65524 getbuf: нет буфера

Вскоре после первого «GKI_Exception» реклама завершается неудачно с AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR. Линия...

E / BtGatt.btif? ### ASSERT: внешняя / bluetooth / bluedroid / main /../ btif / src / btif_gatt_client.c строка 803 Ошибка передачи контекста! (3) ###

... возможно актуально, но я не знаком с BlueDroid. Сказанное утверждение здесь:

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-5.0.2_r1/btif/src/btif_gatt_client.c#803

Некоторые возможные проблемы:
https://code.google.com/p/android/issues/detail?id=65455&nbsp;<- Я добавил несколько комментариев и файлов журнала к этому.
https://code.google.com/p/android-developer-preview/issues/detail?id=1753
Сканирование большого количества меток BLE
Сбой Bluetooth на Samsung S4