Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Online Artikel  »  GPS-Anwendung für Google-Android  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

GPS-Anwendung für Google-Android

Hallo Satellit

von Oliver Frommel
 

Soeben ist Version 1.1.0r2 des Android-SDK erschienen, das einige Fehler behebt und die Kompatibilität zum echten G1-Handy verbessert, auf dem ebenfalls Version 1.1.0 des Systems läuft. Erfahren Sie hier, wie in nur wenigen Codezeilen eine Anwendung entsteht, die GPS-Koordinaten ausliest und anzeigt.

Mit dem Android-SDK und dem Eclipse-Plugin Handy-Anwendungen zu entwickeln ist relativ leicht, denn die Tools funktionieren weitgehend reibungslos, sind gut bedienbar, die API ist gut durchdacht und dokumentiert. Außerdem finden sich im Internet eine Vielzahl von Beispielen aus allen Bereichen. Hier muss man allerdings aufpassen, denn gelegentlich stößt man noch auf Quellcode, der mit älteren Android-Umgebungen kompatibel ist, aber nicht mehr mit der aktuellen Version. Dieser Teil des Workshops zeigt, wie Sie das automatisch erstellte Anwendungsgerüst erweitern und bis zum GPS-Tracker ausbauen, der die Koordinaten des aktuellen Standorts ausgibt.

Wenn Sie, wie im ersten Teil dieses Workshops beschrieben, Android und das Eclipse-Plugin installiert haben, sollte sich die rudimentäre Anwendung kompilieren und auf dem Emulator ausführen lassen. Besitzen Sie ein echtes G1-Handy, das sie über USB mit dem Entwicklungsrechner verbinden, wird es vielleicht von den Android-Tools nicht gefunden, die Eclipse im Hintergrund ausführt, um zum Beispiel die Anwendung aufs Gerät zu laden. Die Lösung besteht darin, das Udev-Subsystem, das für das Anlegen und die Berechtigungen von Gerätedateien zuständig ist, richtig zu konfigurieren. Die folgende Regel vergibt die korrekten Permissions, wenn Sie das Handy an den PC anstecken:

SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

Schreiben Sie das in die Datei »/etc/udev/rules.d/50-android.rules« und machen Sie sie ausführbar, dann sollte alles funktionieren.

Wie man in der folgenden Abbildung sieht, ist der von Eclipse erzeugte Anwendungscode recht knapp gehalten.


Die eigene Klasse »hello« erweitert die Systemklasse »Activity«, die für Standard-GUI-Anwendungen vorgesehen ist. Der wenige Rest steckt in der Callback-Methode »onCreate()«, die abläuft, wenn die Anwendung soweit initialisiert ist. Nachdem einem Aufruf der gleichnamigen Callback-Methode der Elternklasse bleibt nur noch, die aktuelle Ansicht auf die Layout-Komponente »main« zu setzen. Diese Art von Ressourcen hat Eclipse in der Datei »R.java« abgelegt, die es auch ständig aktualisiert. Manuelle Änderungen können also zu Konflikten führen.

Um das klassische Hello World auf dem Handyschirm zu bringen, braucht es nicht mehr als eine »TextView«, die man dann zur aktuellen Ansicht der Anwendung macht. Den darzustellenden String übergibt die Methode »setText()« dem »TextView«-Objekt.

TextView tv = new TextView(this);
tv.setText("Hello Android");
setContentView(tv);

Will man nun statt eines langweiligen Texts die aktuellen Standort auszugeben, kommt das Konzept des Listeners ins Spiel. An vielen Stellen dienen sie als Schnittstelle für regelmäßig oder unregelmäßig eintreffende Ereignisse, zum Beispiel Benutzereingaben. Der Programmierer registriert für bestimmte Ereignisse eigene Funktionen als Listener, die dann ablaufen, wenn das Ereignis eintrifft. Die Android-Plattform stellt sicher, dass die eigene Anwendung so nicht unnötig Rechenzeit verbraucht, sondern schläft, aber beim Ereignis prompt aufwacht und reagiert.

Es zeichnet die Android-API aus, dass sie sich sehr stark an typischen Anwendungen für das G1-Handy orientiert. So genügen wenige Zeilen, um den aktuellen GPS-Standort zu erfahren. Man erzeugt einen neuen »LocationProvider« und registriert über eine seiner Methoden eine eigene Funktion -- hier »locationListener«, die in einem festgelegten Intervall aufgerufen wird.

LocationProvider provider = lm.getProvider("gps");
lm.requestLocationUpdates("gps",
        60000, // 1min
        1,   // 10m
        locationListener);

Neben GPS gibt es auch noch andere »LocationProvider«, die zum Beispiel - etwas ungenauer -- den Standort aus der Funkzelle ableiten. Der eigene »LocationListener« muss dann nur noch über die Methoden des Location-Objekts geographische Breite und Länge auslesen und dem »TextView«-Objekt übergeben:

private final LocationListener locationListener = new LocationListener() {
      public void onLocationChanged(Location l) {
         TextView tv = new TextView(LnmTrakr.this);
         tv.setText("lat: " + l.getLatitude() + "\nlon: " + l.getLongitude());
         setContentView(tv);
      }
      ...

Weil dieser Code ad hoc eine anonyme Klasse erzeugt, muss sich die »TextView« über »LnmTrakr.this« auf die äußere Klasse beziehen. Um dem Emulator ein funktionierendes GPS-Gerät vorzugaukeln verbinden Sie sich auf dem Testrechner über »telnet localhost 5554« mit dem emulierten Handy und geben dann in dessen Konsole beispielsweise »geo fix 20 40« ein.

Wer diese Anwendung auf Emulator oder Handy ablaufen lässt, wird feststellen, dass es keine Möglichkeit gibt, das Programm zu beenden. Mit wenigen Zeilen entsteht ein eigenes Menü mit einem Exit-Button. Die auskommentierten Zeilen zeigen, wie ein Menü mit mehreren Einträgen aussieht.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    menu.add(Menu.NONE, 0, 0, "Exit");
    //menu.add(Menu.NONE, 1, 1, "Settings");
    //menu.add(Menu.NONE, 2, 2, "Other");
    return true;
}

Der passende Event-Handler beendet das Programm, wenn der Anwender den Menüpunkt 0 auswählt:

public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
    case 0:
        finish();
    }
    return false;
}

Damit ist in ein paar Zeilen eine Handy-Anwendung entstanden, die ziemlich viel kann (den Java-Code der Hauptdatei finden Sie hier). Nur wenig mehr Code stellt den aktuellen Standort auf - sie erraten es - Google Maps dar. Wenn Sie nun Eclipse beenden, wird Ihnen gleich noch einmal der Suchmaschinenhersteller begegnen, wenn er Ihnen ein Fenster präsentiert, das Statistiken über Ihre Android-Nutzung erheben möchte.


Der Entwickler kann im Gegensatz zum G1-User jedenfalls noch das Häkchen entfernen.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
GPS-Tracking mit Android GPS-Tracking mit Android, Teil 3
Android-Entwicklung für das Google-Handy Mobilanwendungen mit dem Android-SDK und Eclipse programmieren
Spreu vom Weizen Mobile Linux-Plattformen
Wünsche werden wahr 15 Gadgets - nicht nur für Linux-Geeks
Schneller parallel? GNU Compiler Collection 4.2
Himmlisch: Eclipse Das integrierte Entwicklertool mit dem astronomisch großen Plugin-Fundus
Whitepaper
Daten Migration - Eine Publikation von Bloor Research

Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele

Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (3)
von
Ross,
18.08.2011 21:35
Läuft nicht :(
Die Lokale Variable "provider" wird bei mir nicht benutzt. Das Manifest und "TextView tv = new TextView(XXX.this); " habe ich angepasst.


Ansonsten ist der Code mit dem aus "LnmTrakr-3.java" identisch.


Im Emulator (2.3.3) Erscheint die folgende Meldung:

-Gpstracker-
Hello World, Gpstracker!

Hat jemand den Code von oben zum laufen gebracht?

Vielen Dank schon einmal Ross
von
abo,
31.08.2009 13:28
Bug im Code
Euer Code hat einen kleinen Bug. In der Methode muss die Zeile

TextView tv = new TextView(this);

so lauten:

TextView tv = new TextView(GPSTracker.this);
von
KR,
28.03.2009 13:59
Die wichtigsten Grundvoraussetzungen für GPS-Anwendungen werden nicht erwähnt...
Oder habe ich das übersehen?

1. die ominöse Variable "lm" im Listing ist ein LocationManager, den man wie folgt von Android erhält:
LocationManager lm = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

2. Damit man überhaupt GPS-Daten von Android erhalten kann, muss noch in AndroidManifest.xml die enstprechende Permission angefordert werden:

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