Cieľom siedmeho cvičenia je precvičenie základnej práce s GPS pozíciou používateľa a jednoduchej interakcie s mapou.
V OS Android existuje niekoľko spôsobov pre zistenie aktuálnej pozície zariadenia:
Aplikácie, ktoré používajú lokalizačné služby, musia požiadať povolenie poskytnutia údajov o polohe. Android má dve úrovne oprávnení:
V aplikáciách môžeme využiť tieto senzory dvoma spôsobmi. Buď využijeme nízkoúrovňové API android.location
, alebo komplexnejšiu službu Google Location Services API.
LocationManager
Listenerom zmeny polohy bude naša aktivita, ktorú necháme implementovať interface LocationListener
a jeho štyri metódy:
Location
, ktorý obsahuje zemepisnú šírku, dĺžku, výšku, azimut..public class MainActivity extends AppCompatActivity implements LocationListener {
Ak je aktivita listenerom, môžeme ju registrovať v správcovi polohy cez metódu requestLocationUpdates()
. Tá však potrebuje štyri parametre:
Výsledná aktivita môže vyzerať napríklad takto:
V našom testovacom prípade sme zvolili periódu 5ms a vzdialenosť 5 metrov. V praxi je to pomerne krátka perióda, ktorá extrémne vyťaží baterku.
Ak sme zistili polohu, vieme ju použiť na prepočítanie vzdialenosti.
Location
a nastavíme geografické koordináty (cez setLatitude() a setLongitude())DecimalFormat
V prvom kroku si vytvoríme nový projekt so základnou šablonou Google Maps Activity
a pridáme potrebné povolenia do manifestu.
Následne pridáme do gradle súboru aplikácie závislosť pre play-services-maps
a play-services-location
implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services-location:17.0.0'
Vytvoríme jednoduchý layout
Vytvorte Google Maps API key na stránke https://console.cloud.google.com/.
Aktuálnu polohu získame z objektu FusedLocationProviderClient
. Na to však potrebujeme získať pre aplikáciu príslušné povolenia a vytvoriť objekt požiadavky, v ktorej nastavíme niekoľko vlastností.
Interval aktualizácií hodnôt má priamy vplyv na spotrebu batérie vášho zariadenia.
Nad vytvoreným klientom typu FusedLocationProviderClient
zavoláme metódu requestLocationUpdates(request, callback).
Po zavolaní tejto metódy začnú byť doručované správy o zmene polohy z GPS do anonymnej triedy typu LocationCallback
, ktorá je parametrom metódy.
Ošetrite dostupnosť prístupových práv pred volaním metódy requestLocationUpdates()
.
Pre interakciu s mapou môžeme použiť napríklad .setOnMapClickListener
a pridať Marker na danú pozíciu kliku.
V tomto kroku označíme aktuálnu polohu na mape prostredníctvom Markera:
Ak chceme nakresliť čiaru medzi jednotlivými bodmi použijeme Polyline, alebo Circle pre kružnicu: