2016-02-29 2 views
4

Я использую com.google.android.gms.location.SettingsApi, чтобы включить Bluetooth и местоположение в моем приложении для Android. Появится диалоговое окно с приглашением пользователя включить его, когда оно отключено, чтобы мое приложение могло сканировать соседние устройства Bluetooth. Я выполнил инструкции в справочном руководстве (https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi). Это довольно просто: сначала подключиться к GoogleApiClient, а затем вы делаете LcoationSettingsRequest.builder:setNeedBle from SettingsApi не работает в API23

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
    .addLocationRequest(mLocationRequestHighAccuracy) 
    .setNeedBle(true) 

В моем случае я добавил setNeedBle (истинную), так как мне нужно, чтобы включить Bluetooth на а. Затем вы вызываете checkLocationSettings из SettingsApi и добавляете обратный вызов к результату. Появится диалоговое окно с приглашением пользователя включить Bluetooth и местоположение, и вы получите обратный вызов, независимо от того, выбрал ли пользователь это делать или нет.

Это прекрасно работает на устройстве с API22 и службами Google Play 8.4.89, но не на том же устройстве с API23 и версией GPS 8.4.89. Это только часть setNeedBle (true), которая не работает на API23: когда Bluetooth выключен, я не получаю диалог (но диалог для включения местоположения работает нормально). Поскольку оба они имеют ту же самую версию GPS, она имеет отношение к API22 и API23. Кто-нибудь знает, является ли это ошибкой или как я могу решить эту проблему?

Обнаружил подобный вопрос (How to pop up Enable Bluetooth prompt from Google Play Services?) об этом, но там предлагается, что это исправлено в версии GPS 8.1, но я использую GPS v8.4. Кроме того, это немного другая проблема, так как я не получаю статус SETTINGS_CHANGE_UNAVAILABLE.

+0

Не уверен, что вы это рассмотрели, но в API 23 существует новая реализация в отношении сканирования BLE. См. [Улучшенное сканирование с низким энергопотреблением Bluetooth] (http://developer.android.com/about/versions/marshmallow/android-6.0.html#ble-scanning). Для нового API вам нужно использовать ['setCallbackType()'] (http://developer.android.com/reference/android/bluetooth/le/ScanSettings.Builder.html#setCallbackType (int)). – gerardnimo

+0

Спасибо, но это связано с оптимизацией производительности во время сканирования, а не с поддержкой Bluetooth. – Nimyz

+0

Вы нашли решение? – Eylen

ответ

0

Если клиент использует BLE-сканирование для получения местоположения, он может запросить разрешение BLE, вызвав setNeedBle(boolean).

Пожалуйста, обратитесь к решению: https://github.com/googlemaps/android-samples/tree/master/ApiDemos (если вы хотите, чтобы предоставить разрешение на API 23 (Android M) в момент работает.)

Также, пожалуйста, обратитесь к этому официальному репо:
https://developer.android.com/training/location/change-location-settings.html
https://developer.android.com/about/versions/marshmallow/android-6.0.html#bluetooth-stylus

Надеюсь, это поможет.

0

Служба определения местоположения в API 23 имеет панель настройки Scanning.

location

Есть переключатели для Wi-Fi и Bluetooth сканирования для повышения точности определения местоположения.

scanning

переключая его, услуга определения местоположения может использовать BLE сканирование даже если Bluetooth не включен. В этом случае setNeedBle(true) не будет предлагать пользователю открывать Bluetooth, поскольку служба определения местоположения уже может использовать BLE.

Но я не знаю, как сделать сканирование BLE в службе определения местоположения доступным в нашем собственном приложении, возможно, это невозможно.

Я предлагаю проверить, включен ли Bluetooth после службы определения местоположения запроса, и показать приглашение Bluetooth, если оно не включено.

Смежные вопросы