Я испытываю серьезные проблемы с Android 6.0 и некоторыми устройствами с Bluetooth Low Energy. Одно из этих конфликтных устройств - это следующее:
DEVICE INFO:
Name: Samsung Galaxy SV
Model number: SM-G900V
Android vers: 6.0.1
Patch level: May 1, 2016
Hard. vers: G900V.05
Если я сделаю некоторый стресс-тест, основанный на подключении и отключении приложения к периферии BLE, коэффициент успеха едва достигает 50%.
Прочитав последнюю документацию Android, они рекомендуют указать режим транспорта в последнем параметре connectGatt, чтобы обеспечить перенос BLE вместо BR/EDR:
device.connectGatt(this, false, mGattCallback, BluetoothDevice.TRANSPORT_LE);
Ничто не изменилось с этим улучшением.
Следуя некоторым рекомендациям, а также прочитав о проблемах с подключением BLE, я обнаружил несколько связанных с ним проблем с Samsung Galaxy S6 и в один из них, они предложили ряд шагов для устранения проблем с подключением BLE. Ключевым является очистить данные о приложении Bluetooth Share. Таким образом, коэффициент связности увеличился почти на 100% успеха сразу. Однако, если вы ждете и играете с некоторыми другими приложениями BLE и подключаетесь к другим периферийным устройствам, проблема рано или поздно вернется.
В Google Play есть некоторые приложения, которые пытаются исправить эти проблемы BLE и что они в основном делают:
/system/bin/rm -r /data/misc/bluetoothd/*
/system/bin/rm -r /data/misc/hcid/*
Хотя это способ очистить кэш Bluetooth, он требует, чтобы устройство было внедрено, что не является разумным решением для профессиональных приложений.
Ни один из частных API Android, который я исследовал, не помог мне решить эту проблему, и единственное, что я нашел, это принудительное очищение кэша обнаружения сервисов, которое не имеет ничего общего с сделайте это.
Используя пакетный сниффер BLE, я вижу, что ADV_CONNECT_REQ
даже не отправляется с устройства на периферию, и через некоторое время пакет Android запускает событие STATE_DISCONNECTED
в BluetoothGattCallback
.
Я точно не знаю, почему эта проблема возникает в некоторых устройствах 6.0, а не в других, поскольку проблема с кэшем Bluetooth Share. Что там точно хранится? Только ранее подключенные/сопряженные устройства? Я единственный, кто испытывает эту проблему? Если нет, как вы, ребята, решаете это? Мне бы не хотелось наставлять конечных пользователей о том, как очистить данные приложения Bluetooth Share.