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 küldés a MessageConnection segítségével. @link.forrásfájl {@docRoot}/../data/j2me/src SMSSender.java @link.letöltés {@docRoot}/../data/j2me SMSSender.jar @link.letöltés {@docRoot}/../data/j2me SMSSender.jad @since Java 2 Útikalauz programozóknak 5.0 */ public class SMSSender extends MIDlet implements CommandListener, Runnable { /** a programból való kilépés */ Command exitCommand = new Command("KILÉP", Command.EXIT, 2); /** a címzett számának elfogadása */ Command okCommand = new Command("OK", Command.OK, 1); /** az üzenet elküldése */ Command sendCommand = new Command("KÜLDÉS", Command.OK, 1); /** az üzenet küldés képernyôrôl visszalépés a címzett számának beállításához */ Command backCommand = new Command("VISSZA", Command.BACK, 2); /** az aktuális képernyô */ Display display; /** a legutóbb látogatott képernyô */ Displayable resumeScreen = null; /** a címzett képernyô */ Displayable backScreen; /** az üzenet elküldésérôl értesítô képernyô */ Displayable sendingScreen; /** a címzett száma */ TextBox destinationAddressBox; /** az SMS üzenet szövege */ TextBox messageBox; /** Figyelmeztetô üzenet, ha az SMS küldés közben valami történik */ Alert sendingMessageAlert; /** A címzett URL-je*/ String destinationAddress; /** SMS üzenet küldésekor használt port */ String smsPort="5000"; /** * A MIDlet inicializálása a kezdô képernyô megjelenítése */ public SMSSender() { //ha van SMS port beállítva, akkor azt használjuk if (getAppProperty("SMS-Port")!=null) { smsPort = getAppProperty("SMS-Port"); } display = Display.getDisplay(this); destinationAddressBox = new TextBox("Címzett", null, 256, TextField.PHONENUMBER); destinationAddressBox.addCommand(exitCommand); destinationAddressBox.addCommand(okCommand); destinationAddressBox.setCommandListener(this); sendingMessageAlert = new Alert("SMS", null, null, AlertType.INFO); sendingMessageAlert.setTimeout(5000); sendingMessageAlert.setCommandListener(this); SendingDisplay(smsPort, display, destinationAddressBox, sendingMessageAlert); resumeScreen = destinationAddressBox; } public void SendingDisplay(String smsPort, Display display, Displayable backScreen, Displayable sendingScreen) { this.smsPort = smsPort; this.display = display; this.destinationAddress = null; this.backScreen = backScreen; this.sendingScreen = sendingScreen; messageBox = new TextBox("Uzenet", null, 65535, TextField.ANY); messageBox.addCommand(backCommand); messageBox.addCommand(sendCommand); messageBox.setCommandListener(this); } public void startApp() { display.setCurrent(resumeScreen); } /** * Az éppen aktuális képernyô elmentése */ public void pauseApp() { resumeScreen = display.getCurrent(); } public void destroyApp(boolean unconditional) {} /** * 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(); } else if (c == okCommand) { String address = destinationAddressBox.getString(); String statusMessage = "Az üzenet küldése a " + address + " címre "; sendingMessageAlert.setString(statusMessage); this.destinationAddress = "sms://" + address; display.setCurrent(messageBox); } else if (c == backCommand) { display.setCurrent(backScreen); } else if (c == sendCommand) { display.setCurrent(sendingScreen); new Thread(this).start(); } } catch (Exception e) { System.out.println("Hiba történt. A részletek: "); e.printStackTrace(); } } /** * Üzenet elküldése. A metódus egy külön szálként indítjuk el. */ public void run() { String address = destinationAddress + ":" + smsPort; MessageConnection smsconn = null; try { /** Az üzenet csatorna megnyitása */ smsconn = (MessageConnection)Connector.open(address); TextMessage txtmessage = (TextMessage)smsconn.newMessage(MessageConnection.TEXT_MESSAGE); /** a címzett beállítása */ txtmessage.setAddress(address); /** az SMS üzenet beállítása*/ txtmessage.setPayloadText(messageBox.getString()); /** az üzenet elküldése */ smsconn.send(txtmessage); } catch (Throwable t) { System.out.println("Hiba történt. A részletek: "); t.printStackTrace(); } if (smsconn != null) { try { smsconn.close(); } catch (IOException ioe) { System.out.println("A kapcsolat zárása közben hiba történt. Részletek: "); ioe.printStackTrace(); } } } }