Android Lollipop 5.0 Bluetooth Низкая энергетическая центральная роль плохой производительности
С недавнего выпуска Android 5.0 Lollipop я испытываю очень плохую производительность Bluetooth Low Energy API в своем устройстве Nexus 4. С предыдущей версией ОС (Android 4.4.4 Kit-Kat) она работала как шарм, а одно и то же приложение, запущенное в версии 5.0, имеет следующее поведение:
-
Часто он не обнаруживает рекламный пакет от периферии.
ADVERTISING_INTERVAL периферийного устройства - 20 мс, поэтому приложение должно обнаруживать хотя бы одну рекламу в 60 мс в худшем случае. Я попытался с BluetoothLeScanner
(с настройками SCAN_MODE_LOW_LATENCY) не использовать устаревший mBluetoothAdapter.startLeScan(mLeScanCallback)
без успеха.
-
Когда это происходит, когда я пытаюсь подключиться к серверу GATT, он редко делает.
Я проверил с помощью анализатора BLE, что пакет CONNECTION_REQUEST даже не отправляется на периферию.
Кажется, я не единственный, у кого такие ошибки, а некоторые другие пользователи разместили похожие вопросы. Кто-нибудь знает, что произошло?
-
Обновление 1: (2014/12/17)
Я также протестировал одно и то же приложение с помощью Lollipop с Nexus 5 и редко подключается к серверу GATT. Каждый раз, когда я отправляю запрос на соединение, он никогда не делает этого, потому что периферийное устройство не получает пакет. Прежде чем обновлять этот Nexus 5 до Lollipop, он отлично работал на Kit-Kat 4.4.4.
Обновление 2: (2014/12/17)
Android 5.0.1 не решает проблему вообще.
Обновление 3: (2015/04/23)
Android 5.1 также не решает проблему. Сегодня у меня была возможность протестировать Android 5.0.1 на SAMSUNG Galaxy S4, и он отлично работает. Я также тестировал Nexus 5 со свежей установкой Android 5.1, и он отлично работает. Проблема все еще остается в Nexus 4. Они сделали что-то странное на прошивке Android 5.0 и последующих версиях, которые нарушили идеальную совместимость Android 4.4.4 с API Bluetooth.
Ответы
Ответ 1
Просто обновить: я также наблюдаю такую же проблему после обновления моего s5 до lollipop. На kitkat он работал нормально. Это действительно неприемлемо для такого поведения.
Я также не вижу запроса на соединение, который я делаю в журналах snoop, и api также не отвечает, говоря, что что-то не так с запросом на соединение или периферийным. Другим моментом является мой запрос на соединение - это всегда запрос автоматического подключения, из-за которого мое приложение продолжает ждать какого-либо обратного вызова, который никогда не будет вызван. Я не хочу, чтобы мой код был грязным и сложным, внедряя некоторые таймеры для проверки возможности подключения.
Есть ли ошибка, связанная с этим в репозитории ошибок Google?
Ответ 2
перешел на более ясный ответ
-
На прошлой неделе у меня были проблемы с bt после обновления до 5.0. Может быть
вы можете остановить процесс bt из приложений в настройках, и это возможно
будет reset все так:
Настройки → Приложения → Прокрутить до Все → Выбрать общий доступ Bluetooth → Очистить кэш.
-
Известно, что выключение этих служб при их создании
эта проблема в некоторых случаях. вы также можете следовать этой ссылке, если это
более ясно:
http://www.gottabemobile.com/2014/12/01/nexus-lollipop-problems-fixes/
-
В моем случае я тоже не специалист по Bluetooth, но я решил эту проблему
после многих испытаний. И я обнаружил, что отказ от ключа bt от
pc помощь также.
-
Обычно не рекомендуется обновлять так быстро, не проверяя
компетенция Bluetooth. Насколько я понял, bt известно
имеют проблемы при каждом обновлении
Удачи вам в ваших усилиях. Если этого ответа недостаточно, я надеюсь, что вы найдете помощь от кого-то другого.
Ответ 3
Думаю, что я нашел ответ
У меня была такая же проблема, мне потребовалось 2-5 минут для подключения к моему устройству ПОСЛЕ того, как я обновился до Lollipop
Это заняло 5 секунд до обновления.
Исправление:
Старый код:
mBluetoothGatt = mBluetoothDevice.connectGatt(this, true, mGattCallbackSync);
новый код:
mBluetoothGatt = mBluetoothDevice.connectGatt(this, false, mGattCallbackSync)
;
Я просто изменил аргумент autoConnect
на false. Теперь требуется 5 секунд.
Надеюсь, это сработает для вас.