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 секунд.

Надеюсь, это сработает для вас.