# GPS am Nokia Handy auslesen (Anfänger)



## Gartengert (6. Jun 2010)

Hallo, ich bin neu hier, Mitte 20 und kurz vor Ende eines technischen Studiengangs. Und.. Java Neuling.

Ich habe mir kürzlich das Nokia 2710 bestellt, welches einen GPS Sensor hat. Jetzt dachte ich mir, wäre es sehr spannend, wenn man ein kleines Java Programm schreiben könnte, welches in einem bestimmten Intervall die GPS Daten in einer Datei speichert, um damit später Fotos eines Ausflugs geotaggen zu können. Ich bin zwar einigermaßen geübt in diversen Scriptsprachen und kann auch mit Delphi ein paar Probleme lösen, kenne Java aber nicht. Ich dachte mir nur, so schwer kann es nicht sein, Daten von dem Sensor auszulesen und in einer Datei zu speichern. Leider mußte ich nach einem investierten Tag feststellen, daß dem nicht so ist.

Meine Frage ist jetzt, ist das für einen Anfänger in akzeptabler Zeit zu lösen? Da es sich nur um diese Problematik handelt, wollte ich mir kein Buch zu Java kaufen.

Mein Stand bisher ist, ich habe Sun Java Wireless Toolkit for CLDC und die SDK ME installiert, funktioniert auch soweit und ich kann ein Hallo World Programm compilieren. So wie ich gelesen habe, kann ich auf die GPS Daten über die location Klasse zugreifen. Zu dieser finde ich leider keine Dokumentation (die es mit Sicherheit gibt, ich sie aber wirklich nicht finde). Und Codefitzel, die ich dazu gefunden habe, brachten leider Fehler beim compilieren.

Würde mich über ein "laß es lieber" oder ein "da steht was gutes" freuen. 
Grüße, gert


----------



## oldshoe (6. Jun 2010)

Hallo, also ansich ist das nicht sooo schwer
Probier dich mal an diesem Beispiel:


```
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.location.*;

public class locationMidlet extends Midlet implements CommandListener {
    
    Command Exit = new Command("Exit",Command.EXIT,0);
    public locationMidlet() {}
    
    public void startApp() {
        Form f=new Form("Waiting...");
        f.append("Finding for location...");
        f.addCommand(Exit);
        f.setCommandListener(this);
        Display.getDisplay(this).setCurrent(f);
        try {
            Criteria c=new Criteria();
            c.setHorizontalAccuracy(1000);
            c.setVerticalAccuracy(1000);
            c.setPreferredPowerConsumption(Criteria.POWER_USAGE_LOW);
            LocationProvider lp=LocationProvider.getInstance(c);
            Location loc=lp.getLocation(60);
            QualifiedCoordinates qc=loc.getQualifiedCoordinates();
            f.append("Alt: "+qc.getAltitude());
            f.append("Lat: "+qc.getLatitude());
            f.append("Long: "+qc.getLongitude());
            
        } catch(Exception e) {
            f.append("Exception: "+e);
        }
    }
    
    public void pauseApp() {}
    
    public void destroyApp(boolean destroy) {}
    
    public void commandAction(Command c, Displayable s) {
        if (c == Exit) {
            destroyApp(true);
            notifyDestroyed();
        }
    }
}
```
Da kannst du versuchen an criteria oder am locationprovider noch ein bisschen rumzuspielen bzw. zu optimieren. Die Stichwörter für speichern sind: RMS (Record Management System)


----------



## Gartengert (7. Jun 2010)

Hi oldshoe, 
super vielen Dank! :applaus:

Das klappt schonmal. Hatte noch Midlet zu MIDlet geändert, da der Compiler dort gemeckert hat. Werde das dann erstmal auf das Handy laden, wenn es (hoffentlich) morgen kommt und danach schauen, wie das mit dem Speichern funktioniert. 

Eigentlich ziemlich genial, daß man so nützliche Funktionen zu seinem Telefon hinzufügen kann. Dafür ist es erstaunlich unbekannt, finde ich.
Grüße gert


----------



## Gartengert (9. Jun 2010)

Hallo,

mit dem RMS kann man, wie ich gelesen habe, nicht auf das Dateisystem zugreifen, ich kann also nicht direkt Dateien speichern, die ich später von der Speicherkarte auf den Rechner kopieren kann. Wollte dann mit der File-API von Nokia arbeiten. Dazu habe ich mir das Nokia SDK runtergeladen (alle Versionen durchprobiert) und wollte im Editor vom JAVA-ME SDK 3.0 das Nokia SDK aktivieren, wie auf dieser Seite unten beschrieben: Forum Nokia - Java - Getting started

Mein Problem ist, bei mir wird das Nokia SDK nicht angezeigt und wenn ich auf "Find More Java Me Platform Forlders.." klicke und dort den Nokia Ordner auswähle, findet er trotzdem nichts. Habe auch schon alles etliche Male auf zwei verschiedenen Rechnern neu installiert, hilft nichts. Ich weiß also nicht, wie ich das Nokia SDK verwenden kann, was ich ja für die File API benötige. Könnt ihr mir da helfen? ???:L


----------



## oldshoe (10. Jun 2010)

Hmmm....Ich glaube für solche Zwecke kann man die FileConnection-API (JSR75) verwenden.
Java ME effort  Introduction to the FileConnection API - JSR 75
Getting Started with the FileConnection APIs


----------



## Gartengert (10. Jun 2010)

Hallo oldshoe,
ja die meinte ich mit "File-API" 

Ich habe von der Nokia Seite die SDK geladen, um diese API verwenden zu können. Bekomme aber Java nicht dazu, die Nokia SDK zu verwenden.


----------



## oldshoe (10. Jun 2010)

Was passiert denn wenn du mal das Beispiel Midlet von Java ME effort  Introduction to the FileConnection API - JSR 75
erstellst? Also einfach mal ignorieren, dass du außer J2ME nichts extra installiert hast.
ggf. würde

```
import javax.microedition.io.file.FileConnection;
```
nicht gefunden werden.


----------



## Gartengert (10. Jun 2010)

Er compiliert es tatsächlich ohne Murren!  Aber ausprobieren kann ich es ja nur, wenn ich den Nokia Emulator starte und es dort von Hand lade. Das geht zwar immerhin, aber man müßte der Entwicklungsumgebung sagen können, daß sie automatisch den anderen Emulator benutzen soll. Wenn man den ändern will, muß man wieder die "Platform" ändern, wie hier beschrieben (Forum Nokia - Java - Getting started), was ja leider nicht geht.

aber für mein recht kleines Projekt reicht der Wegg über das manuelle Laden in den Nokia Emulator wohl, danke 


Edit: 
Yeaaah, es funktioniert. Und zwar konnte man die Nokia SDK nicht wie bei Forum Nokia - Java - Getting started beschrieben über den Punkt "Java ME MIDP Platform Emulator", sondern über "Custom Java ME MIDP Platform Emulator" hinzufügen. Dort brauchte man nur den entsprechenden Ordner angeben, der Rest ging automatisch. Jetzt verwendet er auch den richtigen Emulator! :toll:


----------



## The_S (10. Jun 2010)

Die File-Connection API funktioniert auch mit einem gewöhnlichen Emulator.


----------



## Gartengert (10. Jun 2010)

Bei mir funktioniert auch die Location API in dem Java ME SDK 3.0 Emulator nicht oder nicht richtig. Das Programm, welches auf Handy und im anderen Emulator läuft, erzählt mir dort immer etwas von java.lang.NullPointerException: 0


----------



## Gartengert (10. Jun 2010)

Hallo,

das mit dem Abspeichern funktioniert. Jede neue GPS Koordinate hänge ich ans Ende einer bestimmten Datei ran. Leider gibt es bei jedem Versuch etwas zu speichern  eine Sicherheitsabfrage. Da ich mein Programm ja nicht selbst signieren kann, gibt es da eine andere Lösung für? Funktioniert das RMS System ohne die Sicherheitsabfragen? Dann könnte man ja vielleicht das dort speichern und erst am Ende in eine richtige Datei speichern.

Edit:
Ich nehm alles zurück, ich hatte irgendwo einen Fehler. Die Abfrage kommt nur einmal bei Connector.open() und wenn man die Datei zwischendurch nicht schließt, bleibt es auch bei dem einen Mal. Das ist dann Ok!


----------



## kskbln (18. Okt 2010)

hallo Gartengert,

du schriebst : kann ich auf die GPS Daten über die location Klasse zugreifen. Zu dieser finde ich leider keine Dokumentation (die es mit Sicherheit gibt, ich sie aber wirklich nicht finde).

hast du jetzt eventuell eine lösung dazu gefunden ?
wenn ja, würde der weg dazu mich sehr interessieren.

vorab schon mal danke.


----------



## Gartengert (18. Okt 2010)

kskbln hat gesagt.:


> hallo Gartengert,
> 
> du schriebst : kann ich auf die GPS Daten über die location Klasse zugreifen. Zu dieser finde ich leider keine Dokumentation (die es mit Sicherheit gibt, ich sie aber wirklich nicht finde).
> 
> ...



Hallo kskbln,

bei der Verwendung der location API habe ich mich an das Beispiel von oldshoe gehalten (siehe oben, funktioniert!). Die Dokumentation der Klasse habe ich nach einigem Suchen hier gefunden: 

LocationProvider (JSR179 Location API for J2ME)

Komischerweise verstecken sich diese Dokumentationen immer ziemlich.

Gruß, Gert


----------



## kskbln (19. Okt 2010)

hallo gert,

( ja wenn man den kleinen finger reicht, will der andere die ganz hand !  )

hier noch eine frage zur "hand "

beim Beispiel von oldshoe  kommt folgender Fehler :

Exeption:java.lang.NullPointerExeption

muß noch irgendwie die COM Schnittstelle  angegeben werden.
vielleicht hast du noch ein Tipp.

danke
klaus


----------



## 7bkahnt (9. Nov 2010)

Ich hab ein Samsung I900 Omnia. Und bei mir kommt schlichtweg der doch sehr grob ausgeschriebene Fehler: "Java-Ausnahme,Anwendung wird nun geschlossen" ^^
Was kann ich noch verändern? Bin auch neu in der Materie....

grüsse


----------



## The_S (9. Nov 2010)

Meistens gibt dir das Telefon nicht mehr Informationen als so ein Fehler. Am Besten in einem entsprechenden Samsung-Entwickler-Forum nachfragen oder über einen Emulator am PC testen. Da sollten die Fehlermeldungen aussagekräftiger sein.


----------

