Contrairement à l'approche traditionnelle consistant à inviter l'utilisateur à accéder à la page des paramètres et à activer les services de localisation et à revenir, j'ai remarqué un moyen plus simple de faire de même dans certaines des dernières applications.
En se référant à la capture d'écran ci-dessous, il invite une boîte de dialogue à l'utilisateur pour activer les services de localisation en un seul clic et cela fonctionne dans ces applications.
Comment puis-je réaliser la même chose?
Réponses:
Cette boîte de dialogue est créée par LocationSettingsRequest.Builder disponible dans les services Google Play.
Vous devez ajouter une dépendance à votre application
build.gradle
:Ensuite, vous pouvez utiliser cet exemple minimal:
Vous pouvez trouver l'exemple complet ici .
la source
You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
app
Suivez les étapes mentionnées ci-dessous
1) Créez un
LocationRequest
selon votre souhait2) Créez un
LocationSettingsRequest.Builder
3) Utilisez le
LocationSettingsResponse
Task
code suivantRemarque:
LocationServices.SettingsApi
est obsolète donc, utilisezSettingsClient
plutôt.4) Ajoutez un
OnCompleteListener
pour obtenir le résultat de la tâche. Une fois la tâcheTask
terminée, le client peut vérifier les paramètres d'emplacement en regardant le code d'état de l'LocationSettingsResponse
objet.CAS 1:: L'
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
emplacement n'est pas activé mais, nous pouvons demander à l'utilisateur d'activer l'emplacement en lui demandant d'activer l'emplacement avec la boîte de dialogue (en appelantstartResolutionForResult
).CAS 2::
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
Les paramètres de localisation ne sont pas satisfaits. Cependant, nous n'avons aucun moyen de corriger les paramètres, nous n'afficherons donc pas la boîte de dialogue.5)
OnActivityResult
nous pouvons obtenir l'action de l'utilisateur dans la boîte de dialogue des paramètres d'emplacement.RESULT_OK
=> L'utilisateur a activé l'emplacement.RESULT_CANCELLED
- L'utilisateur a refusé la demande de réglage de l'emplacement.la source
Son fonctionnement est similaire à Google Maps
Ajouter une dépendance dans le fichier build.gradle
Ceci ou cela
la source
Déclaration de variable
Ouvrir la boîte de dialogue en utilisant le code ci-dessous
onActivityResult
la source
rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
appelerstartIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)
, sinononActivityResult()
ne sera pas appelé.startIntentSenderForResult
dans la méthodeopenGpsEnableSetting()
?openGpsEnableSetting()
démarre simplement une boîte de dialogue pour activer les paramètres GPS. Une fois terminé,onActivityResult()
est appelé avecrequestCode == REQUEST_ENABLE_GPS
.onActivityResult()
est appelé depuis Activity et je me demandais s'il est possible de renvoyer le résultat à un résultatFragment
similairestartIntentSenderForResult
.Merci à Mattia Maestrini +1
Solution Xamarin:
REMARQUE:
Cela ne fonctionnera pas avec Huawei ou d'autres appareils sur lesquels les services Google ne sont pas installés.
la source
using android.Gms.Common.Apis; using Android.Gms.Location;
- dessus ? Après avoir appeléLocationServices.SettingsApi.CheckLocationSettings
, recevez-vous un rappel à l'intérieurresult.SetResultCallback(
? Placez un point d'arrêt sur chacun d'eux et vérifiez ce que fait le codeAndroid Marshmallow 6 prend en charge les autorisations d'exécution. Les autorisations d'exécution ne fonctionnent que sur Marshmallow et sur pré-Marshmallow, cela fonctionne toujours à l'ancienne.
Vous pouvez en savoir plus à ce sujet dans cette vidéo officielle du développeur Android:
https://www.youtube.com/watch?v=C8lUdPVSzDk
Et demander la permission: http://developer.android.com/training/permissions/requesting.html
la source
Merci Mattia Maestrini pour la réponse, je voudrais ajouter qu'en utilisant
compile 'com.google.android.gms:play-services-location:8.1.0'
suffirait. Cela empêche votre application d'inclure des bibliothèques inutiles et aide à garder votre nombre de méthodes bas.
la source
Solution Kotlin
Ajouter
build.gradle(Module:app)
après cela, créez cette fonction
la source
Avec la mise à jour récente de Marshmallow, même lorsque le paramètre de localisation est activé, votre application devra demander explicitement l'autorisation. La méthode recommandée pour ce faire est d'afficher la section Autorisations de votre application dans laquelle l'utilisateur peut basculer l'autorisation selon les besoins. L'extrait de code pour cela est comme ci-dessous:
Et remplacez la
onRequestPermissionsResult
méthode comme ci-dessous:Une autre approche est que vous pouvez également utiliser SettingsApi pour savoir quels fournisseurs de localisation sont activés. Si aucun n'est activé, vous pouvez inviter une boîte de dialogue pour modifier le paramètre à partir de l'application.
la source
Le moyen le plus simple que j'ai trouvé au cours de mes recherches est de créer une classe Util pour ce processus de demande de localisation, puis de l'appeler pour activer le GPS pour nous.
Veuillez consulter ce blog! Il a raconté toute l'histoire.
la source