Android Location Based Services

Android steds API gjør det enkelt for deg å bygge location-aware programmer, uten at du trenger å fokusere på detaljene i den underliggende plassering teknologi.

blir dette mulig ved hjelp av Google Play i
, noe som letter legge til plassering bevissthet til din app med automatisert plassering sporing, geofencing, og aktivitet anerkjennelse.

Denne opplæringen viser deg hvordan du bruker Stedstjenester i APP for å få den nåværende posisjon , få periodiske plassering oppdateringer, slå opp adresser osv

The Location Object

Plassering
objektet representerer en geografisk plassering som kan bestå av en breddegrad, lengdegrad, tidsstempel og annen informasjon som peiling, høyde og hastighet. Det er følgende viktige metoder som du kan bruke med Location objekt for å få plassering spesifikk informasjon:
Sr.No.Method & Description1 flyte avstand distanceto (Sted dest)

Returnerer omtrentlig avstand i meter mellom dette stedet og gitt sted.
2 flyte getAccuracy ()

Få den estimerte nøyaktighet på dette stedet, i meter.
3 dobbel getAltitude ()

Få høyde hvis tilgjengelig, i meter over havet.
4 flyte getBearing ()

Få lageret, i grader.
5 dobbel getLatitude ()

Få breddegrad i grader.
6 dobbel getLongitude ()
< p> Få lengdegrad i grader.
7 flyte getSpeed ​​()

Få fart hvis det er tilgjengelig, i meter /sekund over grunn.
8 boolean hasAccuracy ()

True hvis dette stedet har en nøyaktighet.
9 boolean hasAltitude ()

True hvis dette stedet har en høyde.
10 boolean hasBearing ()

True hvis dette stedet har betydning
. 11 boolean hasSpeed ​​()

True hvis dette stedet har en hastighet
. 12 void reset ()

Fjerner innholdet i plasseringen.
13 void setAccuracy (flyte nøyaktighet)


Sett estimert nøyaktighet på dette stedet, meter. 14 void setaltitude (dobbel høyde)

Sett høyde, i meter over havet
. 15 void setBearing (flyte peiling)

Sett peiling i grader.
16 void setLatitude (dobbel bredde)

Sett breddegrad i grader
. 17 void setLongitude (dobbeltgrad)

Sett lengdegrad i grader .
18 void setSpeed ​​(float hastighet)

Sett fart i meter /sekund over grunn.
19 String toString ()

Returnerer en streng som inneholder en kortfattet, lesbar beskrivelse av dette objektet.

Få nåværende beliggenhet

For å få den nåværende plassering, skape et sted klient som er LocationClient
objekt, koble den til posisjonstjenester ved hjelp av koble ()
metode, og deretter ringe sin getLastLocation ()
metoden. Denne metoden returnerer den siste plasseringen i form av Plassering
objekt som inneholder bredde- og lengdegradskoordinater og annen informasjon som forklart ovenfor. Å ha stedsbasert funksjonalitet i aktiviteten din, må du gjennomføre to grensesnitt −

GooglePlayServicesClient.ConnectionCallbacks



GooglePlayServicesClient.OnConnectionFailedListener



These grensesnitt gir følgende viktige tilbakeringings metoder, som du trenger for å implementere i aktivitetsklasse −
Sr.No.Callback Måter og amp; Description1 abstrakt void onConnected (Bundle connectionHint)

Denne tilbakeringing metoden kalles når lokaliseringstjeneste er koblet til plasseringen klienten klarer. Du vil bruke koble ()
metode for å koble til stedet klienten.
2 abstrakt void onDisconnected ()

Denne tilbakeringing metoden kalles når klienten er frakoblet. Du vil bruke frakobling ()
metode for å koble fra stedet klienten.
3 abstrakt void onConnectionFailed (ConnectionResult resultat)

Denne tilbakeringing metoden kalles når det var en feil koble klienten til tjenesten.
Du bør lage plasseringen klienten i onCreate ()
metode for aktivitetsklassen, og koble den i onStart ()
, slik at Stedstjenester opprettholder nåværende posisjon mens aktiviteten din er fullt synlig. Du bør koble klienten i onStop ()
metoden, slik at når appen ikke er synlig, er Stedstjenester ikke opprettholde dagens plassering. Dette hjelper for å spare batteristrøm opp til en stor grad.
Få Oppdatert beliggenhet

Hvis du er villig til å ha plassering oppdateringer, så bortsett fra ovennevnte grensesnitt, vil du trenger for å implementere LocationListener
grensesnitt også. Dette grensesnittet gir følgende tilbakeringing metoden, som du trenger for å implementere i aktivitetsklasse −
Sr.No.Callback Method & Description1 abstrakt void onLocationChanged (Plassering plassering)

Denne tilbakeringing metoden benyttes for å motta varslinger fra LocationClient når plasseringen er endret.

Sted Quality of Service

LocationRequest
objektet brukes til å be om et Quality of Service (QoS) for plassering oppdateringer fra LocationClient
. Det er følgende nyttige setter-metoder som du kan bruke til å håndtere QoS. Det er tilsvarende getter metoder tilgjengelig som du kan sjekke i Android offisielle dokumentasjonen
Sr.No.Method &.; Description1 setExpirationDuration (lang Millis)

Still inn varigheten av denne forespørselen, i millisekunder.
2 setExpirationTime (lang Millis)

Sett forespørsel utløpstiden, i millisekund siden oppstart.
3 setFastestInterval (lang Millis)

Eksplisitt sette raskeste intervallet for plassering oppdateringer, i millisekunder.
4 setInterval (lang Millis)
< p> Still inn ønsket intervall for aktive plassering oppdateringer, i millisekunder.
5 setNumUpdates (int numUpdates)

Sett antall plassering oppdateringer.
6 setPriority (int prioritet )

Sett prioritet av forespørselen.

Nå for eksempel, hvis søknaden ønsker høy nøyaktighet sted det bør opprette en forespørsel om steds med setPriority (int)
satt til PRIORITY_HIGH_ACCURACY og setInterval (lang)
til 5 sekunder. Du kan også bruke større intervall og /eller andre prioriteringer som PRIORITY_LOW_POWER for å be om "by" nivå nøyaktigheten eller PRIORITY_BALANCED_POWER_ACCURACY for "block" nivå nøyaktighet.
Aktiviteter bør sterkt vurdere å fjerne all plassering forespørsel når du går inn i bakgrunnen (for eksempel ved onPause ()), eller i det minste bytte forespørselen til en større intervall og lavere kvalitet for å spare strøm.
Vise et Besøksadresse

Når du har Plassering
objektet, kan du bruke Geocoder.getFromLocation ()
metode for å få en adresse for en gitt breddegrad og lengdegrad. Denne metoden er synkron, og det kan ta lang tid å gjøre sitt arbeid, så du bør ringe metoden fra doInBackground ()
metode for en AsyncTask
klasse.

AsyncTask
må subclassed å bli brukt og underklassen vil overstyre doInBackground (Params ...)
metode for å utføre en oppgave i bakgrunnen og onPostExecute (resultater)
metoden startes på UI tråden etter at bakgrunnen beregnings ferdig og på tidspunktet for å vise resultatet. Det er en mer viktig metode tilgjengelig i AyncTask som er utføre (Params ... params)
, utfører denne metoden oppgaven med de angitte parameterne.

Sjekk følgende eksempel for å få bedre forståelse på hvordan vi bruker AynchTask på noen Android-applikasjonen for å få arbeidet gjort i bakgrunnen uten å forstyrre hovedoppgave.

Eksempel

Følgende eksempel viser deg i praksis hvordan du bruker Stedstjenester i programmet ditt for å få det aktuelle stedet og dets tilsvarende adresser etc.
å eksperimentere med dette eksempelet, vil du trenge selve Mobile enheter utstyrt med nyeste Android OS, ellers vil du måtte slite med emulator som ikke fungerer.
Installer Google Play Tjenester SDK

Før du fortsetter å ha plassering støtte i din Android-programmer, må du sette opp Google Play Services SDK
bruker følgende enkle trinn −
StepsDescription1Launch Android Studio IDE < li>

Fra Android Studio velg file > prosjektstruktur > avhengig > Klikk på + -knappen for å legge avhengig

du ville få velge bibliotek dialog avhengig vindu
2Search for com.google.android.gms: play-tjenester: 6.5.87
eller nyere versjon bibliotek. sin avhenge av hvilken android versjon bruker with.3Select Google Play-tjenester og trykk gjelde knappen som vist nedenfor image
Opprett Android Application
StepDescription1You vil bruke Android studio IDE å lage en Android-applikasjon, og gi det et navn som Tutorialspoint
under en pakke com.example.Tutorialspoint
. Mens du oppretter dette prosjektet, må du Target SDK Hotell og kompilere med
på den nyeste versjonen av Android SDK til å bruke høyere nivåer av APIs.2Add Google Play-tjenesten
bibliotek i prosjektet ved å følge enkle trinn gitt below.3Modify src /MainActivity.java
fil og legge nødvendige koden som vist nedenfor for å ta seg av å få nåværende posisjon og tilsvarende address.4Modify layout XML fil res /layout/activity_main.xml
å legge alle GUI-komponenter som inkluderer tre knapper og to visninger tekst vise plassering /address.5Modify res /verdier /strings.xml
å definere nødvendig konstant values6Modify AndroidManifest.xml
som vist below7Run programmet til å lansere Android emulator og kontrollere resultatet av de endringer som er gjort i programmet.

La oss legge Google Play-tjenesten
referanse i project.Click på filen < b> > prosjektstruktur > avhengig > Anmeldelser og velg + Hotell og deretter søke google spille tjenester som vil vise com.google.android.gms: play-tjenester: 6.5.87
Klikk på OK-knappen. det vil lukke velge avhengig vinduer. du må være nær prosjektstrukturen ved å klikke på knappen Bruk

Over Bildet viser resultatet av å legge til Google Play tjenester til prosjektet. etter legge google spille tjenester til prosjektet. Det bør være som følger

Følgende er innholdet i den modifiserte hovedaktivitet filen src /com.example.Tutorialspoint /MainActivity.java
pakken 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, importere android.location.Address, import android.location.Geocoder, import android.location.Location; import android.os.AsyncTask, importere 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 strekker FragmentActivity implementsGooglePlayServicesClient.ConnectionCallbacks,GooglePlayServicesClient.OnConnectionFailedListener{ LocationClient mLocationClient; private TextView addressLabel; private TextView locationLabel; private Button getLocationBtn; private Button disconnectBtn; private Button connectBtn; Override Beskyttet 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 (ny View.OnClickListener () {public void onClick (Vis visning) {displayCurrentLocation ();}}); disconnectBtn = (Button) findViewById (R.id.disconnect); disconnectBtn.setOnClickListener (ny View.OnClickListener () {public void onClick (Vis visning) {mLocationClient.disconnect (); locationLabel.setText ("Ble frakoblet ....");}}); connectBtn = (Button) findViewById (R.id.connect); connectBtn.setOnClickListener (ny View.OnClickListener () {public void onClick (Vis visning) {mLocationClient.connect (); locationLabel.setText ("Ble koblet ....");}}); //Opprett LocationRequest objektet mLocationClient = new LocationClient (dette, dette, dette); }Override Beskyttet void onStart () {super.onStart (); //Koble klienten. mLocationClient.connect (); locationLabel.setText ("Ble koblet ...."); }Override Beskyttet void onStop () {//Koble fra klienten. mLocationClient.disconnect (); super.onStop (); locationLabel.setText ("Ble frakoblet ...."); }Override Public void onConnected (Bundle dataBundle) {//Vise tilkoblingsstatus Toast.makeText (dette, "tilkoblet", Toast.LENGTH_SHORT) .vis (); }Override Public void onDisconnected () {//Vise tilkoblingsstatus Toast.makeText (dette, "Disconnected Vennligst re-kontakt..", Toast.LENGTH_SHORT) .vis (); }Override Public void onConnectionFailed (ConnectionResult connectionResult) {//Viser feilkoden på svikt Toast.makeText (dette, "tilkoblingsfeil:" + connectionResult.getErrorCode (), Toast.LENGTH_SHORT) .vis (); } Public void displayCurrentLocation () {//Få gjeldende plassering breddegrad & lengdegrad Beliggenhet currentLocation = mLocationClient.getLastLocation (); String msg = "Current Location:" + Double.toString (currentLocation.getLatitude ()) + "," + Double.toString (currentLocation.getLongitude ()); //Vise gjeldende plassering i UI locationLabel.setText (msg); //For å vise den aktuelle adressen i brukergrensesnittet (ny GetAddressTask (denne)) utføre (currentLocation.); } /* * Det følgende er en underklasse av AsyncTask som har blitt brukt for å få * adresse som svarer til den gitte breddegrad &Co. lengdegrad. * /Private class GetAddressTask strekker AsyncTask < Location, Void, String > {Kontekst mContext; offentlig GetAddressTask (Context kontekst) {super (); mContext = sammenheng; } /* * Når oppgaven er ferdig, onPostExecute () viser adressen. * /Override Beskyttet void onPostExecute (String adresse) {//Viser nåværende adresse i UI addressLabel.setText (adresse); }Override Beskyttet String doInBackground (Location ... params) {Geocoder geocoder = new Geocoder (mContext, Locale.getDefault ()); //Få nåværende plassering fra inngangsparameterlisten Sted loc = params [0]; //Lag en liste for å inneholde resultatet adresse < Adresse > adresser = null; prøv {adresser = geocoder.getFromLocation (loc.getLatitude (), loc.getLongitude (), 1); } Catch (IOException e1) {Log.e ("LocationSampleActivity", IO Unntak i getFromLocation ()); e1.printStackTrace (); tilbake ("IO Unntak prøver å få adresse"); } Catch (IllegalArgumentException e2) {//Feilmelding å poste i loggen String errorString = "Illegal argumenter" + Double.toString (loc.getLatitude ()) + "," + Double.toString (loc.getLongitude ()) + "bestått for å ta service"; Log.e ("LocationSampleActivity", errorString); e2.printStackTrace (); returnere errorString; } //Hvis det motsatte geokode returnert en adresse hvis (adresser = null &&addresses.size ()> 0) {//Hent den første adressen Adresse adresse = addresses.get (0); /* * Formater den første linjen i adressen (hvis tilgjengelig), * by og land. * /String addressText = String.format ("% s,% s,% s"); //Hvis det er en gateadresse, legge den address.getMaxAddressLineIndex ()> 0? address.getAddressLine (0): "", //Lokaliteten er vanligvis en by address.getLocality () //Landet adressen address.getCountryName ()); //Returner teksten retur addressText; } Else {return "No adresse funnet"; }}} //AsyncTask klasse}

Etter vil være innholdet i res /layout /activity_main.xml
fil −
< LinearLayout xmlns: android = "http: //skjemaer. android.com/apk/res/android "android: layout_width =" fill_parent "android: layout_height =" fill_parent "android: orientering =" vertikal "> < TextView android: id = "+ id /textView1" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Location Eksempel" android: layout_alignParentTop = "true" android: layout_centerHorizontal = "true" android: Tekststørrelse = "30dp" /> < TextView android: id = "+ id /textView2" android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: text = "Tutorials point" android: textcolor = "# ff87ff09" android: Tekststørrelse = "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 = "@ teikne /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 = "@ streng /get_location" /> < Button android: id = "+ id /koble" android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: text = "@ streng /koble" /> < Button android: id = "+ id /koble" android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: text = "@ streng /koble" /> < 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 >

Etter vil være innholdet i res /verdier /strings.xml
å definere to nye konstanter:?
< xml version = "1.0" encoding = "utf- 8 ">? < resources > < string name = "APP_NAME" > Tutorialspoint < /string > < string name = "action_settings" > Innstillinger < /string > < string name = "hello_world" > Hei, verden <! /string > < string name = "get_location" > Få Location < /string > < string name = "koble" > Disconnect service < /string > < string name = "koble" > Connect Service < /string > < /ressurser >

Følgende er innholdet mislighold av AndroidManifest.xml

<? xml version = "1.0" encoding = "utf-8" > < manifest xmlns:? android = "http://schemas.android.com/apk/res/android" pakken = "com.example.Tutorialspoint" android: version = "1" android: versjon = "1.0" > < bruker-tillatelse android: name = "android.permission.ACCESS_COARSE_LOCATION" /> < søknad android: allowBackup = "true" android: icon = "@ teikne /ic_launcher" android: label = "@ streng /APP_NAME" android: tema = "@ stil /AppTheme" > < aktivitet android: name = "com.example.Tutorialspoint.MainActivity" android: label = "@ streng /APP_NAME" > < intent-filter > < handling android: name = "android.intent.action.MAIN" /> < kategori android: name = "android.intent.category.LAUNCHER" /> < /intent-filter > < /aktivitets > < /søknad > < /manifest >

La oss prøve å kjøre ditt Tutorialspoint
søknad. Jeg antar at du har koblet den faktiske Android Mobile-enhet med datamaskinen. For å kjøre programmet fra Android Studio, åpne en av prosjektets aktivitets filer, og klikk Kjør ikonet fra verktøylinjen. Før du starter programmet, vil Android studio installatøren vise følgende vindu for å velge et alternativ hvor du vil kjøre Android-applikasjon

Nå for å se lokalisering velge Get Sted Button som vil vise posisjonsinformasjon som følger −.

Du kan prøve ved å koble plassering klient ved hjelp av Koble Tjenesten Hotell og deretter koble det ved å bruke Connect Service
knappen. Du kan også endre for å få plassering oppdateringen som forklart ovenfor og i Android Offisiell dokumentasjon. Anmeldelser