JABWT (JSR-82) Teil 3: RFCOMM Beispiel

Das nachfolgende Codebeispiel zeigt sehr vereinfacht einen Zugriff auf einen GPS Empfänger.

Zunächst wird über die Connector Klasse ein StreamConnection Objekt geholt, mit Hilfe dessen ein InputStream geöffnet wird. Über diesen Stream schickt der GPS Empfänger laufend NMEA-Messages, die die aktuelle Position angeben. Unser Beispielcode interpretiert die ersten ankommenden 256 Bytes als String. Das ist ausreichend um mindestens 1 NMEA-Message komplett zu empfangen. Anschliessend wird die Verbindung im finally Block geschlossen.

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import javax.microedition.io.Connector;
  4. import javax.microedition.io.StreamConnection;
  5. ...
  6.  
  7. StreamConnection conn   = null;
  8. InputStream is          = null;
  9. String message          = null;
  10. try {
  11.         conn = (StreamConnection) Connector.open ("btspp://008049323FAE:1",
  12.                                                   Connector.READ);
  13.         is = conn.openInputStream();
  14.         byte buffer[] = new byte[256];
  15.         is.read(buffer);
  16.         message = new String(buffer);
  17.  
  18. } catch (IOException io) {
  19.         // handle exception
  20. } finally {
  21.         if (conn != null) {
  22.                 try {
  23.                         conn.close();
  24.                 } catch (IOException ignored) {}
  25.         }
  26.  
  27.         if (is != null) {
  28.                 try {
  29.                         is.close();
  30.                 } catch (IOException ignored) {}
  31.         }
  32.  
  33. }

Dieser Code ist natürlich in dieser einfachen Form noch nicht “produktionstauglich”. Z.B. würde man den Bluetooth Zugriff in einem separaten Thread oder besser in einem TimerTask auslagern. Zudem ist im Beispiel die Bluetoothadresse noch hartcodiert. Wie man die Adresse zur Laufzeit findet, seht ihr im nächsten Teil ;)

Bookmark and Share

2 Responses to “JABWT (JSR-82) Teil 3: RFCOMM Beispiel”

  1. derpfaff Says:

    Hallo,

    ich beschäftige mich sei einigen Tagen auch mit J2ME und habe eine Frage zu geöffneten Verbindung:
    Ich habe ein Menü mit mehreren Befehlen, die per Bluetooth übermittelt werden sollen. Ist es ratsam, dass ich die Verbindung zu Beginn öffne (hier: is = conn.openInputStream()) und erst schließe, wenn ich das Programm/MIDlet beende?
    Oder sollte nach jeder noch so kleinen Übertragung die Verbindung geschlossen werden?
    Denn dann habe ich das Prolblem, dass Bluetooth disconnected wird…

    Gruß,
    derPfaff

  2. HeikoMaass Says:

    Hallo Pfaff
    In trakkcor wird die Bluetoothverbindung zum GPS-Empfänger in einem eigenen Thread aufgebaut und nach ein paar hundert Bytes wieder geschlossen. Das funktioniert gut und gewährleistet auch eine grössere Kompatibilität, denn einige Modelle (wie z.B. das betagte Siemens S65) haben Probleme bei länger geöffneten Bluetoothverbindungen. Natürlich kostet das Öffnen und Schliessen einer Bluetoothverbindung Zeit, aber im Fall von trakkcor ist dies absolut vertretbar.

    Gruss

    Heiko

Leave a Reply