Android App Entwicklung: Wie kommt man mit Location Gestartet

Viele Android-Apps können einen schönen Vorteil für Ihre Kunden anbieten, indem Sie in ihre Benutzererfahrungen zu bringen. Ob es sich um etwas so einfaches wie zeigt Nutzern, ihre Position auf einer Karte oder etwas komplexere wie die Bereitstellung von GPS-basierten Hintergrund-Benachrichtigungen, die Zugabe von Ortungsdienste, um Ihre Anwendung ist oft etwas Anwender erwarten.

Es gibt viele Möglichkeiten, wie Sie Standort zu Ihrem Android Apps hinzufügen. In Lollipop, einige der häufigsten sind

  • Anzeige der aktuellen Stadt oder Adresse des Benutzers. Dies wird umgekehrte Geokodierung genannt.

  • Aktiv die Position des Benutzers zu verfolgen, wie wenn auf einer Karte den Standort des Nutzers zeigt.

  • Stellen Sie einen Geofence bis eine Benachrichtigung erhalten, wenn ein Benutzer ankommt oder einen Standort verlässt.

  • Track-Benutzer Standort Aktivitätserkennung durchzuführen und festzustellen, ob sie gehen, Radfahren oder Fahren.

  • Erkennen, ob ein Benutzer in der Nähe eines IBeacon ist mit Bluetooth.

Dieser Artikel zeigt Ihnen eine der häufigsten Anwendungen der Lage, die Benutzer Lage zu überwachen ist und in eine ihnen ihre aktuelle Adresse angezeigt werden Textview.

Sie müssen vier Dinge zu tun einzurichten Standorte in Ihrer App:

  1. Aktualisieren Sie Ihre Build-Konfiguration.

  2. Öffnen Sie eine Verbindung zu Google Play.

  3. Melden Sie sich an Standort-Updates.

  4. Zeigen Sie die Adresse des Benutzers.

Wie Sie Ihre Build-Konfiguration zu aktualisieren

Android hat einen älteren Satz von Standort-APIs eingebaut, um das Betriebssystem unter der android.location Paket. Diese APIs sind nicht mehr aufrecht erhalten, so sollten Sie die neue Google Play-Dienste-APIs verwenden, die Position des Benutzers statt zu bekommen.

So fügen Sie Google Play Location Services API für das Projekt, legen Sie die folgende Abhängigkeit in Ihrem build.config Datei:

Abhängigkeiten { kompilieren  'com.google.android.gms: Play-Services-Standort: 6.5.87'}

Als Nächstes fügen Sie folgendes zu Ihrer AndroidManifest.xml:

 ="android.permission.ACCESS_COARSE_LOCATION"/> ="android.permission.ACCESS_FINE_LOCATION"/> android: name ="com.google.android.gms.version"android: Wert ="@ Integer / google_play_services_version"/>

Das ACCESS_COARSE_LOCATION Erlaubnis nutzt Wi-Fi und Zelle Turm Informationen, wenn vorhanden, die Lage zu schaffen, aktualisiert in etwa auf die Größe eines Häuserblocks. Das ACCESS_FINE_LOCATION Erlaubnis können Sie viel höher auflösende Informationen erhalten, die GPS-Telefon verwenden, aber auf Kosten der größeren Batterieverbrauch. Wenn Ihre App nur grobe Lage braucht, könnte man denken, es sinnvoll, nur zu verlangen, macht die ACCESS_COARSE_LOCATION Erlaubnis, aber wirklich die meisten Anwendungen werden beide Berechtigungen wollen.

Sie sollten fordern in der Regel beide Berechtigungen, weil Sie verwenden werden LocationProvider genannt FusedLocationProvider, die wählt automatisch zwischen WLAN, Mobilfunkturm und GPS-Standort-Anbieter, um Ihnen die beste Genauigkeit zu den niedrigsten Kosten zu Ihrer Batterie. Wenn Sie wissen, werden Sie nie auf genaue Standort Informationen benötigen, können Sie erwägen, das Entfernen ACCESS_FINE_LOCATION Erlaubnis, aber beachten Sie, dass Ihre App nicht gut an Orten arbeiten können, die keine Zelle Turm oder Wi-Fi-Zugang.

Das meta-data Tag ist notwendig, wenn Sie die Google-Service-Play-Bibliothek verwenden.

Wie eine Verbindung zu Google Play zu öffnen

Die Lage APIs sind recht einfach, aber sie verwenden Sie die Google Play-Service-APIs müssen einzurichten, und die sind ein wenig komplizierter zu bedienen.

Um eine Verbindung mit dem Google Play-Dienste einzurichten, fügen Sie folgendes zu Ihrer Aktivität oder ein Fragment:

// Die Google-API-Client, für den Standort servicesGoogleApiClient googleApiClient- @ Overridepublic Leere onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -googleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(LocationServices.API).build()-…}@Overridepublic Leere onStart () {super.onStart () -googleApiClient.connect () -} @Overridepublic Ungültig OnStop () {googleApiClient.disconnect () -super.onStop () -}

Dieser Code erstellt eine neue GoogleApiClient Objekt in Ihrem onCreate () zu verbinden Dienste zu Google Play und dann versucht, es zu verbinden in Ihrem onStart () und ziehen Sie in Ihrem OnStop (). Das GoogleApiClient benötigt ein Callback-Objekt, das sie unterrichten kann, wenn eine Verbindung hergestellt wurde, so dass Sie Rückrufe auf Ihre Aktivität oder ein Fragment hinzufügen müssen. Sie können die Rückrufe der hinzufügen TaskEditFragment auf jede Aktivität des Fragments.

public class TaskEditFragment erstreckt Fragment implementiertConnection, OnConnectionFailedListener{ @Override public void onConnected (Bundle connectionHint) {// Verbunden mit Google Play-Dienste!// Hier können Sie fragen, für den Standort starten// Updates. } @Override public void onConnectionSuspended (int Ursache) {// Die Google Play-Verbindung unterbrochen wurde.Deaktivieren // alle UI-Komponenten, die auf Google angewiesen // APIs bis onConnected () aufgerufen wird.//// Dieses Beispiel doesn't müssen hier etwas zu tun. } @Override public void onConnectionFailed (Connection Ergebnis)  {// Dieser Rückruf ist wichtig für den Umgang mit Fehlern // Dass kann auftreten, beim Versuch, mit zu verbinden // Google.//// Wenn Ihre App gewonnen't Arbeit richtig ohne Ort// Aktuelles, dann's wichtige Verbindung zu handhaben // Fehler richtig. Sehen// https://developer.android.com/google/auth/api-client.html// Weitere Informationen zur Fehlerbehandlung, wenn // Verbindung zu Google.//// Standortinformationen sind für diese Anwendung optional, so // Verbindungsfehler kann sicher hier außer Acht gelassen werden. }}

Herzliche Glückwünsche! Sie haben jetzt richtig eine Verbindung zu Google Play-Dienste einrichten, die automatisch zu trennen, wenn Sie Ihre Aktivität oder ein Fragment gestoppt wird. Der nächste Schritt ist, Standortaktualisierungen zu beantragen.

Wie kommt man nach Standort-Updates abonnieren

Sie haben durch den harten Teil bekommen. Sobald Sie eine erfolgreiche Verbindung zu Google Play-Dienste haben, können Sie hören für Standort-Updates starten.

Sie müssen zuerst die Location API zu sagen, wie oft und wie genau Sie Ihren Standort-Updates wollen. Wenn Sie ihnen aktuellen Standort des Benutzers angezeigt werden müssen auf einer Karte, vielleicht werden Sie sehr genaue und schnelle Updates, so dass die Nutzer sehen können, wo sie sind, wie sie sich bewegen. Die meisten Anwendungen wahrscheinlich brauchen weniger häufige Updates, und das ist, was Sie in diesem Beispiel verwenden werden.

Fügen Sie das folgende Feld zu Ihrem Fragment oder Aktivität:

// Die Location legt fest, wie oft müssen wir Standort // updatesLocationRequest Location = new Location () setInterval (30000) .setPriority (LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY). -

Dies Location für neuen Standort-Updates eingerichtet ist alle 30 Sekunden etwa zu fragen, und zu versuchen, eine gute Genauigkeit mit anständigen Energieverbrauch zu balancieren. Wenn Sie niedriger Batterieverbrauch wollen, versuchen Sie PRIORITY_LOW_POWER, oder wenn Sie eine höhere Genauigkeit, versuchen PRIORITY_HIGH_ACCURACY. Sie können sogar verwenden PRIORITY_NO_POWER für Anwendungen, die nur sehr selten im Hintergrund aktualisieren und wollen einfach nur weg von der Lage zu Huckepack-Updates, dass andere Anwendungen Anfrage! Auschecken Location auf der Website Android Developer Weitere Informationen zu den verschiedenen Optionen, die Sie verwenden können.

Um zu hören für Standort-Updates zu starten, fügen Sie Folgendes zur onConnected () Verfahren Sie gerade erstellt haben:

@Overridepublic Nichtig onConnected (Bundle connectionHint) {// Google Connected Services spielen! // Start auf Standort-Updates abonnierenFusedLocationApi.requestLocationUpdates ( googleApiClient, Location, this) -}

Dies fordert die FusedLocationApi starten Sie Ihre App Standort-Updates zu senden mit der Locatiauf Anfrage Sie gerade konfiguriert. obwohl für sie zu arbeiten, benötigen Sie einen Callback-Objekt zur Verfügung zu stellen, die die Lage Updates erhalten können. Ergänzen Sie die Location Schnittstelle zu Ihrer Aktivität oder ein Fragment, und fügen Sie dann die OnLocationchanged () Verfahren wie folgt:

public class TaskEditFragment erstreckt Fragment implementsConnectionCallbacks, OnConnectionFailedListener,com.google.android.gms.location.LocationListener{ @Override public void OnLocationchanged (endgültige Lage, Lage)  {Toast.makeText (getActivity (), location.toString (), Toast.LENGTH_LONG) .show () -}}

By the way, wenn alles, was Sie kümmern sich um den aktuellen Standort des Benutzers ist, und Sie kümmern sich nicht um sie zu halten aktualisiert Besuche FusedLocationApi.getLastLocation (), die entfernt die Notwendigkeit, dass die Location Schnittstelle.

Nun, wenn Sie Ihre Tätigkeit ausführen, sollten Sie einen Toast Meldung, die den aktuellen Standort des Benutzers ausgedruckt.

image0.png

Die Möglichkeit, ihre GPS-Koordinaten zu sehen, ist nicht wirklich alles, was nützlich für die Benutzer von selbst, obwohl, also lassen Sie uns ihre Position nutzen, um ihre aktuelle Adresse, um herauszufinden, und es ihnen zeigen.

Wie man die Adresse des Benutzers angezeigt werden

Android hat eine eingebaute API genannt Geocoder auf der Suche nach einem Benutzer Adresse von seinem GPS-Koordinaten (und umgekehrt) auf.

Es ist ziemlich einfach zu bedienen. Der einzige Haken ist, dass, weil sie ein Netzwerk Anfrage an Google auf dem aktuellen Thread macht, ist es an Ihnen, nur um sicherzustellen, dass Sie es auf dem Hintergrund-Thread ausgeführt werden (so dass Sie nicht ein Fall auf dem Haupt-UI-Thread auf langsam verursachen Netze).

Fügen Sie Folgendes zu Ihrer Aktivität oder ein Fragment:

Geocoder geocoder- @ Overridepublic Leere onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) - ... Geocoder = new Geocoder (getActivity ()) -} @ Overridepublic Leere OnLocationchanged (endgültige Lage, Lage) {// Stellen Sie Google für die Adresse des location.// Dies kann eine Weile dauern, so tun es in einer AsyncTask.new AsyncTask () {@Overrideprotected Adresse doInBackground (Void [] params) {try {List
Adressen = geocoder.getFromLocation (location.getLatitude (), location.getLongitude (), 1) -wenn (Adressen! = null addresses.size ()> 0)Rückkehr addresses.get (0) -} Catch (IOException e) { // ignoriert}Rückkehr Null- } // Performed auf dem UI-Thread @Override protected void OnPostExecute (Adresse Adresse) {if (Adresse! = null) { String s = address.getThoroughfare () - if (s! = null)Toast.makeText (getActivity (), s, Toast.LENGTH_LONG) .show () -} }}.ausführen()- }

Dieser Code fügt einen Geocoder Feld Ihre Aktivität oder ein Fragment, initialisiert er in onCreate (), und dann verwendet sie in OnLocationchanged () die Adresse für den aktuellen Standort zu finden. Es zeigt dann einen Toast Nachricht mit dem "Durchfahrt" für die Adresse, zum Beispiel "600 West Chicago Avenue." Das Adresse Objekt durch den Geocoder zurückgekehrt ist reich an Information- Besuche die javadocs Einzelheiten darüber, was sonst können Sie sich anzeigen lassen.

Und damit haben Sie gerade über alles, was Sie brauchen, um über Ihre Anmeldung kennen den aktuellen Standort des Benutzers innerhalb einer Android-Aktivität oder ein Fragment.

Menü