Android - Location Based Services

Android Standort APIs machen es Ihnen leicht, ortsabhängige Applikationen zu bauen, ohne dass auf die Details der zugrunde liegenden Ortungstechnologie konzentrieren.
Dies wird mit Hilfe von möglichst Google-Play-Dienste, die das Hinzufügen Location Awareness, um Ihre Anwendung mit automatisierten Standortverfolgung, Geofencing und Aktivitätserkennung erleichtert.
Dieses Tutorial zeigt Ihnen, wie Sie Standortdienste in Ihrer Anwendung verwenden, um den aktuellen Standort zu erhalten, bekommen regelmäßige Standortaktualisierungen, die Suche nach Adressen, etc.

Die Lage Objekt

Der Location-Objekt stellt eine geographische Lage, die aus einer Breite, Länge, Zeitstempel und andere Informationen wie zB Lager, Höhe und Geschwindigkeit bestehen kann. Es gibt folgende wichtige Methoden, die Sie mit Location-Objekt verwenden können, um ortsspezifische Informationen zu bekommen:
Sr.No.Verfahren & Beschreibung
1schweben DistanceTo (Ort dest)
Gibt die ungefähre Entfernung in Metern zwischen diesem Ort und der gegebenen Lage.
2schweben getAccuracy ()
Holen Sie sich das geschätzte Genauigkeit dieser Lage, in Metern.
3Doppel getAltitude ()
Holen Sie sich das Höhen wenn verfügbar, in Meter über dem Meeresspiegel.
4schweben getBearing ()
Holen Sie sich das Lager, in Grad.
5Doppel getLatitude ()
Holen Sie sich das Breitengrad, in Grad.
6Doppel getLongitude ()
Holen Sie sich das Längengrad, in Grad.
7schweben getSpeed ​​()
Holen Sie sich die Geschwindigkeit, wenn es verfügbar ist, in Meter / Sekunde über Grund.
8boolean hasAccuracy ()
True, wenn dieser Ort hat eine Genauigkeit.
9boolean hasAltitude ()
True, wenn dieser Ort hat eine Höhe.
10boolean hasBearing ()
True, wenn dieser Ort hat einen Einfluss.
11boolean hasSpeed ​​()
True, wenn dieser Ort hat eine Geschwindigkeit.
12void reset ()
Löscht den Inhalt des Standortes.
13Leere setAccuracy (float Genauigkeit)
Stellen Sie das geschätzte Genauigkeit dieser Lage nur wenige Meter.
14Leere setAltitude (Doppel Höhe)
Stellen Sie die Höhe in Metern über dem Meeresspiegel.
15Leere setBearing (float Lager)
Stellen Sie die Lager, in Grad.
16Leere setLatitude (Doppelbreitengrad)
Stellen Sie den Breitengrad, in Grad.
17Leere setLongitude (Doppellängengrad)
Stellen Sie den Längengrad, in Grad.
18Leere setSpeed ​​(float Geschwindigkeit)
Stellen Sie die Geschwindigkeit, in Meter / Sekunde über Grund.
19String toString ()
Gibt einen String zurück, der eine kurze, für Menschen lesbare Beschreibung des Objekts.

Holen Sie sich das Aktueller Standort

Um den aktuellen Standort zu erhalten, erstellen Sie ein Kunde, welche istLocationClient Objekt, schließen Sie es an Standort Dienstleistungen mitconnect () Methode, und rufen Sie dann ihre getLastLocation () Methode.Diese Methode gibt den letzten Ort in Form von Location-Objekt, das Breiten- und Längenkoordinaten und andere Informationen enthält, wie oben erläutert. Um standortbezogene Funktionalität in Ihrer Tätigkeit zu haben, müssen Sie zwei Schnittstellen implementieren -
  • GooglePlayServicesClient.ConnectionCallbacks
  • GooglePlayServicesClient.OnConnectionFailedListener
Diese Schnittstellen bieten folgende wichtige Callback-Methoden, die Sie in Ihrer Tätigkeit Klasse implementieren müssen -
Sr.No.Callback Methoden & Beschreibung
1abstract void OnConnected (Bundle connectionHint)
Diese Callback-Methode wird aufgerufen, wenn Ort-Service ist auf den Standort Client erfolgreich angeschlossen. Sie verwendenconnect () Methode, um an die Stelle Client zu verbinden.
2abstract void onDisconnected ()
Dieser Callback-Methode aufgerufen wird, wenn der Client getrennt wird. Sie verwenden disconnect () Methode, um von der Stelle, Kunden zu trennen.
3abstract void onConnectionFailed (ConnectionResult Ergebnis)
Diese Callback-Methode wird aufgerufen, wenn ein Fehler aufgetreten Anschluss des Client an den Dienst.
Sie sollten die Lage in Client erstellen onCreate () Methode der Aktivitätsklasse, und schließen Sie es in onStart (), so dass Location Services behält die aktuelle Position, während die Aktivität vollständig sichtbar ist. Sie sollten den Kunden bei trennen OnStop () Methode, so dass, wenn Ihre Anwendung nicht sichtbar ist, ist Standort Dienstleistungen nicht die Beibehaltung der derzeitigen Lage. Dies hilft bei der Rettung Batterie-up zu einem großen Teil.

Holen Sie sich das aktualisiert Ort

Wenn Sie bereit sind, Standortaktualisierungen haben, dann neben der oben genannten Schnittstellen sind, müssen Sie implementieren LocationSchnittstelle sowie. Diese Schnittstelle bieten folgende Callback-Methode, die Sie in Ihrer Tätigkeit Klasse implementieren müssen -
Sr.No.Callback-Methode & Beschreibung
1abstract void OnLocationChanged (Ort Ort)
Diese Callback-Methode ist für den Empfang von Benachrichtigungen von der LocationClient, wenn die Lage sich geändert hat eingesetzt.

Lage Quality of Service

Die Location Objekt wird verwendet, um eine Dienstgüte (QoS) für den Standort-Updates von der fordern LocationClient. Es gibt folgende Nutzungs Setter-Methoden, die Sie verwenden, um QoS zu behandeln. Es gibt gleichwertigen Getter-Methoden zur Verfügung, die Sie in Android offizielle Dokumentation zu überprüfen.
Sr.No.Verfahren & Beschreibung
1setExpirationDuration (long millis)
Stellen Sie die Dauer dieser Anforderung in Millisekunden.
2setExpirationTime (long millis)
Stellen Sie die Anfrage Ablaufzeit, in Millisekunden seit dem Boot.
3setFastestInterval (long millis)
Explizit die schnellste Intervall für Standortaktualisierungen eingestellt, in Millisekunden.
4setInterval (lang millis)
Stellen Sie den gewünschten Intervall für aktive Standortaktualisierungen, in Millisekunden.
5setNumUpdates (int numUpdates)
Stellen Sie die Anzahl von Standortaktualisierungen.
6setPriority (int Priorität)
Legen Sie die Priorität der Anfrage.
Jetzt zum Beispiel, wenn Ihre Anwendung will hohe Genauigkeit Standort sollte eine Standortanfrage erstellen mit setPriority (int) zu PRIORITY_HIGH_ACCURACY und stellen Sie setInterval (lang) bis 5 Sekunden. Sie können auch größere Intervall und / oder anderen Prioritäten zu verwenden wie für PRIORITY_LOW_POWER um "Stadt" Ebene Richtigkeit oder PRIORITY_BALANCED_POWER_ACCURACY für Pegelgenauigkeit "Block" anzufordern.
Die Aktivitäten sollten in Erwägung ziehen, die Beseitigung aller Standortanfrage beim Eintritt in den Hintergrund (zB bei onPause ()), oder zumindest tauschen die Anforderung an einen größeren Abstand und geringer Qualität, um den Stromverbrauch zu sparen.

Anzeigen einer Lage Adresse

Sobald Sie Location-Objekt, können Sie verwendenGeocoder.getFromLocation () Methode, um eine Adresse für eine bestimmte Breite und Länge zu bekommen. Diese Methode ist synchron und kann eine lange Zeit, um seine Arbeit zu tun zu nehmen, so sollten Sie die Methode aus der Anruf doInBackground () Methode eines AsyncTask Klasse.
Die AsyncTask muss Unterklasse verwendet werden soll, und der Unterklasse überschreiben doInBackground (Params ...) Methode, um eine Aufgabe im Hintergrund und führen OnPostExecute (Ergebnis) Methode basiert auf dem UI-Thread, nachdem die Hintergrund Berechnung beendet und zu dem Zeitpunkt aufgerufen zeigt das Ergebnis. Es gibt eine weitere wichtige Methode in AyncTask das ist auszuführen (Params ... params), führt dieses Verfahren die Aufgabe, mit den angegebenen Parametern.
Prüfen Sie folgendes Beispiel, um besser zu verstehen, wie wir verwenden AynchTask in jedem Android-Anwendung, die Arbeit im Hintergrund durchgeführt, ohne Hauptaufgabe zu bekommen.

Beispiel

Folgende Beispiel zeigt, in der Praxis, wie man auf Ortungsdienste in Ihrer Anwendung verwenden, um den aktuellen Standort und dessen Äquivalent-Adressen usw. erhalten
Um bei diesem Beispiel zu experimentieren, werden Sie tatsächlich Mobile-Gerät mit der neuesten Android OS ausgestattet benötigen, andernfalls müssen Sie mit Emulator, die nicht arbeiten können kämpfen.

Installieren Sie die Google-Play Services SDK

Bevor Sie fortfahren, um Standort-Unterstützung in Ihrem Android-Anwendungen haben, müssen Sie die Set-up Google Play Services SDK mit folgenden einfachen Schritten -
SchritteBezeichnung
1Starten Android Studio IDE
  • Von Android Studio wählen Sie Datei> Projektstruktur> Abhängigkeiten> Klicken Sie auf +, um Abhängigkeiten hinzuzufügen
  • Sie wählen würde Bibliotheksabhängigkeiten Dialogfenster
2Suchen Sie nach com.google.android.gms: Play-Dienstleistungen: 6.5.87 oder höher Version Bibliothek. seine, hängt von den Android-Version mit mit.
3Wählen Sie die Google-Play-Dienste, und drücken Sie gelten Taste als Bild unten gezeigt

Erstellen Applikation für Android

SchrittBezeichnung
1Sie werden Android-Studio IDE verwenden, um ein Android-Anwendung so zu erstellen und es nennen Tutorialspoint unter einem Paketcom.example.Tutorialspoint. Bei der Erstellung dieses Projekt, stellen Sie sicher SDK Ziel und Kompilieren Sie mit bei der neuesten Version des Android SDK zu höheren Ebenen der APIs verwenden.
2In Google Play-Service-Bibliothek in Ihrem Projekt von folgenden einfachen Schritten unten angegeben.
3Ändern src / MainActivity.java Datei und fügen erforderlichen Code, wie unten dargestellt, um auf immer aktuellen Standort und dessen Äquivalent Adresse.
4Ändern Sie das Layout XML-Datei res / layout / activity_main.xml alle GUI-Komponenten, die drei Tasten und zwei Textansichten gehören zum Standort / Adresse hinzufügen.
5Ändern res / Werte / strings.xml um erforderliche konstante Werte zu definieren
6Ändern AndroidManifest.xml wie unten gezeigt
7Führen Sie die Anwendung auf Android-Emulator zu starten, und überprüfen Sie das Ergebnis der Änderungen in der Anwendung durchgeführt.
Fügen wir Google Play Service-Referenz in der project.Click auf Datei>Projektstruktur> Abhängigkeiten> und wählen Sie + und suchen Google Play-Dienste, die zeigen, com.google.android.gms: Play-Dienstleistungen: 6.5.87 Klicken Sie auf die Schaltfläche OK . es schließt die Auswahl Abhängigkeiten Fenster. Sie muss in der Nähe Projektstruktur, indem Sie auf Anwenden-Button sein
Google Play-Service
Das obere Bild, ist das Ergebnis der Zugabe von google-Play-Dienste, um Projekt zeigt. Nach hinzuzufügen Google Play Dienste Projekts. Es sollte wie folgt
Ort
Im Folgenden ist der Gehalt des modifizierten Haupttätigkeit Datei src / com.example.Tutorialspoint / MainActivity.java.
package com.example.Tutorialspoint;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesClient;
import com.google.android.gms.location.LocationClient;

import android.content.Context;

import android.location.Address;
import android.location.Geocoder;
import android.location.Location;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import android.util.Log;
import android.view.View;

import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends FragmentActivity implements
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener
{
   LocationClient mLocationClient;
   private TextView addressLabel;
   private TextView locationLabel;
   private Button getLocationBtn;
   private Button disconnectBtn;
   private Button connectBtn;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      locationLabel = (TextView) findViewById(R.id.locationLabel);
      addressLabel = (TextView) findViewById(R.id.addressLabel);
      getLocationBtn = (Button) findViewById(R.id.getLocation);
      
      getLocationBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            displayCurrentLocation();
         }
      });
      
      disconnectBtn = (Button) findViewById(R.id.disconnect);
      disconnectBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            mLocationClient.disconnect();
            locationLabel.setText("Got disconnected....");
         }
      });
      
      connectBtn = (Button) findViewById(R.id.connect);
      connectBtn.setOnClickListener(new View.OnClickListener() {
         public void onClick(View view) {
            mLocationClient.connect();
            locationLabel.setText("Got connected....");
         }
      });
      
      // Create the LocationRequest object
      mLocationClient = new LocationClient(this, this, this);
   }
   
   @Override
   protected void onStart() {
      super.onStart();
      
      // Connect the client.
      mLocationClient.connect();
      locationLabel.setText("Got connected....");
   }
   
   @Override
   protected void onStop() {
      // Disconnect the client.
      mLocationClient.disconnect();
      super.onStop();
      locationLabel.setText("Got disconnected....");
   }
   
   @Override
   public void onConnected(Bundle dataBundle) {
      // Display the connection status
      Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
   }
   
   @Override
   public void onDisconnected() {
      // Display the connection status
      Toast.makeText(this, "Disconnected. Please re-connect.",Toast.LENGTH_SHORT).show();
   }
   
   @Override
   public void onConnectionFailed(ConnectionResult connectionResult) {
      // Display the error code on failure
      Toast.makeText(this, "Connection Failure : " + connectionResult.getErrorCode(),Toast.LENGTH_SHORT).show();
   }
   
   public void displayCurrentLocation() {
      // Get the current location's latitude & longitude
      Location currentLocation = mLocationClient.getLastLocation();
      String msg = "Current Location: " + 
      Double.toString(currentLocation.getLatitude()) + "," +
      Double.toString(currentLocation.getLongitude());
      
      // Display the current location in the UI
      locationLabel.setText(msg);
      
      // To display the current address in the UI
      (new GetAddressTask(this)).execute(currentLocation);
   }
   /*
   * Following is a subclass of AsyncTask which has been used to get
   * address corresponding to the given latitude & longitude.
   */
   private class GetAddressTask extends AsyncTask<Location, Void, String>{
      Context mContext;
      
      public GetAddressTask(Context context) {
         super();
         mContext = context;
      }
      /*
      * When the task finishes, onPostExecute() displays the address.
      */
      @Override
      protected void onPostExecute(String address) {
         // Display the current address in the UI
         addressLabel.setText(address);
      }
      
      @Override
      protected String doInBackground(Location... params) {
         Geocoder geocoder =new Geocoder(mContext, Locale.getDefault());
         
         // Get the current location from the input parameter list
         Location loc = params[0];
         
         // Create a list to contain the result address
         <Address> addresses = null;
         try {
            addresses = geocoder.getFromLocation(loc.getLatitude(),loc.getLongitude(), 1);
         }
         
         catch (IOException e1) {
            Log.e("LocationSampleActivity",IO Exception in getFromLocation());
            e1.printStackTrace();
            return ("IO Exception trying to get address");
         }
         
         catch (IllegalArgumentException e2) {
            // Error message to post in the log
            String errorString = "Illegal arguments " +
            Double.toString(loc.getLatitude()) +" , " +Double.toString(loc.getLongitude()) +" passed to address service";
            Log.e("LocationSampleActivity", errorString);
            e2.printStackTrace();
            return errorString;
         }
         // If the reverse geocode returned an address
         if (addresses != null && addresses.size() > 0) {
            // Get the first address
            Address address = addresses.get(0);
            
            /*
            * Format the first line of address (if available),
            * city, and country name.
            */
            String addressText = String.format("%s, %s, %s");
            
            // If there's a street address, add it
            address.getMaxAddressLineIndex() > 0 ?
            address.getAddressLine(0) : "",
            
            // Locality is usually a city
            address.getLocality(),
            
            // The country of the address
            address.getCountryName());
            
            // Return the text
            return addressText;
         }
         else {
            return "No address found";
         }
      }
   }// AsyncTask class
}
Im Anschluss wird der Inhalt sein res / layout / activity_main.xml Datei -
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >
   
   <TextView android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Location Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />

   <TextView android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point "
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <ImageButton android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />

   <Button android:id="@+id/getLocation"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/get_location"/>
      
   <Button android:id="@+id/disconnect"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/disconnect"/>
      
   <Button android:id="@+id/connect"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/connect"/>
      
   <TextView
      android:id="@+id/locationLabel"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
      
   <TextView
      android:id="@+id/addressLabel"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
    
</LinearLayout>
Im Anschluss wird der Inhalt sein res / Werte / strings.xml zwei neue Konstanten definieren:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">Tutorialspoint</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="get_location">Get Location</string>
   <string name="disconnect">Disconnect Service</string>
   <string name="connect">Connect Service</string>
</resources>
Im Folgenden ist der Standardinhalt der AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.Tutorialspoint"
   android:versionCode="1"
   android:versionName="1.0" >
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
   
   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.Tutorialspoint.MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      
      </activity>
   </application>
</manifest>
Lasst uns versuchen, Ihre Lauf Tutorialspoint Anwendung. Ich gehe davon aus, dass Sie Ihre aktuelle Android-Gerät mit dem Computer verbunden haben.Um die App vom Android Studio, öffnen Sie eine Aktivität Dateien Ihres Projekt auszuführen, und klicken Sie auf Eclipse-Run IconAusführen-Symbol in der Symbolleiste. Vor dem Start der Anwendung wird Android Studio Installer folgende Fenster angezeigt werden, um eine Option, wo Sie Ihre Android-Anwendung ausgeführt werden soll.
Android Mobile Device
Jetzt um zu sehen Speicherort auszuwählen Erhalten Location-Knopf, die Positionsinformationen wie folgt anzeigen wird -
Sie können durch Trennen Standort Client mithilfe versuchen Disconnect-Service und dann verbindet es mit Connect Service-Taste. Sie können auch ändern, um Location Update zu erhalten, wie oben und in Android Offizielle Dokumentation erläutert.
Share on Google Plus

About ptjqatar

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.

0 التعليقات:

Kommentar veröffentlichen