LocationSettingsRequest.Builder a une méthode setAlwaysShow(boolean show)
. Bien que le document indique qu'il ne fait actuellement rien (mise à jour 05/07/2015: la documentation Google mise à jour a supprimé ce libellé), le paramètre activera le builder.setAlwaysShow(true);
comportement de Google Maps:
Voici le code qui l'a fait fonctionner:
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;
}
}
});
}
À partir de la documentation Android
Pour Kotlin voir ici: https://stackoverflow.com/a/61868985/12478830
RESOLUTION_REQUIRED
. Ensuite, une fois que j'accepte et active l'emplacement, il frappeSUCCESS
et saute complètementonActivityResult()
. AppuyerNo
ou reculer fait disparaître la boîte de dialogue pendant une seconde, puis recharger et frapper àRESOLUTION_REQUIRED
nouveau. Le seul moyen de se débarrasser de la boîte de dialogue est d'accepter ou de fermer et de rouvrir l'application.launchMode
peut PAS être réglée sur,singleInstance
sinon cela ne fonctionnera PAS. La boîte de dialogue n'apparaîtra jamais etonActivityResult
sera appelée automatiquement. NE PAS AVOIRandroid:launchMode="singleInstance"
pour votre activité enAndroidManifest
. J'ai appris cela très dur après 3 heuresJe voudrais ajouter quelques changements à la réponse de kai pour ceux qui cherchent à gérer les boutons Oui / Non.
Déclarez cette constante dans votre activité
appelez
settingsrequest()
votre onStart ()la source
LocationServices.SettingsApi est désormais obsolète, nous utilisons donc SettingsClient
Vérifiez ensuite si les paramètres de localisation actuels sont satisfaits. Créez la tâche LocationSettingsResponse:
Puis ajoutez Listener
Ajouté onActivityResult
Reportez-vous au lien SettingsClient
la source
implementation 'com.google.android.gms:play-services-location:16.0.0'
place.Son fonctionnement similaire à Google Maps?
Code source: https://drive.google.com/open?id=0BzBKpZ4nzNzUOXM2eEhHM3hOZk0
Ajouter une dépendance dans le fichier build.gradle:
OU
la source
Ola Cabs utilise la nouvelle API Settings pour atteindre cette fonctionnalité. Selon la nouvelle API, l'utilisateur n'est pas obligé de naviguer vers la page des paramètres pour activer les services de localisation donnant une intégration transparente pour la même chose. Veuillez lire ci-dessous pour plus de détails:
https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi
la source
SettingsAPI
est obsolète, vous utilisez maintenantSettingsClient
développeurs.google.comDépendance
Code
la source
Vous pouvez également ajouter plusieurs demandes de localisation pour Builder pour obtenir la boîte de dialogue "Utiliser le GPS, le Wi-Fi et les réseaux mobiles pour la localisation" au lieu de simplement "Utiliser le GPS pour la localisation"
la source
Dans Kotlin, utilisez ce code:
la source
Veuillez vérifier ma solution très simple pour obtenir l'emplacement de l'utilisateur au premier plan.
https://github.com/Maqsood007/UserLocation-Android/blob/master/app/src/main/java/jetpack/skill/userlocation_android/utils/LocationUtility.kt
la source