Udnyt Android's GPS API

Moderne smartphones har en række sensorer på dem; der er accelerometre, kameraer, mikrofoner og det globale positioneringssystem (GPS). Jeg er ikke sikker på, hvordan jeg nogensinde kom overalt før Google Maps.

Det er ikke svært at bruge Android's GPS API i dine egne applikationer. Der er dog et antal trin, du skal følge, og et par retningslinjer, du skal huske på. Denne tutorial vil lede dig gennem de mest basale GPS-brugsscenarier. Du kan følge med de detaljerede instruktioner nedenfor eller downloade og importere hele projektet til Eclipse.

1. Opret et nyt Android-projekt i Eclipse. Mål Android 1.6 eller nyere. Sørg for at omdøbe startaktiviteten til Main.java og det tilsvarende layout til main.xml.

2. Android giver flere mekanismer til at få en brugers placering; disse mekanismer inkluderer netværk, passiv og GPS. Du kan finde en beskrivelse af alle tre i den officielle Android-dokumentation. I denne tutorial bruger vi kun GPS-mekanismen. Derfor skal vi i filen AndroidManifest.xml tilføje en enkelt tilladelse til 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 = "@ streng / app_navn" 
 android: theme = "@ style / AppTheme" > 
 android: name = ".Main" 
 android: label = "@ string / title_activity_main" > 
 "android.intent.action.MAIN" /> 
 "android.intent.category.LAUNCHER" /> 

3. Layouten til vores demonstration er defineret i /res/layout/main.xml. Det er et simpelt lineært layout med to etiketter og en knap lodret stablet.

main.xml

 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "lodret" 
 android: gravitation = "center" > 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: layout_margin = "12dip" 
 android: tyngdekraft = "center" 
 android: textSize = "14sp" 
 android: textStyle = "fed" 
 android: textColor = "# 0000ff" 
 android: text = "Hurtig GPS-demo" /> 
 android: layout_width = "fill_parent" 
 android: layout_height = "wrap_content" 
 android: layout_margin = "12dip" 
 android: tyngdekraft = "center" 
 android: text = "Fin placering = (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 = "center" 
 android: text = "GPS-indstillinger" 
 android: id = "@ + id / settings_button" /> 

4. Main / sava -.java-filen udvider aktivitet, mens der implementeres både en OnClickListener og en LocationListener. Vi bruger den almindelige Android OnCreate-tilsidesættelse til at slå både knappen og placeringsadministratoren op. Bemærk den konstante MIN_TIME i vores klasse; Sådan opdateres GPS'en ofte. Du skal holde dette til en rimelig værdi, ellers tømmer du telefonbatteriet meget hurtigt. Til formålet med demoen brugte jeg 60 sekunder, men selv det kunne være for stort i en live applikation.

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 udvider Aktivitetsimplementeringer OnClickListener, LocationListener { 
 privat LocationManager locationManager; 
 privat statisk sidste lang MIN_TIME = 1 * 60 * 1000; //1 minut 
 @Override 
 offentligt tomrum onCreate (Bundle gemtInstanceState) { 
 super .onCreate (gemtInstanceState); 
 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å klik er ansvarlig for at aktivere systemmenuen for at give en bruger mulighed for at aktivere eller deaktivere GPS'en. Dette er nødvendigt, fordi en applikation af sikkerhedsmæssige årsager ikke kan tænde GPS'en uden brugerinteraktion. Hvis det lyder som en smerte, er det meningen det skal være. Mens idéen om at være i stand til at tænde og slukke GPS-hardwaren til vil lyde som en udvikler, lyder det rart, men jeg er også en Android-bruger, og jeg vil bestemt ikke have, at en rogue-app, der løber ned af mit batteri, eller værre uploader min placering til en websted for tyve, der advarer verden, hver gang jeg forlader mit hus.

 @Override 
 offentligt ugyldigt onClick (Vis v) { 
 Intent intention = new Intent (Indstillinger. ACTION_LOCATION_SOURCE_SETTINGS ); 
 startActivity (intent); 
 } 

6. Dernæst vil vi svare på placeringsopdateringerne. For at holde tingene enkle ignorerer vi tilbagekald for aktiverede / deaktiverede lokationstjenester; Du skal dog medtage dem, og nytten af ​​at opretholde tilstand skal være åbenbar.

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

7. Når det drejer sig om hardware især, er det altid en god ide at håndtere pause og genoptage tilstanden i Android-livscyklen.

 @Override 
 beskyttet tomrum onResume () { 
 super .onResume (); 
 locationManager.requestLocationUpdates (LocationManager. GPS_PROVIDER, MIN_TIME, 0, dette ); 
 } 
 @Override 
 beskyttet tomrum onPause () { 
 super .onPause (); 
 locationManager.removeUpdates ( dette ); 
 } 
Du kan indlæse applikationen på din enhed og prøve det ( figur A ). Husk, at du bliver nødt til at bruge knappen for at aktivere GPS'en og derefter vente mindst 60 sekunder, før opdateringen finder sted. Figur A

Hvis du kører demoen på en emulator, bliver du nødt til at åbne en kommandoprompt og telnet ind i AVD for at forfalde en lokaliseringsopdatering.

Første type:

 telnet localhost 5554 

og så:

 geo fix 25 20 

Der, det var ikke så slemt, var det? Bare husk de to gyldne regler: kun en bruger kan aktivere GPS'en og holde din placering adgang til et minimum for at bevare batteriet.

© Copyright 2021 | pepebotifarra.com