[J2ME]RMS moet van foon naar PC, hoe?

Pagina: 1
Acties:

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 00:56

Delphi32

Heading for the gates of Eden

Topicstarter
Ik zit al dagen te zoeken en fora door te spitten maar ik krijg het beeld nog niet helder.
Ik heb in Java (geen opmerkingen over mijn nick please :P) een app geschreven die op mn telefoon draait. Die app genereert wat data en savet dat naar een bestand, dat a. binair is en b. niet zomaar benaderbaar via een file browser. De inhoud van het bestand moet naar de PC voor verdere bewerking.
HOE krijg ik dat nou voor elkaar? Ik heb al de volgende ideeën proberen uit te zoeken:
- BT dongle aan PC en dan een BT service bouwen op de PC: kan, maar er zijn geen freeware BT SDK's vziw
- foon hangt met USB kabel aan PC. PC ziet dit als seriële verbinding, maar J2ME kan geen seriële poort aan. Wel HTTP -> kan HTTP over seriële kabel? Hoe dan?
- Obex schijnt ook een optie te zijn, maar veel te weinig info over gevonden.

Mijn probleem is dus niet zozeer 'hoe los ik een programmeerprobleem op', maar 'waar moet ik beginnen met dit te programmeren'. En ik hoop dat iemand me daar hier verder mee kan helpen, aangezien hier de programmeurs rondlopen :)
Iemand moet dit toch al eens bij de hand hebben gehad :?

edit:

RMS = naam van RecordStore bestand waar ik dus niet bij kan.

[ Voor 6% gewijzigd door Delphi32 op 06-11-2004 00:41 . Reden: Titel verduidelijkt ]


Verwijderd

Een RMS bestand is enkel beschikbaar vanuit het java programma (of suite) die het gemaakt heeft. Andere programma's hebben geen toegang.

Normaal gesproken is er geen methode om dit naar de PC te verplaatsen, maar een optie is een stuk aan het programma toe te voegen wat de inhoud van het RMS bestand naar een webserver stuurt via HTML.

Maar wat je ook doet, het moet via het programma gebeuren wat het RMS bestand heeft aangemaakt.

Verwijderd

Verwijderd schreef op 06 november 2004 @ 02:47:
Een RMS bestand is enkel beschikbaar vanuit het java programma (of suite) die het gemaakt heeft. Andere programma's hebben geen toegang.

Normaal gesproken is er geen methode om dit naar de PC te verplaatsen, maar een optie is een stuk aan het programma toe te voegen wat de inhoud van het RMS bestand naar een webserver stuurt via HTML.

Maar wat je ook doet, het moet via het programma gebeuren wat het RMS bestand heeft aangemaakt.
Niet helemaal waar :) Je kan vanuit elke MIDlet bij 1 RMS komen, mits je daar toegang voor verleent. Op java.sun.com staat wat info over het delen van 1 RMS.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 00:56

Delphi32

Heading for the gates of Eden

Topicstarter
Ik begrijp de beperkingen van het RMS-systeem. De data die in mijn RecordStore zit wil ik converteren naar XML (da's niet zo moeilijk) en vervolgens naar mijn PC sturen. Mijn vraag is, hoe ik dat laatste voor elkaar krijg. Welke bouwstenen ik nodig heb en hoe ik die schrijf. Er moet vast een prog geschreven worden dat op de PC draait en de gegevens kan ontvangen, maar welke technologie moet ik daar toepassen? Een webservice schrijven wellicht?

  • MisterData
  • Registratie: September 2001
  • Laatst online: 16-05 23:29
Via bluetooth een seriele verbinding opzetten waarover je telefoon dan de data verstuurd? De PC mapped gewoon de bluetooth-poort aan een normale poort, zoals bijvoorbeeld COM5:. Daar kun je dan gewoon met een normaal programma naar 'luisteren' en zo de data binnentrekken :)

Verwijderd

Voor het verzenden heb je verschillende keuzes. Je kan de midlet laten SMSen, een socket connectie opzetten of een HTTP verbinding gebruiken. Dan laat ik methoden als via infrarood of BT nog buiten beschouwing.

Elke methode vereist zijn eigen software op de PC om de binnenkomende data af te handelen. Bij HTTP moet je een webserver hebben en een dynamische pagina die de binnenkomende data bv in een database schrijft, bij een socket moet je een socket server gebruiken.

In dit geval zou ik echter een HTTP connectie gebruiken, dat wordt vrijwel altijd wel ondersteund op telefoons (SMS, BT of infrarood vaak niet) en je kan het vrij makkelijk afhandelen in JSP, ASP of PHP Wel moet je PC dus publiek toegankelijk zijn via het internet en kost het versturen van de data geld aangezien je een GPRS verbinding nodig hebt.

Hieronder staat wat code (Niet de mooiste maar het werkt) om een HTTP GET en POST mee uit te voeren.

code:
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
    final int MAX_REDIRECTS = 5;

    String Data = "";
    String Request = createRequestURL();
    OutputStream os = null;

    // Set the request method and headers
    int redirects = 0;

    String requestMethod = HttpConnection.GET;
    String str = ""; // De data die gepost moet worden.

    while (redirects < MAX_REDIRECTS) {

      HttpConnection c = (HttpConnection) Connector.open(Request,
          Connector.READ_WRITE);
      c.setRequestMethod(HttpConnection.GET);
      c.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");
      c.setRequestProperty("User-Agent",
                           "Profile/MIDP-1.0 Configuration/CLDC-1.0");
      c.setRequestProperty("Content-Language", "en-US");

      if (requestMethod.equals(HttpConnection.POST)) {
        c.setRequestProperty("Content-Type",
                             "application/x-www-form-urlencoded");
        // Getting the output stream may flush the headers
        os = c.openOutputStream();

        byte postmsg[] = str.getBytes();
        for (int i = 0; i < postmsg.length; i++) {
          os.write(postmsg[i]);
        }
        os.close();
        os = null;
      }

      InputStream is = c.openInputStream();
      int code = c.getResponseCode();

      // If we get a redirect, try again at the new location
      if ( (code >= HttpConnection.HTTP_MOVED_PERM &&
            code <= HttpConnection.HTTP_SEE_OTHER) ||
          code == HttpConnection.HTTP_TEMP_REDIRECT) {

        // get the url of the new location (always absolute)
        String name = c.getHeaderField("Location");
        is.close();
        c.close();
        is = null;
        c = null;

        if (++redirects > MAX_REDIRECTS) {
          // Too many redirects - give up.
          break;
        }

        // Choose the appropriate request method
        requestMethod = HttpConnection.POST;
        if (code == HttpConnection.HTTP_MOVED_TEMP ||
            code == HttpConnection.HTTP_SEE_OTHER) {
          requestMethod = HttpConnection.GET;
        }
        continue;
      }
      String type = c.getType();
      if (code == HttpConnection.HTTP_OK &&
          type.equals("text/html")) {
        // Getting the output stream may flush the headers
        StringBuffer sb = new StringBuffer();
        int ch;

        while ( (ch = is.read()) != -1) {
          sb.append( (char) ch);
        }
        Data = sb.toString();
        ch = Data.length();

        is.close();
        c.close();
        break;
      }
    }
    return Data;
  }

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 00:56

Delphi32

Heading for the gates of Eden

Topicstarter
Duidelijk, hier kan ik wat mee. Jammer alleen van GPRS (kan wel, wil ik liever niet), kan ik geen HTTP verbinding opzetten via mn seriële kabel? Of is dat afhankelijk van het type telefoon?

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 01-05 13:23
Delphi32 schreef op 06 november 2004 @ 17:23:
Duidelijk, hier kan ik wat mee. Jammer alleen van GPRS (kan wel, wil ik liever niet), kan ik geen HTTP verbinding opzetten via mn seriële kabel? Of is dat afhankelijk van het type telefoon?
GPRS?? Waarom dat? Bijna alle mobieltjes ondersteunen ook het 'oude' GPS systeem.
Zoek ff bij je provider de instelling hiervoor op (WAP) en surf dan met je mobiel naar de pagina die je wilt (of laat je applicatie een post doen naar die pagina en dan vraagt je mobiel zelf op een verbinding te openen).

GPS kost nog steeds geld, maar je hoeft geen apart abbo te nemen en je belt vaak met een 06-nummer dus misschien gaat het zelfs van je belbundel af...

[ Voor 13% gewijzigd door Postman op 06-11-2004 17:29 ]


Verwijderd

Postman schreef op 06 november 2004 @ 17:28:
[...]

GPRS?? Waarom dat? Bijna alle mobieltjes ondersteunen ook het 'oude' GPS systeem.
Zoek ff bij je provider de instelling hiervoor op (WAP) en surf dan met je mobiel naar de pagina die je wilt (of laat je applicatie een post doen naar die pagina en dan vraagt je mobiel zelf op een verbinding te openen).

GPS kost nog steeds geld, maar je hoeft geen apart abbo te nemen en je belt vaak met een 06-nummer dus misschien gaat het zelfs van je belbundel af...
Ik denk dat hij niet per se GPRS bedoelde. Of je het nou via WAP of GPRS doet, het kost allebei geld :) En volgens mij kan je geen HTTP connectie direct naar je pc laten lopen omdat die HTTP connectie nou eenmaal via 'internet' loopt. De telefoon zal zelf WAP of GPRS opstarten om die connectie te openen. Een HTTP connectie kost dus altijd geld.
Op de site van Sun vond ik wat links over Bluetooth icm MIDlet's. Hier staat wat algemeens over Bluetooth. Dit is een kleine introductie over Bluetooth met MIDlet's. De API van javax.bluetooth staat hier. Er is dus een nieuwe WTK (2.2) en daar zit ook een demo van Bluetooth bij. Deze WTK kan je hier downloaden. Ik raad je aan die eens te bekijken :)

[ Voor 28% gewijzigd door Verwijderd op 07-11-2004 00:25 ]


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 00:56

Delphi32

Heading for the gates of Eden

Topicstarter
Ik begin inderdaad ernstig het gevoel te krijgen dat ik niet onder WAP/GPRS (= inbellen = kost geld) of BlueTooth uitkom. Ik ga maar eens een webservice bouwen en op mn server zetten, en dan toch maar proberen een POST te doen van mijn data.
Dank voor het duidelijk maken van een aantal zaken!

Verwijderd

Bluetooth wordt (nog) door vrijwel geen enkele java telefoon ondersteund vanuit java. Zelfde geldt voor infrarood of SMS. De MIDP 1.0 standaard definieert enkel een HTTP connectie als standaard, de rest is optioneel. Dus tenzij je weet welke telefoons je gebruikers hebben of bereid bent een jaartje te wachten :) kom je eigenlijk niet om HTTP of sockets heen. :(

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 01-05 13:23
Verwijderd schreef op 08 november 2004 @ 00:54:
Bluetooth wordt (nog) door vrijwel geen enkele java telefoon ondersteund vanuit java. Zelfde geldt voor infrarood of SMS. De MIDP 1.0 standaard definieert enkel een HTTP connectie als standaard, de rest is optioneel. Dus tenzij je weet welke telefoons je gebruikers hebben of bereid bent een jaartje te wachten :) kom je eigenlijk niet om HTTP of sockets heen. :(
Sockets is zelfs MIDP 2.0, dus dat is ook geen optie.

MIDP 1.0 bied eigenlijk maar heel weinig mogelijkheden. En veel nieuwe telefoons zijn verbazend nog steeds MIDP 1.0 :(

Zo kun je bijvoorbeeld op 80% van de telefoons met een camera, deze camera niet aanspreken via Java aangezien je hiervoor MIDP 2.0 en de MMAPI nodig hebt, welke alleen op de heel dure telefoons zit.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 00:56

Delphi32

Heading for the gates of Eden

Topicstarter
Hmmm dan heb ik zeker een heel dure telefoon :) Draait nl wel MIDP 2.0, en dat wordt toch de minimale systeemvereiste voor deze applicatie.
MIDP 2.0 heeft trouwens wel een connector class voor seriële verbindingen, maar die heb ik op de foon nog niet aan de praat gekregen. Kan zijn dat ie het toch niet ondersteunt oid.
Enniewee, nogmaals bedankt voor alle info! En for the record: het wordt een Delphi socket service die benaderd wordt vanuit J2ME MIDP 2.0. Om het maar weer even een programmeer-probleem te maken in plaats van een foon-pats-topic ;)
offtopic:
Het is trouwens een ordinaire 7610

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 01-05 13:23
Surf anders ook eens naar http://forum.nokia.com. Je vind daar van alles, van tutorials voor Java & C++ tot emulators voor alle series (40, 60, 80 & 90) en zelfs ook nog losse emulators voor telefoons. Tevens kun je daar ook de SDK's downloaden en dus heb je dan ook de JavaDoc's hiervoor en kun je meteen zien of zaken worden ondersteund of niet.
Pagina: 1