Innholdsfortegnelse:
- Slik oppdaterer du konfigurasjonskonfigurasjonen din
- Slik åpner du en forbindelse til Google Play
- Legg til følgende for din aktivitet eller fragment:
Video: The Third Industrial Revolution: A Radical New Sharing Economy 2024
Mange Android-apper kan gi en god fordel for brukerne ved å bringe plassering i sine brukeropplevelser. Enten det er noe så enkelt som å vise brukerne sin plassering på et kart eller noe mer komplisert, for eksempel å gi GPS-baserte bakgrunnsvarsler, er det ofte noe som brukere forventer å legge til plasseringstjenester i appen din.
Det er mange måter du kan legge til plassering på Android-appene dine. I Lollipop er noen av de vanligste
-
Vis brukerens nåværende by eller gateadresse. Dette kalles omvendt geokoding.
-
Spor brukerens plassering aktivt, for eksempel når du viser brukerens plassering på et kart.
-
Sett opp en geofence for å få varsel når en bruker kommer eller forlater en plassering.
-
Spor brukernes plassering for å utføre aktivitetsgjenkjenning og avgjøre om de går, sykler eller kjører.
-
Finn ut om en bruker er i nærheten av en iBeacon ved hjelp av Bluetooth.
Denne artikkelen viser deg en av de vanligste bruksområder for plassering, som er å overvåke brukernes plassering og vise deres nåværende gateadresse til dem i en TextView.
Du må gjøre fire ting for å konfigurere steder i appen din:
-
Oppdater byggekonfigurasjonen din.
-
Åpne en tilkobling til Google Play.
-
Abonner på posisjonsoppdateringer.
-
Vis brukerens adresse.
Slik oppdaterer du konfigurasjonskonfigurasjonen din
Android har et eldre sett med Location APIs innebygd i operativsystemet under android. plasseringspakke. Disse APIene blir ikke lenger vedlikeholdt, så du bør bruke de nye API-ene for Google Play-tjenester for å få brukerens plassering i stedet.
For å legge til Google Play Services Location API til prosjektet ditt, legg følgende avhengighet i byggingen din. config-fil:
avhengigheter { kompilere ' com. Google. android. gms: play-services-location: 6. 5. 87 ' }
Deretter legger du til følgende i AndroidManifest. xml:
" android. Tillatelse. ACCESS_COARSE_LOCATION " /> " android.tillatelse. ACCESS_FINE_LOCATION " /> " com. Google. Android.gms. Versjon " android: verdi = " @ heltall / google_play_services_version " />
Tillatelsen ACCESS_COARSE_LOCATION bruker Wi-Fi og informasjon om celletårn, når det er tilgjengelig, for å gi plasseringsoppdateringer omtrent på størrelsen på en byblokk. ACCESS_FINE_LOCATION-tillatelsen kan gi deg mye høyere oppløsninginformasjon ved hjelp av telefonens GPS, men på bekostning av større batteriforbruk.Hvis appen din trenger bare grov plassering, kan det hende du synes det er fornuftig å be om bare ACCESS_COARSE_LOCATION-tillatelsen, men egentlig de fleste apper vil ha begge tillatelsene.
Du bør vanligvis be om begge rettigheter fordi du vil bruke en LocationProvider som heter FusedLocationProvider, som automatisk velger mellom Wi-Fi, celtårn og GPS-stedleverandører for å gi deg den beste nøyaktigheten til laveste pris for batteriet. Hvis du vet at du aldri trenger bra beliggenhet, kan du vurdere å fjerne ACCESS_FINE_LOCATION-tillatelsen, men vær klar over at appen din kanskje ikke fungerer bra på steder som ikke har celtårn eller Wi-Fi-tilgang.
Metadata-taggen er nødvendig når du bruker Google Play-tjenestebiblioteket.
Slik åpner du en forbindelse til Google Play
Plasseringsgrensesnittene er ganske enkle, men for å bruke dem må du konfigurere Google Play Services APIer, og de er litt mer kompliserte å bruke.
For å opprette en forbindelse til Google Play-tjenestene, legg til følgende for aktiviteten eller fragmentet ditt:
// Google API-klienten, for plasseringstjenester GoogleApiClient googleApiClient; @Override public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); googleApiClient = ny GoogleApiClient. Builder (getActivity ()). addConnectionCallbacks (dette). addOnConnectionFailedListener (dette). addApi (LocationServices. API). bygge(); …} @Override public void onStart () {super. onStart (); GoogleApiClient. koble(); } @Override public void onStop () { googleApiClient. koble fra(); super. onStop ();}
Denne koden oppretter et nytt GoogleApiClient-objekt i din onCreate () for å koble til Google Play-tjenester, og det forsøker å koble til i onStart () og koble fra i onStop (). GoogleApiClient trenger et tilbakeringingsobjekt som den kan informere når en tilkobling er opprettet, så du må legge til tilbakeringinger til aktiviteten eller fragmentet ditt. Du kan legge tilbakeringingene til TaskEditFragment til en aktivitet av fragment.
offentlig klasse TaskEditFragment utvider fragmenteringsverktøy ConnectionCallbacks, OnConnectionFailedListener { @Override offentlig tomgang påkoblet (Bundle connectionHint) { // Koblet til Google Play tjenester! // Dette er hvor du vil begynne å spørre om sted // oppdateringer. } @Override Offentliggjøring påConnectionSuspended (int årsak) { // Google Play-tilkoblingen er avbrutt. // Deaktiver eventuelle brukergrensesnittkomponenter som er avhengige av Google // APIer til onConnected () kalles. // // Dette eksemplet trenger ikke ' t å gjøre noe her. } @Override offentlig ugyldig påConnectionFailed (ConnectionResult resultat) { // Denne tilbakekallingen er viktig for å håndtere feil // som kan oppstå under forsøk på å koble til > // Google. // // Hvis appen din vant ' t fungerer riktig uten sted // oppdateringer, er det viktig å håndtere tilkobling // feil feil.Se // // utvikler. android. com / google / auth / api-klient. html // for mer informasjon om hvordan du håndterer feil når // kobler til Google. // // Plasseringsinformasjon er valgfritt for denne appen, så // tilkoblingsfeil kan sikkert ignoreres her. }} Gratulerer! Du har nå satt opp en tilkobling til Google Play Services som automatisk koble fra når aktiviteten eller fragmentet ditt er stoppet. Det neste trinnet er å be om posisjonsoppdateringer.Slik abonnerer du på posisjonsoppdateringer
Du har kommet gjennom den harde delen. Når du har en vellykket forbindelse til Google Play Services, kan du begynne å lytte etter oppdateringer av plasseringer.
Du må først fortelle lokaliseringsgrensesnittet hvor ofte og hvor nøyaktig du vil at stedoppdateringene skal være. Hvis du må vise brukerens nåværende posisjon til dem på et kart, vil du kanskje ha svært nøyaktige og raske oppdateringer, slik at brukerne kan se hvor de er når de beveger seg. De fleste apper trenger sannsynligvis mindre hyppige oppdateringer, og det er det du vil bruke i dette eksemplet.Legg til følgende felt i fragmentet eller aktiviteten din:
// LocationRequest definerer hvor ofte vi trenger plassering // oppdateringer LocationRequest locationRequest = new LocationRequest (). setInterval (30000). setPriority (LocationRequest. PRIORITY_BALANCED_POWER_ACCURACY);
Denne plasseringenRequest er satt opp for å be om nye plasseringsoppdateringer omtrent hvert 30. sekund, og for å forsøke å balansere god nøyaktighet med anstendig strømforbruk. Hvis du vil ha lavere batteriforbruk, kan du prøve PRIORITY_LOW_POWER, eller hvis du vil ha høyere nøyaktighet, kan du prøve PRIORITY_HIGH_ACCURACY. Du kan til og med bruke PRIORITY_NO_POWER for apper som oppdateres svært sjeldent i bakgrunnen, og vil bare piggy-back av plasseringene oppdateringer som andre apper ber om! Sjekk ut LocationRequest på Android Developer-siden for mer informasjon om de ulike alternativene du kan bruke.For å begynne å lytte til lokaliseringsoppdateringer, legg til følgende i metoden onConnected () du nettopp har opprettet:
@Override public void onConnected (Bundle connectionHint) {// Koblet til Google Play-tjenester! // Start abonnere på stedoppdateringer
FusedLocationApi. requestLocationUpdates (googleApiClient,
locationRequest, dette); } Dette ber FusedLocationApi å begynne å sende applokasjonsoppdateringene dine ved hjelp av LocationRequest du nettopp har konfigurert. For at det skal fungere, må du imidlertid gi et tilbakeringingsobjekt som kan motta oppdateringsoppdateringene. Legg til LocationListener-grensesnittet til aktiviteten eller fragmentet, og legg deretter til metoden onLocationChanged () slik: TaskEditFragment for offentlig klasse utvider Fragment implementerer ConnectionCallbacks, OnConnectionFailedListener, com. Google. android. gram. plassering. LocationListener
{
@Override Offentlig tomgang onLocationChanged (sluttplasseringssted) { Toast. makeText (getActivity (), sted. toString (), Toast. LENGTH_LONG). forestilling(); }} For øvrig, hvis alt du bryr deg om, er brukerens nåværende beliggenhet, og du bryr deg ikke om å holde den oppdatert, sjekk ut FusedLocationApi.getLastLocation (), som fjerner behovet for LocationListener-grensesnittet. Nå, hvis du kjører aktiviteten din, bør du se en Toast-melding som skriver ut brukerens nåværende sted. Å kunne se deres GPS-koordinat er egentlig ikke alt som er nyttig for brukerne av seg selv, men la oss bruke deres plassering for å finne ut deres nåværende adresse og vise den til dem.
Slik viser du brukerens adresse
Android har en innebygd API kalt Geocoder for å slå opp en brukers adresse fra hans eller hennes GPS koordinater (og omvendt).
Det er ganske enkelt å bruke. Den eneste fangen er at fordi det gjør en nettverksforespørsel til Google på gjeldende tråd, er det opp til deg å sørge for at du bare kjører den på bakgrunns tråden (slik at du ikke forårsaker en henge på hovedbruddstråden på sakte nettverk).
Legg til følgende for din aktivitet eller fragment:
Geocoder geocoder; @Override public void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); … geocoder = ny Geocoder (getActivity ());} @Override public void onLocationChanged (sluttplasseringssted) {// Spør google for adressen til stedet. // Dette kan ta en stund, så gjør det i en AsyncTask. ny AsyncTask () {@Overtrid beskyttet Adress doInBackground (Void [] params) {prøv {List adresser = geocoder. getFromLocation (plassering. getLatitude (), sted. getLongitude (), 1); hvis (adresser! = null && adresser. størrelse ()> 0)
returadresser. få (0);
} fangst (IOException e) {
// ignorert } retur null; } // Utført på UI-tråden @Override beskyttet tomt påPostExecute (Adressadresse) { hvis (adresse! = Null) { Streng s = adresse. getThoroughfare (); hvis (s! = Null) Toast. makeText (getActivity (), s, Toast. LENGTH_LONG). forestilling(); } } }. henrette(); } Denne koden legger til et Geocoder-felt i aktiviteten eller fragmentet, initialiserer den i onCreate (), og bruker den i onLocationChanged () for å finne adressen for gjeldende plassering. Deretter vises en Toast-melding med "hovedveien" for adressen, for eksempel "600 West Chicago Avenue. "Adresseobjektet returnert av Geocoder er rik på informasjon; sjekk ut javadocs for detaljer om hva annet du kan vise.Og med det, har du omtrent alt du trenger å vite om å abonnere på brukerens nåværende posisjon fra en Android-aktivitet eller -fragment.