LocationSettingsRequest.Builder tiene un método setAlwaysShow(boolean show). Si bien el documento indica que actualmente no está haciendo nada (actualizado 2015-07-05: la documentación actualizada de Google ha eliminado esta redacción), la configuración builder.setAlwaysShow(true);habilitará el comportamiento de Google Maps:

Aquí está el código que lo hizo funcionar:
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;
}
}
});
}
De la documentación de Android
Para Kotlin ver aquí: https://stackoverflow.com/a/61868985/12478830
RESOLUTION_REQUIRED. Luego, una vez que acepto y habilito la ubicación, golpeaSUCCESSy omite por completoonActivityResult(). PresionarNoo retroceder hace que el cuadro de diálogo desaparezca por un segundo, luego vuelva a cargar y presioneRESOLUTION_REQUIREDnuevamente. La única forma de deshacerse del diálogo es aceptar o cerrar y volver a abrir la aplicación.launchModeNO se puede configurar desingleInstanceotra manera, esto NO funcionará. El cuadro de diálogo nunca aparecerá yonActivityResultse llamará automáticamente. NO TIENESandroid:launchMode="singleInstance"para tu actividad enAndroidManifest. Aprendí de esta manera muy difícil después de 3 horasMe gustaría agregar algunos cambios a la respuesta de kai para aquellos que buscan manejar botones Sí / No.
Declara esta constante en tu actividad
llame
settingsrequest()a su onStart ()fuente
LocationServices.SettingsApi está en desuso ahora, así que usamos SettingsClient
Luego verifique si la configuración de ubicación actual se cumple. Cree la tarea LocationSettingsResponse:
Luego agregue Listener
Añadido enActivityResult
Consulte el enlace ConfiguraciónCliente
fuente
implementation 'com.google.android.gms:play-services-location:16.0.0'en su lugar.¿Funciona de manera similar a Google Maps?
Código fuente: https://drive.google.com/open?id=0BzBKpZ4nzNzUOXM2eEhHM3hOZk0
Agregar dependencia en el archivo build.gradle:
O
fuente
Ola Cabs está utilizando la API de configuración recientemente lanzada para lograr esta funcionalidad. Según la nueva API, no se requiere que el usuario navegue a la página de configuración para habilitar los servicios de ubicación que brindan una integración perfecta para el mismo. Por favor lea a continuación para más detalles:
https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi
fuente
SettingsAPIha quedado en desuso, ahora usaSettingsClientdevelopers.google.com/android/reference/com/google/android/gms/…Dependencia
Código
fuente
También puede agregar varios LocationRequests for Builder para lograr el cuadro de diálogo "Usar GPS, Wi-Fi y redes móviles para la ubicación" en lugar de simplemente "Usar GPS para la ubicación"
fuente
En Kotlin, use este código:
fuente
Compruebe mi solución muy simple para obtener la ubicación del usuario en primer plano.
https://github.com/Maqsood007/UserLocation-Android/blob/master/app/src/main/java/jetpack/skill/userlocation_android/utils/LocationUtility.kt
fuente