Geolocation

Geolocation erlaubt es, die akutelle Position des Benutzers zu ermitteln. Dafür kann das Endgerät verschiedene Datenqullen wie GPS, WiFi oder das Mobilfunknetz nutzen. Um an Positionsdaten zu gelangen, muss ein LocationListener erzeugt werden. Dieser enthält Callback-Methoden, welche vom System aufgrufen werden, falls sich die Positionsdaten geändert haben.

Zum Testen dieses Vorgehens wird zuerst ein neues Projekt mit einer Activity angelegt. Diese besteht lediglich aus einer Textausgabe. In dieser werden später die Positionsdaten angezeigt.

Der angesprochene LocationListener muss beim LocationManager registriert werden. Der LocationManager ist eine System-Service. Man erhält ihn durch einen Aufruf der Methode getSystemService(LOCATION_SERVICE) . Der Service besitzt die Methode requestLocationUpdates() . Mit dieser kann der zu nutzende Location-Provider (Netzwerk, GPS, ...) sowie der LocationListener gesetzt werden.

package de.hszg.mobileapps;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class GeolocationTestActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        final TextView textView = (TextView) findViewById(R.id.textView);

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        LocationListener locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                textView.setText(location.toString());
            }

            @Override
            public void onProviderDisabled(String provider) { 
            }

            @Override
            public void onProviderEnabled(String provider) { 
            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
            }
        };

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
                locationListener);
    }
}

Vor dem Testen muss auf dem Gerät GPS oder WLAN aktiviert werden und in der Manifest Datei muss der Anwendung der Zugriff auf den Location-Service erlaubt werden:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />