LocationSettingsRequest.Builder имеет метод setAlwaysShow(boolean show)
. Хотя в документе указано, что он в настоящее время ничего не делает (обновление 2015-07-05: обновленная документация Google удалила эту формулировку), настройка builder.setAlwaysShow(true);
активирует поведение Карт Google:
Вот код, который заставил его работать:
if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
googleApiClient.connect();
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
//**************************
builder.setAlwaysShow(true); //this is the key ingredient
//**************************
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult result) {
final Status status = result.getStatus();
final LocationSettingsStates state = result.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(
getActivity(), 1000);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
break;
}
}
});
}
Из документации Android
Для Котлина см. Здесь: https://stackoverflow.com/a/61868985/12478830
RESOLUTION_REQUIRED
. Затем, как только я принимаю и включаю местоположение, он попадаетSUCCESS
и полностью пропускаетсяonActivityResult()
. НажатиеNo
или назад заставляет диалог исчезнуть на секунду, затем перезагрузить и нажать ещеRESOLUTION_REQUIRED
раз. Единственный способ избавиться от диалогового окна - принять или закрыть и снова открыть приложение.launchMode
НЕ может быть установлена,singleInstance
иначе это НЕ будет работать. Диалог никогда не появится иonActivityResult
будет вызван автоматически. НЕ ИМЕТЬandroid:launchMode="singleInstance"
для вашей деятельности вAndroidManifest
. Я усвоил этот очень тяжелый путь через 3 часаЯ хотел бы добавить некоторые изменения в ответ kai для тех, кто хочет работать с кнопками Да / Нет.
Объявите эту константу в своей деятельности
позвоните
settingsrequest()
в свой onStart ()источник
LocationServices.SettingsApi теперь устарел, поэтому мы используем SettingsClient
Затем проверьте, подходят ли текущие настройки местоположения. Создайте задачу LocationSettingsResponse:
Затем добавьте слушателя
Добавлено onActivityResult
Перейдите по ссылке SettingsClient
источник
implementation 'com.google.android.gms:play-services-location:16.0.0'
вместо этого.Его работа похожа на карты Google?
Исходный код: https://drive.google.com/open?id=0BzBKpZ4nzNzUOXM2eEhHM3hOZk0
Добавьте зависимость в файл build.gradle:
ИЛИ
источник
Ola Cabs использует недавно выпущенный API настроек для достижения этой функции. Согласно новому API, пользователю не требуется переходить на страницу настроек, чтобы включить службы определения местоположения, что обеспечивает бесшовную интеграцию для них. Пожалуйста, прочтите ниже для более подробной информации:
https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi
источник
SettingsAPI
устарела, теперь вы используетеSettingsClient
developers.google.com/android/reference/com/google/android/gms/…зависимость
Код
источник
Вы также можете добавить несколько запросов LocationRequests для Builder, чтобы открыть диалоговое окно «Использовать GPS, Wi-Fi и мобильные сети для определения местоположения» вместо простого «Использовать GPS для определения местоположения».
источник
В Котлине используйте этот код:
источник
Пожалуйста, ознакомьтесь с моим очень простым решением, чтобы указать местоположение пользователя на переднем плане.
https://github.com/Maqsood007/UserLocation-Android/blob/master/app/src/main/java/jetpack/skill/userlocation_android/utils/LocationUtility.kt
источник
Новый обновленный ответ Август 2020 введите описание ссылки здесь
мой фрагмент похож на это обновление, если вы используете внутри своей деятельности
источник