Как вывести всплывающее окно «Включить Bluetooth» из сервисов Google Play?

Приложение, над которым я работаю, использует как Locations, так и BLE, и если местоположение или Bluetooth отключены, я должен попросить пользователя включить их.

Последние службы Google Play предоставляют стандартный способ сделать это с помощью LocationSettingsRequest, который проверяет требования и вызывает стандартное всплывающее окно, если требуются изменения в настройках. Это работает как шарм только для местоположения, но как только я добавляю SetNeedBle (true) к LocationSettingsRequest, я получаю статус SETTINGS_CHANGE_UNAVAILABLE.

Единственное мое предположение заключалось в том, что мне нужно добавить вызов AddApi (FitnessClass.BLE_API) к GoogleApiClientBuilder, так как это может быть жизненно важно для функциональности BLE, но затем у меня возникла ошибка подключения к службам Google Play со статусом SIGN_IN_REQUIRED, что сбивает с толку, поскольку мне просто нужна BLE часть фитнес-сервиса.

Кто-нибудь знает хороший пример использования LocationSettingsRequest для запроса пользователя как для местоположения, так и для Bluetooth?

Всплывающее окно местоположения


person Mikhail    schedule 10.09.2015    source источник


Ответы (2)


Вы очень близки. В LocationSettingsRequest.Builder есть setNeedBle(boolean needBle), в котором появится диалоговое окно с запросом на BLE. Не используйте фитнес-API для местоположения BLE.

Также убедитесь, что на телефоне включен BLE, добавив в манифест:

<manifest>
<uses-feature
        android:name="android.hardware.bluetooth_le"
        android:required="false" />
</manifest>

Затем в вашем коде:

if(context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    //has BLE
}

А из службы Google Play вы можете использовать SettingApi которые спрашивают систему о доступных функциях. Руководство содержит полный пример того, как его использовать.

https://developers.google.com/android/reference/com/google/android/gms/location/LocationSettingsRequest.Builder.html#setNeedBle(boolean)

person xiaomi    schedule 10.09.2015
comment
Я пробовал это раньше, но я получаю статус SETTINGS_CHANGE_UNAVAILABLE. У вас есть рабочий образец? - person Mikhail; 10.09.2015
comment
На какую версию андроида вы ориентируетесь? Вы можете избежать телефона без BLE в манифесте с помощью <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" /> - person xiaomi; 10.09.2015
comment
Приложение уже упоминало строки в манифесте, и я пробовал setNeedBle(boolean) на Samsung Galaxy S3 (4.3) и LG G3 (5.0). Оба раза это дало мне SETTINGS_CHANGE_UNAVAILABLE. - person Mikhail; 10.09.2015

Похоже, это было исправлено в 8.1.0, поэтому SetNeedBle (true) работает как положено:

введите здесь описание изображения

person Mikhail    schedule 01.11.2015