Comment faire pour obtenir et utiliser les données de localisation dans votre application Android

location_marker_gps_shutterstock Shutterstock

En utilisant l'emplacement dans votre application a un potentiel incroyable pour rendre votre application semble intelligente pour les utilisateurs finaux. Avec les données de localisation, votre application peut prédire les actions potentielles d'un utilisateur, de recommander des mesures, ou effectuer des actions en arrière-plan sans interaction de l'utilisateur.

Pour cet article, nous allons discuter de l'intégration des mises à jour de localisation dans une application Android, avec un accent sur la récupération de la latitude et la longitude de un endroit donné seulement. Il est intéressant de souligner que Emplacement peut (et ne) contiennent beaucoup plus que juste des valeurs latitude et de longitude. Elle peut aussi avoir des valeurs pour le palier, l'altitude et la vitesse de l'appareil.

Préparation

Avant votre application peut recevoir des données de localisation, vous devez demander les autorisations de localisation. Il ya deux autorisations de localisation, ACCESS_FINE_LOCATION et ACCESS_COARSE_LOCATION. Nous utilisons ACCESS_FINE_LOCATION pour indiquer que nous voulons recevoir un emplacement aussi précis que possible. Pour demander cette autorisation, ajouter ce qui suit à votre application manifeste:

 

Nous devons également sélectionner des fournisseurs d'emplacement que nous voulons utiliser pour obtenir les données de localisation. Il existe actuellement trois fournisseurs:

  • GPS_PROVIDER: La méthode la plus précise, qui utilise le récepteur GPS intégré de l'appareil. Le GPS est un système de satellites en orbite, qui fournit des informations de localisation de presque partout sur la terre. Il peut parfois prendre un certain temps pour obtenir une solution de localisation GPS (généralement plus rapide lorsque l'appareil est à l'extérieur).
  • NETWORK_PROVIDER: Cette méthode détermine l'emplacement d'un dispositif utilisant les données recueillies à partir des tours de téléphonie cellulaire environnantes et les points d'accès WiFi. Bien qu'il ne soit pas aussi précise que la méthode GPS, il fournit une représentation tout à fait adéquat de l'emplacement de l'appareil.
  • PASSIVE_PROVIDER: Ce fournisseur est spécial, en ce qu'il indique que votre application ne veut pas réellement lancer un relevé de position, mais utilise les mises à jour de localisation reçues par d'autres applications / services. En d'autres termes, le fournisseur passive va utiliser des données de localisation fournies par le récepteur GPS ou les fournisseurs de réseau. Vous pouvez découvrir ce que votre fournisseur fournisseur passive effectivement utilisé avec GetProvider () la méthode de l'emplacement de retour. Cette offre les plus grandes économies de la batterie.

Disposition

aa_location_layout

Pour notre application, nous allons chercher les données de localisation utilisant le fournisseur de GPS, le fournisseur de réseau, et aussi en posant l'appareil de décider qui est le meilleur fournisseur disponible qui répond à un ensemble donné de critères. Notre mise en page comporte trois segments identiques, dont chacune contient:

  • Un titre pour la section, comme le GPS LOCATION
  • Un bouton pour reprendre et mettre en pause des mises à jour de localisation pour la section / fournisseur
  • Longitude Valeur
  • Valeur Latitude

L'extrait de code pour la section de GPS, de notre fichier layout / activity_main.xml est indiqué ci-dessous

Activité principale



Il est possible que l'utilisateur a leurs paramètres du périphérique Emplacement éteints. Avant de demander des informations de localisation, nous devons vérifier que les services de localisation sont activés. Vote pour les données de localisation avec les paramètres éteint renverra null. Pour vérifier si l'emplacement est activé, nous mettons en œuvre une méthode, appelée isLocationEnabled (), illustré ci-dessous:

booléen privée isLocationEnabled () {return locationManager.isProviderEnabled (LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) -

Nous demandons simplement le LocationManager si soit la GPS_PROVIDER ou NETWORK_PROVIDER est disponible. Dans le cas où l'utilisateur a Lieu éteint, nous voulons les aider à accéder à l'écran de localisation aussi facilement et rapidement que possible de l'allumer et de revenir dans notre application. Pour ce faire, nous mettons en œuvre la méthode showAlert ().

showAlert private void () {de dialogue AlertDialog.Builder finale = new AlertDialog.Builder (cette) -dialog.setTitle ("Activer la localisation"). setMessage ("Vos paramètres des emplacements est réglé sur« Off ». nVeuillez permettre la localisation de« + "utiliser cette application"). setPositiveButton ("Réglages emplacement" nouvelle DialogInterface.onclickListener () {Overridepublic vide onclick (DialogInterface paramDialogInterface, int paramInt) {myIntent intention = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)-startActivity(myIntent)-}}).setNegativeButton("Cancel", nouvelle DialogInterface.onclickListener () {Overridepublic vide onclick (DialogInterface paramDialogInterface, int paramInt) {}}) - dialog.show () -}

La ligne la plus intéressante dans l'extrait ci-dessus est dans la méthode setPositiveButton (). Nous commençons une activité en utilisant l'intention de Settings.ACTION_LOCATION_SOURCE_SETTINGS, de sorte que lorsque l'utilisateur clique sur le bouton, ils sont pris à l'écran Paramètres d'emplacement.

aa_location_settings

Obtenir des mises à jour de localisation

Pour obtenir des mises à jour de réseau GPS et de localisation, nous utilisons un des requestLocationUpdates du LocationManager (méthodes). Notre préféré est requestLocationUpdates (fournisseur de String, int UPDATETIME, int updateDistance, LocationListener auditeur). UPDATETIME se réfère à la fréquence avec laquelle nous avons besoin de mises à jour, tandis que updateDistance se réfère à la distance parcourue avant que nous exigeons une mise à jour. Notez que UPDATETIME spécifie simplement le délai minimum avant que nous exigeons une nouvelle mise à jour. Cela signifie que le temps réel entre deux mises à jour peut être plus de UPDATETIME, mais ne sera pas moins.
Un point très important à considérer est que Situation scrutin consomme plus d'énergie de la batterie. Si votre application ne nécessite pas de mises à jour de localisation quand dans le fond, envisager d'arrêter les mises à jour en utilisant l'un des removeUpdates (méthodes). Dans l'extrait de code ci-dessous, nous Stop / Start mises à jour de localisation en réponse à un clic sur le bouton correspondant.

toggleGPSUpdates public void (Voir vue) {if (! checkLocation ()) bouton retour bouton = (Button) vue-si (button.getText (). equals (getResources (). getString (R.string.pause))) { locationManager.removeUpdates (locationListenerGPS) -button.setText (R.string.resume) -} else {locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 2 * 60 * 1000, 10, locationListenerGPS) -button.setText (R.string.pause) -}}

aa_location_gps

Pour les deux NETWORK_PROVIDER et PASSIVE_PROVIDER, il suffit de remplacer GPS_PROVIDER ci-dessus avec votre fournisseur désiré.



Dans le cas où vous voulez juste de choisir le meilleur fournisseur disponible, il existe une méthode de LocationManager, getBestProvider () qui vous permet de faire exactement cela. Vous certains critères pour être utilisés dans la sélection des fournisseurs est le meilleur, et de la LocationManager vous offre quelle qu'elle détermine est le meilleur ajustement. Voici un exemple de code, et il est ce que nous utilisons pour sélectionner un fournisseur:

Critères Critères = new Criteria()-criteria.setAccuracy(Criteria.ACCURACY_FINE)-criteria.setAltitudeRequired(false)-criteria.setBearingRequired(false)-criteria.setCostAllowed(true)-criteria.setPowerRequirement(Criteria.POWER_LOW)-String provider = locationManager.getBestProvider (critères, fidèles) -Si (fournisseur! = null) {locationManager.requestLocationUpdates (fournisseur, 2 * 60 * 1000, 10, locationListenerBest) -button.setText (R.string.pause) -Toast.makeText (cela, «Meilleur fournisseur est" + prestataire, Toast.LENGTH_LONG) .montrer () -}

En utilisant le code et critères ci-dessus, le meilleur fournisseur sera GPS_PROVIDER, où les deux GPS et le réseau sont disponibles. Toutefois, si le GPS est désactivé, l'NETWORK_PROVIDER sera choisi et retourné comme le meilleur fournisseur.

aa_location_best_provider

LocationListener

Le LocationListener est une interface pour recevoir des mises à jour de l'emplacement LocationManager. Il dispose de quatre méthodes

  • OnLocationchanged () - appelé chaque fois qu'il ya une mise à jour de la LocationManager.
  • onStatusChanged () - appelés lorsque les changements de statut de fournisseur, par exemple, il devient disponible après une période d'inactivité
  • onProviderDisabled () - appelée lorsque l'utilisateur désactive le fournisseur. Vous voudrez peut-être pour alerter l'utilisateur dans ce cas que la fonctionnalité de votre application sera réduit
  • onProviderEnabled () - appelée lorsque l'utilisateur active le fournisseur

Nous appliquons seulement la méthode OnLocationchanged () pour cet échantillon, mais dans une application de production, vous voudrez probablement d'effectuer une action appropriée pour chaque situation.

finale LocationListener locationListenerNetwork = new LocationListener privé () {public void OnLocationchanged (location location) {longitudeNetwork = location.getLongitude () - latitudeNetwork = location.getLatitude () - runOnUiThread (nouvelle Runnable () {void runOverridepublic () {longitudeValueNetwork. setText (longitudeNetwork + "") -latitudeValueNetwork.setText (latitudeNetwork + "") -Toast.makeText (MainActivity.this, "mise à jour du fournisseur de réseau", Toast.LENGTH_SHORT) .montrer () -}}) -} @ vide Overridepublic onStatusChanged (String s, int i, Fagot bundle) {} videOverridepublic onProviderEnabled (String s) {}Overridepublic annuler onProviderDisabled (String s) {}} -

Android Developer Bulletin

Conclusion

Le code source complet est disponible sur github, pour l'utilisation (ou la mauvaise utilisation) comme bon vous semble. Juste être conscient de ce qui suit:

  • Intégration de suivi de localisation dans vos applications draine la batterie.
  • Google recommande applications demande une mise à jour toutes les 5 minutes (5 * 60 * 1000 millisecondes). Vous pourriez avoir besoin de mises à jour plus rapides si votre application est au premier plan (fitness / la distance Tracker).
  • Les utilisateurs peuvent avoir lieu éteints. Vous devez avoir un plan pour quand les paramètres de localisation est désactivée.

Ayez plaisir à construire des applications Android, et regarder dehors pour notre prochain tutoriel où nous faisons usage de données de localisation de l'appareil Android et les API web pour construire quelque chose de plus amusant et stimulant.




» » » Comment faire pour obtenir et utiliser les données de localisation dans votre application Android