Sie sind nicht angemeldet.

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

1

Sonntag, 9. Mai 2010, 14:36

Java -> Zugriff auf die GPS Maus

Hallo zusammen,
da ich mir ein JAva und ein freebasic Programm für eine GPS Maus geschrieben hatte,
wollte ich dies auch in Java Me bewerkstelligen "also fürs Smartphone".

Also habe ich Java Me auf den Laptop installiert "zum programmieren" und Java FX auf den Smartphone installiert.

Wenn ich jetzt eine JAD Datei ausführe, dann greift er jedoch nicht auf GPS zu.
Wenn ich eine JAD Datei ausführe, der mir nur "HALLO WELT" anzeigen soll, zeigt er es mir an.

Was mache ich falsch, beim Zugriff auf GPS?
Ist es vielleicht garnicht möglich, hierauf zuzugreifen?

Blackthorne

Moderator

Beiträge: 962

  • Nachricht senden

2

Sonntag, 9. Mai 2010, 15:45

Wie hast du denn den Zugriff programmiert? Veröffentlich doch mal ein bisschen Sourcecode, dann kann man evtl. mehr sagen.
Da GPS ja über einen virtuellen seriellen Port läuft könnte es schon gehen. Hab mich mal ein bisschen mit J2ME beschäftigt, allerdings nicht mit Schnittstellen.
Wie gesagt, etwas Code wäre hilfreich....

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

3

Sonntag, 9. Mai 2010, 19:00

http://forums.sun.com/thread.jspa?thread…4716&tstart=105

Ist dieser Programmiercode, stammt aber nicht von mir

guenter

Moderator

Beiträge: 695

Handy: Motorola Defy, Samsung Galaxy S

Danksagungen: 2

  • Nachricht senden

4

Sonntag, 9. Mai 2010, 19:41

dass es nicht COM1 sein kann, ist dir schon klar ... (ich gehe mal davon aus), daher wäre es schon hilfreich zu wissen, was du selbst programmiert bzw. angepasst hast.

Günter

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

5

Sonntag, 9. Mai 2010, 19:44

Also ich hab schon Code, um das NMEA Protokoll z.B: GPRMC, GPGGA, GPGSA, GPGSV Daten auszuwerten, jedoch muss ich es erstmal hinbekommen, die GPS Maus anzusprechen.

COM2 u. Baudrate von 4800

guenter

Moderator

Beiträge: 695

Handy: Motorola Defy, Samsung Galaxy S

Danksagungen: 2

  • Nachricht senden

6

Sonntag, 9. Mai 2010, 23:09

COM2 u. Baudrate von 4800
Hast du COM4 auch probiert?

Günter

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

7

Montag, 10. Mai 2010, 12:51

Mit Com4 dasselbe Probleme.... Leider.

Blackthorne

Moderator

Beiträge: 962

  • Nachricht senden

8

Montag, 10. Mai 2010, 17:29

Wie gesagt, geh mal etwas mehr ins Detail...
Hast du den Code 1:1 so übernommen? Was liefert der Datenstrom? Was sollte er liefern? Gibts eine Fehlermeldung?
Und wie schauts mit COM6 bzw. COM8 aus?

guenter

Moderator

Beiträge: 695

Handy: Motorola Defy, Samsung Galaxy S

Danksagungen: 2

  • Nachricht senden

9

Montag, 10. Mai 2010, 23:56

Mit Com4 dasselbe Probleme.... Leider.
Mit welchem Java arbeitest Du? Probiere mal JavaFX von Sun ... die Version für Windows-Mobile.

Günter

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

10

Dienstag, 11. Mai 2010, 11:55

Ich arbeite schon mit JAVA FX auf dem Smartphone.
Wiegesagt gehen normale Programme, jedoch nicht ein Programm mit GPS

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

11

Dienstag, 11. Mai 2010, 17:09

Es lies mir keine Ruhe, daher hab ich mal auf die schnelle mein eigenes GPS Programm geschrieben, jedoch hat es Probleme mit try und catch.
Er springt sofort zu catch und ich weiss nicht wieso.
Normalerweise müsste er try durchlaufen.

Hier der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package hello;

import java.io.*;
import javax.microedition.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/* Die HelloWorld-Klasse ist ein MIDlet */
public class HelloMIDlet extends MIDlet
{

String text;
int ch = 0;
	/* Die Klasse Display representiert das Display des
 	* Mobiltelefons */
	Display display;

	/* Mit der Klasse Form kann man leicht Elemente auf dem Display
 	* positionieren */
	Form form;

	/* Konstruktor */
	public HelloMIDlet() {
	/* das Display-Objekt holen */
	display=Display.getDisplay(this);
	}

	/* die Methode wird ausgefuehrt wenn das Programm
 	* vom Handy gestartet wird */
	public void startApp() 
	{
    	//hier wird nachdem Start, sofort in public void run gesprungen
    	run();
	}

public void run()
{
//Hier wird der Titel gewählt
form=new Form("GPS");


CommConnection cc = null;
	/* neues Form-Objekt instanzieren
	 * mit Titel */
    	try
    	{
            	//hier werden die Com Schnittstellendaten gesetzt
		cc = (CommConnection)Connector.open("comm:com1;baudrate=4800");

            	//hier wird ein Stream geöffnet
            	InputStream is  = cc.openInputStream();
            	//eine Schleife von 1 nach 200
		for(int i = 1; i < 200; i++)
            	{
            	//hier wird 1 Zeichen eingelesen
		ch = is.read();
            	//wenn das Zeichen = 0 ist, nichts machen
            	if (ch==0)
            	{
            	}
            	//ansonsten
            	else
            	{
            	//wird int ch zum string text
            	text = String.valueOf(ch);
            	//hier wird es dann ausgegeben
            	form.append(text); 
            	}
 
            	}
            	is.close();
    	}
    	//läuft es mit Fehler
    	catch (IOException ioe)
    	{
    	//dann Error ausgeben
        	form.append("COM ERROR");	
    	}
//und angezeigt beim Screen
display.setCurrent(form);
}
	/* die restlichen Methoden muessen der Vollstaendigkeit halber
 	* hier stehen, werden aber noch nicht benutzt! */
	public void pauseApp() {
	}

	public void destroyApp(boolean unconditional) {
	}

}


Hab herausgefunden mit IGO8, dass es an Com Port 4 mit 57600 Baudrate die GPS MAus läuft

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Andy2« (11. Mai 2010, 17:30)


Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

12

Dienstag, 11. Mai 2010, 18:46

- com.sun.midp.io.j2me.comm.Protocol.openPrim(), bci=332
- javax.microedition.io.Connector.openPrim(), bci=327
- javax.microedition.io.Connector.open(), bci=3
- javax.microedition.io.Connector.open(), bci=3
- javax.microedition.io.Connector.open(), bci=2
- hello.HelloMIDlet.run(), bci=16
- hello.HelloMIDlet.startApp(), bci=1
- javax.microedition.midlet.MIDletTunnelImpl.callStartApp(), bci=1
- com.sun.midp.midlet.MIDletPeer.startApp(), bci=7
- com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=269
- com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
- com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
- com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
- com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26

guenter

Moderator

Beiträge: 695

Handy: Motorola Defy, Samsung Galaxy S

Danksagungen: 2

  • Nachricht senden

13

Dienstag, 11. Mai 2010, 22:27

Hallo Andy2,

die Exception geschieht hier:

cc = (CommConnection)Connector.open("comm:com1;baudrate=4800");

Wäre interessant zu wissen, welche Exception geworfen wird. Ich kenne mich mit ME-Programmierung nicht aus, vielleicht im catch-Block wie folgt:
form.append("COM ERROR: " + ioe.getMessage());

Und warum "comm:com1", sollte es nicht "comm:com4" sein?

Günter

Blackthorne

Moderator

Beiträge: 962

  • Nachricht senden

14

Mittwoch, 12. Mai 2010, 10:42

Hallo,

muß mir echt mal wieder J2ME installieren...

Hab kurz nachgesehen, wenn ich mich nicht verguckt habe ist die CommConnection (von javax.microedition.io)
auf die du da castest ein Interface, sprich eine "leere" Klasse die erst konkret implementiert werden muß. Darum gehts wohl nicht :(
So eine Implementierung müßte dann wohl von Microsoft kommen....

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

15

Mittwoch, 12. Mai 2010, 19:21

das bedeutet, dass das Thema gps mit java me und java fx scheitert?

guenter

Moderator

Beiträge: 695

Handy: Motorola Defy, Samsung Galaxy S

Danksagungen: 2

  • Nachricht senden

16

Mittwoch, 12. Mai 2010, 21:28

das bedeutet, dass das Thema gps mit java me und java fx scheitert?
Nicht unbedingt - ich erinnere mich dunkel, dass es für den PDA ein Java-Navi-Programm gibt. Die haben ja Java im Einsatz ...

Günter

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

17

Mittwoch, 12. Mai 2010, 22:25

Mit form.append("COM ERROR: " + ioe.getMessage());
bekomme ich folgendes raus : null

:-(
Achso habs abgeändert: COM 4 mit 57600 Baud

Wenn ich es mit einem Emulator laufen lasse, sagt er mir "COM 4 Port not found"

Ich glaube, dass es zwar geöffnet wird, jedoch nicht richtig von gelesen wird

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Andy2« (12. Mai 2010, 22:38)


Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

18

Mittwoch, 12. Mai 2010, 23:19

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package hello;

import java.io.*;
import javax.microedition.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.IOException.*;
import java.io.InputStream.*;
import javax.microedition.io.CommConnection;
import javax.microedition.io.Connector;

/* Die HelloWorld-Klasse ist ein MIDlet */
public class HelloMIDlet extends MIDlet
{
String text;
int ch = 0;

	/* Die Klasse Display representiert das Display des
 	* Mobiltelefons */
	Display display;

	/* Mit der Klasse Form kann man leicht Elemente auf dem Display
 	* positionieren */
	Form form;

	/* Konstruktor */
	public HelloMIDlet() {
	/* das Display-Objekt holen */
	display=Display.getDisplay(this);
	}

	/* die Methode wird ausgefuehrt wenn das Programm
 	* vom Handy gestartet wird */
	public void startApp()
	{
		//hier wird nachdem Start, sofort in public void run gesprungen
		run();
	}

public void run()
{

//Hier wird der Titel gewählt
form=new Form("GPS");



	/* neues Form-Objekt instanzieren
	 * mit Titel */
		try
		{
            	CommConnection cc = null;
        		//hier werden die Com Schnittstellendaten gesetzt
		cc = (CommConnection)Connector.open("comm:com4;baudrate=57600");

        		//hier wird ein Stream geöffnet
        		InputStream is  = cc.openInputStream();

        		//eine Schleife von 1 nach 200
		for(int i = 1; i < 200; i++)
        		{
        		//hier wird 1 Zeichen eingelesen
		ch = is.read();

        		//wenn das Zeichen = 0 ist, nichts machen
        		if (ch==0)
        		{
        		}
        		//ansonsten
        		else
        		{
        		//wird int ch zum string text
        		text = String.valueOf(ch);
        		//hier wird es dann ausgegeben
            	form.append(text);
        		}

        		}
        		is.close();

		}

catch (ConnectionNotFoundException cnfe) {
cnfe.printStackTrace();

	} catch (IllegalArgumentException iae) {
iae.printStackTrace();

	} catch (Exception e) {
e.printStackTrace();

	}

//und angezeigt beim Screen
display.setCurrent(form);

}
	/* die restlichen Methoden muessen der Vollstaendigkeit halber
 	* hier stehen, werden aber noch nicht benutzt! */
	public void pauseApp() {
	}

	public void destroyApp(boolean unconditional) {
	}

}

Andy2

Neuling

Beiträge: 27

Handy: M 800

  • Nachricht senden

19

Donnerstag, 13. Mai 2010, 03:10

Ich glaube, es liegt nicht an mir, sondern am Java.
Hab grad folgendes Programm mal ausprobiert:
trekbuddy

Hier ist genau das gleiche Problem, dass er nicht auf die integrierte GPS Maus zugreifen kann.
Bei der Trekbuddy kann man auch die Daten eingeben wie COM Port und Baudrate.

So wie es ausschaut, kann man nur Bluethoo GPS Empfänger ansprechen unter JAva, keine integrierten GPS Empfänger.
Das finde ich etwas komisch

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Andy2« (13. Mai 2010, 03:45)


Blackthorne

Moderator

Beiträge: 962

  • Nachricht senden

20

Donnerstag, 13. Mai 2010, 11:47

Oder man muß den integrierten GPS-Empfänger erst "einschalten"
Daß es nur mit BT-GPS Empfängern ghen sollte fänd ich seltsam, denn beide verwenden dieselbe Methode, eine (virtuelle) serielle Schnittstelle.
Meiner Meinung nach liegts dann eher dran daß die Verbindung bei BT eben schon "aktiv" ist.
Kann mich natürlich auch täuschen... :(

*Update*
Bin gerade auf eine andere Möglichkeit gestossen das GPS auszulesen, nämlich die die JSR-179 Location API, wird aber nicht von allen Handys unterstützt, siehe hier ...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Blackthorne« (13. Mai 2010, 12:12)