Le développement d'applications Android: comment débuter avec l'emplacement

Beaucoup applications Android peuvent fournir une belle prestation à leurs utilisateurs en apportant emplacement dans leurs expériences utilisateur. Que ce soit quelque chose d'aussi simple que les utilisateurs montrant leur emplacement sur une carte ou quelque chose de plus complexe comme la fourniture de notifications de fond basés sur le GPS, l'ajout de services de localisation à votre application est souvent quelque chose utilisateurs attendent.

Sommaire

Il ya plusieurs façons que vous pouvez ajouter localisation à vos applications Android. Dans Lollipop, quelques-uns des plus communs sont

  • Afficher ville ou rue adresse actuelle de l'utilisateur. Ceci est appelé inverse géo-codage.

  • Suivre activement l'emplacement de l'utilisateur, par exemple lorsque montrant l'emplacement de l'utilisateur sur une carte.

  • Mettre en place un périmètre virtuel de recevoir une notification quand un utilisateur arrive ou quitte un emplacement.

  • L'emplacement de suivre les utilisateurs d'effectuer la reconnaissance de l'activité et de déterminer si elles sont la marche, le vélo, ou en voiture.

  • Détecter si un utilisateur est à proximité d'une IBeacon utilisant Bluetooth.

Cet article vous montre une des utilisations les plus courantes de l'emplacement, qui est de surveiller l'emplacement des utilisateurs et afficher leur adresse de la rue actuelle pour les dans un TextView.

Vous aurez besoin de faire quatre choses à mettre en place des emplacements dans votre application:

  1. Mettez à jour votre configuration de construction.

  2. Ouvre une connexion à Google Play.

  3. Abonnez-vous aux mises à jour de localisation.

  4. Afficher l'adresse de l'utilisateur.

Comment mettre à jour votre configuration de construction

Android a un ensemble plus ancienne de Lieu API intégrés à l'OS sous la android.location package. Ces API ne sont plus entretenus, vous devez donc utiliser la nouvelle Google Play services API pour obtenir l'emplacement de l'utilisateur à la place.

Pour ajouter Google Play Services Lieu API à votre projet, placez la dépendance suivant dans votre build.config fichier:




dépendances { compiler 'com.google.android.gms: play-services-lieu: 05/06/87'}

Ensuite, ajoutez la ligne suivante à votre AndroidManifest.xml:

="android.permission.ACCESS_COARSE_LOCATION"/>="android.permission.ACCESS_FINE_LOCATION"/>android: name ="com.google.android.gms.version"Android: valeur ="@ entier / google_play_services_version"/>

La ACCESS_COARSE_LOCATION permission utilise Wi-Fi et d'informations de tour de téléphonie cellulaire, lorsqu'elles sont disponibles, de fournir emplacement met à jour à peu près de la taille d'un bloc de ville. La ACCESS_FINE_LOCATION l'autorisation peut vous obtenir des informations beaucoup plus élevé-résolution en utilisant le GPS du téléphone, mais au détriment d'une plus grande consommation de la batterie. Si votre application a besoin seul endroit grossière, vous pourriez penser qu'il est logique de demander seulement le ACCESS_COARSE_LOCATION permission, mais vraiment la plupart des applications voudra deux autorisations.

Vous devriez normalement demander deux permissions parce que vous serez utilisez un LocationProvider appelé le FusedLocationProvider, qui choisit automatiquement entre Wi-Fi, tour de téléphonie cellulaire, et les fournisseurs d'emplacement GPS pour vous donner la meilleure précision au moindre coût à votre batterie. Si vous savez que vous ne serez jamais besoin d'informations bien de l'emplacement, vous pouvez envisager de supprimer la ACCESS_FINE_LOCATION permission, mais sachez que votre application ne fonctionne pas bien dans des endroits qui ne disposent pas de tour de téléphonie cellulaire ou Wi-Fi.

La méta-données tag est nécessaire chaque fois que vous utilisez le service de bibliothèque Google Play.

Comment ouvrir une connexion à Google Play

L'emplacement API sont assez simples, mais pour les utiliser, vous aurez besoin de mettre en place les services Google Play API, et ceux qui sont un peu plus compliqué à utiliser.

Pour établir une connexion avec le Google Play Services, ajoutez la ligne suivante à votre activité ou un fragment:

// Le client Google API, pour l'emplacement servicesGoogleApiClient googleApiClient- @ Overridepublic vide onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -googleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build()-…}@Overridepublic vide onStart () {super.onStart () -googleApiClient.connect () -}Overridepublic Annuler onStop () {googleApiClient.disconnect () -super.onStop () -}

Ce code crée une nouvelle GoogleApiClient objet dans votre onCreate () de se connecter à Google Play Services, puis il tente de se connecter dans votre onStart () et débranchez votre onStop (). La GoogleApiClient a besoin d'un objet de rappel qu'il peut informer quand une connexion a été établie, si vous avez besoin d'ajouter des rappels à votre activité ou un fragment. Vous pouvez ajouter les rappels à la TaskEditFragment à toute activité du fragment.

public class TaskEditFragment étend outils de FragmentConnectionCallbacks, OnConnectionFailedListener{ Override public void onConnected (Bundle connectionHint) {// Connectés à Google Play services!// Ceci est où vous allez commencer à poser pour l'emplacement// Mises à jour. } Override public void onConnectionSuspended (int cause) {// Le Google Play connexion a été interrompue.// Désactivez tous les composants d'interface utilisateur qui dépendent de Google // API jusqu'à onConnected () est appelée.//// Cet exemple doesn'pas besoin de faire quelque chose ici. } Override public void onConnectionFailed (résultat ConnectionResult)  {// Ce rappel est important pour les erreurs de manipulation // Qui peuvent se produire lors d'une tentative de se connecter avec // Google.//Si votre application a remporté //'t travail correctement sans emplacement// Mises à jour, alors il's important de manipuler connexion // Erreurs correctement. Voir// Https://developer.android.com/google/auth/api-client.html// Pour plus d'informations sur les erreurs lors de la manipulation // Connexion à Google.//// Informations de localisation est facultative pour cette application, de sorte // Erreurs de connexion peuvent être ignorés en toute sécurité ici. }}

Félicitations! Vous avez maintenant correctement configurer une connexion à Google Play services qui se déconnecte automatiquement lorsque votre activité ou fragment est arrêté. La prochaine étape est de demander des mises à jour de localisation.

Comment vous abonner aux mises à jour de localisation

Vous avez reçu par la partie la plus difficile. Une fois que vous avez une connexion réussie au Google Play Services, vous pouvez commencer à écouter les mises à jour de localisation.

Vous devez d'abord dire à l'API de localisation à quelle fréquence et comment vous voulez que vos précise des mises à jour de localisation de l'être. Si vous devez afficher l'emplacement actuel pour les utilisateurs sur une carte, peut-être vous voudrez mises à jour très précises et rapides, afin que les utilisateurs puissent voir où ils sont comme ils se déplacent. La plupart des applications ont probablement besoin de mises à jour moins fréquents, et voilà ce que vous allez utiliser dans cet exemple.

Ajoutez le champ suivant à votre fragment ou de l'activité:

// Le LocationRequest définit combien de fois nous avons besoin de l'emplacement // updatesLocationRequest LocationRequest = new LocationRequest () setInterval (30000) .setPriority (LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY). -

Ce LocationRequest est mis en place pour demander de nouvelles mises à jour de localisation environ toutes les 30 secondes, et d'essayer d'équilibrer une bonne précision avec une consommation décente. Si vous voulez moindre consommation de piles, essayez PRIORITY_LOW_POWER, ou si vous voulez plus de précision, essayez PRIORITY_HIGH_ACCURACY. Vous pouvez même utiliser PRIORITY_NO_POWER pour les applications qui mettent à jour très rarement en arrière-plan et vous voulez juste ferroutage hors l'emplacement met à jour que d'autres applications demande! Découvrez LocationRequest sur le site de développeur Android pour plus d'informations sur les différentes options que vous pouvez utiliser.

Pour commencer à écouter les mises à jour d'emplacement, ajoutez la ligne suivante à la onConnected () la méthode que vous venez de créer:

Overridepublic Annuler onConnected (Bundle connectionHint) {// connectés à Google Play services! // Démarre vous abonnant aux mises à jour de localisationFusedLocationApi.requestLocationUpdates ( googleApiClient, LocationRequest, ce) -}

Cette demande à la FusedLocationApi pour commencer à envoyer vos mises à jour app de l'emplacement à l'aide Locatisur demande vous venez de configurer. Pour qu'il fonctionne, cependant, vous devez fournir un objet de rappel qui peut recevoir les mises à jour de localisation. Ajouter le LocationListener interfacer à votre activité ou un fragment, puis ajouter le OnLocationchanged () méthode comme ceci:

TaskEditFragment public class étend implementsConnectionCallbacks Fragment, OnConnectionFailedListener,com.google.android.gms.location.LocationListener{ Override public void OnLocationchanged (d'emplacement final de localisation)  {Toast.makeText (getActivity (), location.toString (), Toast.LENGTH_LONG) .montrer () -}}

Par ailleurs, si vous vous souciez de tous est l'emplacement actuel de l'utilisateur, et vous ne se soucient pas le mettant à jour, consultez FusedLocationApi.getLastLocation (), ce qui supprime la nécessité de la LocationListener interface.

Maintenant, si vous exécutez votre activité, vous devriez voir un message de Toast qui imprime l'emplacement actuel de l'utilisateur.

image0.jpg

Être capable de voir coordonnent leurs GPS est pas vraiment tout ce qui utile pour les utilisateurs en soi, mais, si nous allons utiliser leur emplacement à comprendre leur adresse actuelle et l'afficher à eux.

Comment afficher l'adresse de l'utilisateur

Android a une API intégrée appelé le géocodage pour regardant l'adresse d'un utilisateur à partir de ses coordonnées GPS ou son (et vice versa).

Il est assez simple à utiliser. Le seul hic est que parce qu'il fait une demande à Google de réseau sur le thread courant, il est à vous pour vous assurer que vous ne l'exécutez sur le fil de fond (de sorte que vous ne causent pas un blocage sur le thread principal de l'interface utilisateur sur lent réseaux).

Ajoutez ce qui suit à votre activité ou un fragment:

Geocoder geocoder- @ Overridepublic vide onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - ... géocodeur = new Geocoder (getActivity ()) -} @ vide Overridepublic OnLocationchanged (emplacement final de localisation) {// demander à Google pour l'adresse du emplacement .// Cela peut prendre un certain temps, alors faites-le dans un AsyncTask AsyncTask.new () {AdresseOverrideprotected doInBackground (Void [] params) {try {Liste
adresses = geocoder.getFromLocation (location.getLatitude (), location.getLongitude (), 1) -Si (adresses! = null addresses.size () 0>)retourner addresses.get (0) - } Catch (IOException e) { // Ignoré}retourner null- } // Joué sur le thread d'interface utilisateur Override onPostExecute protected void (adresse Adresse) {si (adresse! = null) { = Address.getThoroughfare de String () - si (s! = null)Toast.makeText (getActivity (), s, Toast.LENGTH_LONG) .montrer () -} }} .Execute () - }

Ce code ajoute un champ de géocodage à votre activité ou un fragment, initialise dans onCreate (), et utilise ensuite dans OnLocationchanged () pour trouver l'adresse pour l'emplacement actuel. Il affiche ensuite un message de Toast avec la "voie" pour l'exemple d'adresse-pour, "600 West Avenue Chicago." L'objet adresse renvoyée par le géocodage est riche de vérifier les infos javadocs pour plus de détails sur ce que vous pouvez afficher.

Et avec cela, vous avez tout ce que vous devez savoir sur l'abonnement à l'emplacement actuel de l'utilisateur à partir d'une activité ou d'un fragment Android.


» » » » Le développement d'applications Android: comment débuter avec l'emplacement