V dnešním článku si ukážeme jak z Android zařízení získat aktuální GPS polohu. K získání polohy použijeme LocationListener.
Oprávnění pro přístup k poloze
Do AndroidManifest.xml přidáme následující oprvnění:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Používáme Android LocationManager
Activita ve které chceme zjistit GPS polohu musíme implementovat rozhraní LocationListener (z package android.location.LocationListener)
public class MainActivity extends Activity implements LocationListener { private LocationManager locationManager;
kde následně musíme přetížit tyto metody:
@Override public void onLocationChanged(Location location) { Log.d("GPS", "Lat: " + location.getLatitude() + "Lon: " + location.getLongitude()); Toast.makeText(getActivity(), "Lat: " + location.getLatitude() + "Lon: " + location.getLongitude(), Toast.LENGTH_LONG).show(); locationManager.removeUpdates(this);//stop gps changes, only ONE } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { Toast.makeText(getActivity(), "Gps is turned ON", Toast.LENGTH_SHORT).show(); } @Override public void onProviderDisabled(String provider) { Toast.makeText(getActivity(), "Gps is turned OFF", Toast.LENGTH_SHORT).show(); }
Vynutíme získání polohy:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 1, this); }
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 1, this) kde parametry funkce:
provider | provider pro zjištění polohy |
minTime | minimální interval pro aktualizaci polohy (v milisekundách) |
minDistance | minimální vzdálenost mezi aktualizacemi (v metrech). Pokud nepotřebujeme změnu po metrech, nastavíme na 0 -> tím se bude aktualizovat pouze podle česového intervalu (minTime) |
listener | listener jehož metoda onLocationChanged(Location) se zavolá s každou změnou |
Pokud budeme chtít listener pro zjišťování polohy ukončit, zavoláme:
locationManager.removeUpdates(this);
Všimněte si že první zjištění polohy trvá docela dlouho a zařízení se zahřívá více než obvykle. I baterie ubývá rychleji než obvykle 🙂 Příště si ukážeme šetrnější způsob jak zjišťovat polohu zařízení, který při prvním spuštění rychle vrátí naposledy známou polohu a poté ji zpřesní, nebo jak zjistit, že GPS je vypnuta.