В отличие от традиционного подхода, предлагающего пользователю перейти на страницу настроек, включить службы определения местоположения и вернуться снова, я заметил более простой способ сделать то же самое в некоторых последних приложениях.
Ссылаясь на снимок экрана ниже, он предлагает пользователю диалоговое окно для включения служб определения местоположения одним щелчком мыши, и оно работает в этих приложениях.
Как я могу добиться того же?
Ответы:
Это диалоговое окно создается LocationSettingsRequest.Builder, доступным в сервисах Google Play.
Вам нужно добавить в свое приложение зависимость
build.gradle
:Затем вы можете использовать этот минимальный пример:
Вы можете найти полный пример здесь .
источник
You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
app
Следуйте инструкциям, указанным ниже
1) Создайте по
LocationRequest
своему желанию2) Создайте
LocationSettingsRequest.Builder
3) Получить
LocationSettingsResponse
Task
используя следующий кодПримечание:
LocationServices.SettingsApi
не рекомендуется использоватьSettingsClient
вместо.4) Добавьте,
OnCompleteListener
чтобы получить результат от Задачи. ПоTask
завершении клиент может проверить настройки местоположения, посмотрев на код состоянияLocationSettingsResponse
объекта.СЛУЧАЙ 1:
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
Местоположение не включено, но мы можем попросить пользователя включить местоположение, предложив ему включить местоположение в диалоговом окне (позвонивstartResolutionForResult
).СЛУЧАЙ 2::
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
Настройки местоположения не подходят. Однако у нас нет возможности исправить настройки, поэтому мы не будем показывать диалог.5)
OnActivityResult
мы можем получить действие пользователя в диалоговом окне настроек местоположения.RESULT_OK
=> Пользователь включил Местоположение.RESULT_CANCELLED
- Пользователь отклонил запрос на настройку местоположения.источник
Его работа похожа на карты Google
Добавить зависимость в файл build.gradle
этот или тот
источник
Объявление переменной
Открыть диалог с использованием кода ниже
onActivityResult
источник
rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
callstartIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)
, иначеonActivityResult()
не будет вызван.startIntentSenderForResult
в методе использовать что-то подобноеopenGpsEnableSetting()
?openGpsEnableSetting()
просто запускается диалог для включения настроек GPS. После его завершенияonActivityResult()
вызывается с помощьюrequestCode == REQUEST_ENABLE_GPS
.onActivityResult()
вызывается из Activity, и мне было интересно, можно ли вернуть результат вFragment
подобноеstartIntentSenderForResult
.Спасибо Маттиа Маэстрини +1
Решение Xamarin:
НОТА:
Это не будет работать с Huawei или другими устройствами, на которых не установлены службы Google.
источник
using android.Gms.Common.Apis; using Android.Gms.Location;
? После звонкаLocationServices.SettingsApi.CheckLocationSettings
вы получите обратный звонок внутриresult.SetResultCallback(
? Поставьте точкуAndroid Marshmallow 6 поддерживает разрешение во время выполнения. Разрешения времени выполнения работают только на Marshmallow, а на pre-Marshmallow он все еще работает по-старому.
Вы можете узнать больше об этом в официальном видео разработчика Android:
https://www.youtube.com/watch?v=C8lUdPVSzDk
И запрос разрешения: http://developer.android.com/training/permissions/requesting.html
источник
Спасибо Маттиа Маэстрини за ответ, я хотел бы добавить, что используя
compile 'com.google.android.gms:play-services-location:8.1.0'
хватит. Это предотвращает включение в ваше приложение ненужных библиотек и помогает снизить количество методов.
источник
Котлин Решение
Добавить
build.gradle(Module:app)
после этого создайте эту функцию
источник
В недавнем обновлении Marshmallow, даже если параметр «Местоположение» включен, вашему приложению потребуется явно запрашивать разрешение. Рекомендуемый способ сделать это - показать раздел разрешений вашего приложения, в котором пользователь может переключать разрешения по мере необходимости. Фрагмент кода для этого выглядит следующим образом:
И переопределите
onRequestPermissionsResult
метод, как показано ниже:Другой подход заключается в том, что вы также можете использовать SettingsApi, чтобы узнать, какие провайдеры местоположения включены. Если ни один из них не включен, вы можете запросить диалоговое окно для изменения параметра из приложения.
источник
Самый простой способ, который я нашел во время своего исследования, - это создать класс Util для этого процесса запроса местоположения, а затем вызвать его, чтобы включить для нас GPS.
Пожалуйста, проверьте этот блог! Это рассказало всю историю.
источник