Dra nytte av Android's GPS API

Moderne smarttelefoner har en rekke sensorer på seg; det er akselerometre, kameraer, mikrofoner og GPS (global positioning system). Jeg er ikke sikker på hvordan jeg noen gang har kommet meg før Google Maps.

Det er ikke vanskelig å bruke Android's GPS API i dine egne applikasjoner. Det er imidlertid en rekke trinn du må følge og noen få retningslinjer du må huske på. Denne veiledningen vil lede deg gjennom de mest grunnleggende av GPS-bruksscenarier. Du kan følge med på detaljerte instruksjoner nedenfor eller laste ned og importere hele prosjektet til Eclipse.

1. Lag et nytt Android-prosjekt i Eclipse. Målrette Android 1.6 eller nyere. Sørg for å gi nytt navn til oppstartsaktiviteten til Main.java og den tilhørende utformingen til main.xml.

2. Android gir flere mekanismer for å få en brukers plassering; disse mekanismene inkluderer nettverk, passiv og GPS. Du finner en beskrivelse av alle tre i den offisielle Android-dokumentasjonen. I forbindelse med denne opplæringen bruker vi bare GPS-mekanismen. I AndroidManifest.xml-filen må vi derfor legge til en enkelt tillatelse for ACCESS_FINE_LOCATION.

 AndroidManifest.xml 
 "Http://schemas.android.com/apk/res/android" 
 package = "com.authorwjf.quickgpsdemo" 
 android: versionCode = "1" 
 android: versionName = "1.0" > 
 android: minSdkVersion = "4" 
 android: targetSdkVersion = "15" /> 
 "android.permission.ACCESS_FINE_LOCATION" /> 
 android: icon = "@ drawable / ic_launcher" 
 android: label = "@ string / app_name" 
 android: theme = "@ style / AppTheme" > 
 android: name = ".Main" 
 android: label = "@ string / title_activity_main" > 
 "android.intent.action.MAIN" /> 
 "android.intent.category.LAUNCHER" /> 

3. Oppsettet for demonstrasjonen vår er definert i /res/layout/main.xml. Det er en enkel lineær layout med to etiketter og en knapp stablet loddrett.

main.xml

 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "vertikal" 
 android: gravitasjon = "sentrum" > 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: layout_margin = "12dip" 
 android: gravitasjon = "sentrum" 
 android: textSize = "14sp" 
 android: textStyle = "fet" 
 android: textColor = "# 0000ff" 
 android: text = "Rask GPS-demo" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: layout_margin = "12dip" 
 android: gravitasjon = "sentrum" 
 android: text = "Fin beliggenhet = (venter på gps ...)" 
 android: id = "@ + id / locat_label" /> 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: layout_margin = "12dip" 
 android: layout_gravity = "sentrum" 
 android: text = "GPS-innstillinger" 
 android: id = "@ + id / settings_button" /> 

4. Main / sava -.java-filen utvider aktivitet mens du implementerer både en OnClickListener og en LocationListener. Vi bruker den vanlige Android OnCreate-overstyringen for å slå opp både knappen og lokasjonsbehandleren. Legg merke til den konstante MIN_TIME i klassen vår; Dette er hvor ofte GPS oppdateres. Du må holde dette til en fornuftig verdi, ellers tapper du batteriet veldig raskt. I forbindelse med demoen brukte jeg 60 sekunder, men selv det kan være for mye i en live applikasjon.

Main.java

 pakke com.authorwjf.quickgpsdemo; 
 import android.location.Location; 
 import android.location.LocationListener; 
 import android.location.LocationManager; 
 import android.os.Bundle; 
 import android.provider.Settings; 
 import android.app.Aktivitet; 
 import android.content.Context; 
 import android.content.Intent; 
 import android.view.View; 
 import android.view.View.OnClickListener; 
 import android.widget.TextView; 
 public class Main utvider aktivitetsredskaper OnClickListener, LocationListener { 
 privat LocationManager locationManager; 
 privat statisk finale lang MIN_TIME = 1 * 60 * 1000; //1 minutt 
 @Overstyring 
 public void onCreate (Bundle savedInstanceState) { 
 super .onCreate (savedInstanceState); 
 setContentView (R.layout. main ); 
 locationManager = (LocationManager) getSystemService (kontekst. LOCATION_SERVICE ); 
 locationManager.requestLocationUpdates (LocationManager. GPS_PROVIDER, MIN_TIME, 0, dette ); 
 findViewById (R.id. settings_button ) .setOnClickListener ( dette ); 
 } 
 } 

5. Lytteren på klikk er ansvarlig for å påkalle systemmenyen for å tillate en bruker å aktivere eller deaktivere GPS-en. Dette er nødvendig fordi sikkerhetsgrunner en applikasjon ikke kan slå på GPS-en uten brukerinteraksjon. Hvis det høres ut som en smerte, er det ment å være det. Selv som en utvikler ideen om å kunne slå GPS-maskinvaren av og på når det vil, høres det bra ut, er jeg også en Android-bruker, og jeg vil absolutt ikke ha en useriøs app som løper ned batteriet eller verre laster opp min beliggenhet til en nettsted for tyver som varsler verden hver gang jeg forlater huset mitt.

 @Overstyring 
 public void onClick (Vis v) { 
 Intent intention = new Intent (Innstillinger. ACTION_LOCATION_SOURCE_SETTINGS ); 
 startActivity (hensikt); 
 } 

6. Deretter vil vi svare på stedsoppdateringene. For å holde ting enkelt, ignorerer vi tilbakeringingene for lokasjonstjenester aktivert / deaktivert; Du må imidlertid inkludere dem, og nytten av å opprettholde tilstanden skal være åpenbar.

 @Overstyring 
 public void onLocationChanged (Location loc) { int lat = ( int ) (loc.getLatitude ()); int lng = ( int ) (loc.getLongitude ()); 
 ((TextView) findViewById (R.id. Locat_label )). SetText 
 ("Fin beliggenhet = (lat:" + Heltall. ToString (lat) + ", lng:" + Heltall. ToString (lng) + ")"); 
 } 
 @Overstyring 
 public void onProviderDisabled (String arg0) { 
 // TODO Auto-generert metodestub 
 } 
 @Overstyring 
 public void onProviderEnabled (String arg0) { 
 // TODO Auto-generert metodestub 
 } 
 @Overstyring 
 public void onStatusChanged (String arg0, int arg1, Bundle arg2) { 
 // TODO Auto-generert metodestub 
 } 

7. Når du arbeider med maskinvare spesielt, er det alltid en god idé å håndtere pause og gjenoppta tilstandene til Android-livssyklusen.

 @Overstyring 
 beskyttet tomrom onResume () { 
 super .onResume (); 
 locationManager.requestLocationUpdates (LocationManager. GPS_PROVIDER, MIN_TIME, 0, dette ); 
 } 
 @Overstyring 
 beskyttet tomrom onPause () { 
 super .onPause (); 
 locationManager.removeUpdates ( dette ); 
 } 
Du kan laste applikasjonen på enheten din og prøve den ( figur A ). Husk at du må bruke knappen for å aktivere GPS-en, og deretter vente minst 60 sekunder på at oppdateringen skal skje. Figur A

Hvis du kjører demoen på en emulator, må du åpne en ledetekst og telnet inn i AVD for å falske en stedsoppdatering.

Første type:

 telnet localhost 5554 

og så:

 geo fix 25 20 

Der, det var ikke så ille, ikke sant? Bare husk de to gyldne reglene: bare en bruker kan aktivere GPS-en, og holde posisjonen din tilgang til et minimum for å bevare batteriet.

© Copyright 2021 | pepebotifarra.com