package elte.java2_utikalauz5.j2me; import javax.microedition.midlet.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.wireless.messaging.*; import java.io.IOException; /** Szöveges SMS fogadás a MessageConnection segítségével. @link.forrásfájl {@docRoot}/../data/j2me/src SMSReceiver.java @link.letöltés {@docRoot}/../data/j2me SMSReceiver.jar @link.letöltés {@docRoot}/../data/j2me SMSReceiver.jad @since Java 2 Útikalauz programozóknak 5.0 */ public class SMSReceiver extends MIDlet implements CommandListener, Runnable, MessageListener { /** a programból való kilépés */ Command exitCommand = new Command("KILÉP", Command.EXIT, 2); /** figyelmeztetések megjelenítése*/ Alert content; /** az aktuális képernyô */ Display display; /** az aszinkron hálózat és a felhasználói felület szála */ Thread thread; /** A kezdô kapcsolatok */ //String[] connections; /** a végrehajtás befejezését jelzi*/ boolean done; /** SMS üzenet küldésekor használt port */ String smsPort = "5000"; /** SMS connection*/ MessageConnection smsconn; /** az aktuálisan beolvasott üzenet */ Message msg; /** az SMS üzenet küldôjének címe */ String senderAddress; /** a legutóbb látogatott képernyô */ Displayable resumeScreen = null; /** * A MIDlet inicializálása a kezdô képernyô megjelenítése */ public SMSReceiver() { //ha van SMS port beállítva, akkor azt használjuk if (getAppProperty("SMS-Port")!=null) { smsPort = getAppProperty("SMS-Port"); } display = Display.getDisplay(this); content = new Alert("SMS fogadás"); content.setTimeout(Alert.FOREVER); content.addCommand(exitCommand); content.setCommandListener(this); content.setString("Üzenet fogadása ..."); resumeScreen = content; } /** * Start creates the thread to do the MessageConnection receive * text. * It should return immediately to keep the dispatcher * from hanging. */ public void startApp() { /** SMS connection */ String smsConnection = "sms://:" + smsPort; /** az üzenet connection megnyitása */ if (smsconn == null) { try { smsconn = (MessageConnection) Connector.open(smsConnection); smsconn.setMessageListener(this); } catch (IOException ioe) { ioe.printStackTrace(); } } /** Initialize the text if we were started manually. */ //connections = PushRegistry.listConnections(true); //if (connections == null || connections.length == 0) { // content.setString("SMS üzenetre várakozás ..."); //} done = false; thread = new Thread(this); thread.start(); display.setCurrent(resumeScreen); } /** * Az üzenet megérkezésérôl értesítô metódus * @param conn the connection with messages available */ public void notifyIncomingMessage(MessageConnection conn) { if (thread == null) { done = false; thread = new Thread(this); thread.start(); } } /** Az üzenet beolvasás */ public void run() { /** sms kapcsolat ellenôrzése*/ try { msg = smsconn.receive(); if (msg != null) { senderAddress = msg.getAddress(); content.setTitle("Küldô: " + senderAddress); /** szöveges üzenet fogadás*/ if (msg instanceof TextMessage) { content.setString(((TextMessage)msg).getPayloadText()); } else { StringBuffer buf = new StringBuffer(); byte[] data = ((BinaryMessage)msg).getPayloadData(); for (int i = 0; i < data.length; i++) { buf.append(Integer.toHexString((int) data[i])); buf.append(' '); } content.setString(buf.toString()); } display.setCurrent(content); } } catch (IOException e) { System.out.println("Hiba történt. A részletek: "); e.printStackTrace(); } } /** * Pause signals the thread to stop by clearing the thread field. * If stopped before done with the iterations it will * be restarted from scratch later. */ public void pauseApp() { done = true; thread = null; resumeScreen = display.getCurrent(); } /** * Az alkalmazás bezárásakor mindent el kell takarítani. */ public void destroyApp(boolean unconditional) { done = true; thread = null; if (smsconn != null) { try { smsconn.close(); } catch (IOException e) { System.out.println("Hiba történt. A részletek: "); e.printStackTrace(); } } } /** * A felhasználó által küldött parancsok feldolgozása * @param c parancs * @param s képernyô elem, ami a kérést elküldte */ public void commandAction(Command c, Displayable s) { try { if (c == exitCommand || c == Alert.DISMISS_COMMAND) { destroyApp(false); notifyDestroyed(); } } catch (Exception e) { System.out.println("Hiba történt. A részletek: "); e.printStackTrace(); } } }