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