2015-09-18 5 views
9

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

Я использую эти методы, конечно:
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 поддержка периферийного режим (для рекламы) была добавлена ​​в леденец и не доступен в 4.x. Поддерживаются только некоторые устройства. Совместимость покрыта, по меньшей мере:

https://altbeacon.github.io/android-beacon-library/beacon-transmitter-devices.html Chipsets/Devices supporting Android 5 BLE peripheral mode chipsets supporting BLE peripheral role on Android 5

Например, эти устройства должны иметь поддержку: Motorola Мото Е 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» реклама не с рекламойCallback.ADVERTISE_FAILED_INTERNAL_ERROR. Линия...

E/BtGatt.btif? ### ASSERT: внешний/bluetooth/bluedroid/main /../ btif/src/btif_gatt_client.c строка 03 Передача контекста не удалась! (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 < - Я добавил некоторые комментарии и файлы журналов в этом.
https://code.google.com/p/android-developer-preview/issues/detail?id=1753
Scanning large number of BLE Tags
Bluetooth Crash on Samsung S4

+1

Я столкнулся с аналогичными проблемами с Moto G XT1032 с 5.1 и Moto G XT1063 с 5.0.2. Я пытаюсь выполнить сканирование -> connect -> read properties -> disconnect -> scan again, но он не будет работать при перезапуске сканирования. Вам удалось найти решение для этого? –

+0

К сожалению, решения не найдены. –

ответ

2

Я тестировал приложение на Moto G 2-го поколения и работать с той же проблемой.

Я попробовал его на планшете Nexus 9 под управлением Android 6.0, там я не смог воспроизвести ошибку и, похоже, работает. Также на Nexus Player с Android 5.1.1 он работает без проблем. Итак, либо это действительно проблема Moto G, либо, скорее всего, ошибка Android 5.0.2, которая была решена в более поздних версиях.

Смежные вопросы