Zum Inhalt springen

Java Micro: SMS

Aus Wikibooks

Der Umgang mit SMS wird in J2ME durch die "Wireless Messaging API" umgesetzt, diese hat neben dem versenden und empfangen von Kurznachrichten eine weitere Funktion. Sie bietet die Möglichkeit Cell-Broadcast-Nachrichten zu empfangen, d.h. alle Endgeräte in einer Zelle empfangen eine Nachricht des Providers, dieser Dienst wird aber relativ selten Genutzt. Eine weitere Funktion der SMS, die auch weitestgehend unbekannt ist, ist die binäre SMS. Die "Wireless Messaging API" ist ein von der Klasse javax.microedition.io.Connection abgeleitetes Interface mit dem Namen MessageConnection.

hier ein Beispiel für das Versenden einer SMS:

import javax.microedition.io.Connector;
import javax.wireless.messaging.*;
...
private static void sendSMS(String telNr, String text) throws IOException{
     if(text.length() > 160) {
           // Text zu lang ....
           throw new IllegalArgumentException("zu viele Zeichen");
     }
     MessageConnection connection = null;
     try{
           String address = "sms://" + telNr;  
           // Telefonnummer wird im URL-Format sms://+491744301340 angegeben
           connection = (MessageConnection)Connector.open(address);
           TextMessage message = (TextMessage)connection.newMessage(MessageConnection.TEXT_MESSAGE);
           message.setPazloadText(text);  // setzt SMS Inhalt
           connection.send(message);  // Message verschicken
     } finally {
           if(connection != null) {
                 connection.close;  //  Verbindung schließen
           }
     }
}

Die SMS-URL sorgt dafür den Text(Payload) an das richtige Gerät und dort an die richtige Applikation bzw. den Benutzer zu übermitteln. So könnte die SMS-URL an eine Applikation wie folgt aussehen: "sms://+491742343252:33400.

hier ein Beispiel für das Versenden einer SMS:

import javax.microedition.io.Connector;
import javax.wireless.messaging.*;
     // eingehende SMS auf Port 33400 empfangen     
     connection = (MessageConnection)Connector.open("sms://:33400"); 
     // auf ankommende SMS warten
     Message message = connection.receive();
     try{      
           if(message instanceof TextMessage) {  // wenn Textnachricht
                 String sender = message.getAddress(); // lese Absenderadresse aus 
                 String text = ((TextMessage)message).getPayloadText();  //  lese Inhalt aus 
           } else if(message instance of BinaryMessage) {  // Binärnachricht
                 String sender = message.getAddress();  // lese Absenderadresse aus           
                 byte[] data = ((BinarayMessage)message).getPayloadData();  //  lese Inhalt aus
                 ...
           }
     } finally {
           if(connection != null) {
                 connection.close();  //  Verbindung schließen
           }
     }
}

Die Funktion receive() in MessageConnection blockiert den Ablauf des Codes solange bis eine Nachricht empfangen oder die Verbindung durch einen anderen Thread geschlossen wird.