Lanciare un applicazione J2ME da remoto con un SMSData di pubblicazione: 10-05-2005 | Versione Italiana | (No English Version) Parole chiave: - How-To - SMS - |
Una delle caratteristiche più interessanti del MIDP2 (acronimo di "Mobile Information Device Platform", ambiente Java per dispositivi come PDA e telefoni) è la possibilità di far eseguire remotamente una midlet (acronimo di "Mobile Information Device", è un'applicazione Java) installata in un cellulare d'ultima generazione o smart phone, tramite l'invio di un particolare sms.
Questi speciali sms oltre a lanciare la midlet, possono essere letti da quest'ultima usando le librerie WMA (Wireless Messaging Api) documentate all'URL: http://java.sun.com/products/wma/ mettendo così a disposizione il body del sms all'applicazione per essere elaborato o più semplicemente fornire dei parametri a quest'ultima.
La feature, che permette il risveglio delle applicazioni J2ME, contenuta nel profilo MIDP2 si chiama Push Registry. Il funzionamento del Push Registry è molto semplice, quando si installa una nuova suite di midlets sul proprio cellulare (che naturalmente deve essere compatibile con il MIDP2) una riga presente nel file descrittore .jad indicherà cosa invocare nel momento in cui un evento particolare interesserà il cellulare. Ad esempio, la seguente riga:
MIDlet-Push-1: sms://:6535, SMSReceive, *
Dice al cellulare che quando riceverà un sms sulla porta 6535 dovrà lanciare la classe SMSReceive. L'asterisco finale indica quali mittenti sono autorizzati a far scattare questo tipo di azione. Con il * si intendono tutti gli indirizzi. Oltre che nel file .jad, scaricato dai terminali quando si adopera un sistema di download OTA (Over-the-Air Provisioning), è possibile effettuare la registrazione dell'appicazione sul proprio terminale direttamente all'interno dell'applicazione Java. Praticamente all'avvio della midlet, questa per prima cosa verifica se è già registrata, in caso contrario, dopo aver chiesto conferma all'utente, provvede alla registrazione.
Per testare il funzionamento della feature Push Registry, di seguito è presente il sorgente Java di una semplice midlet, capace di registrarsi da sola, avviarsi alla ricezione di un sms WAP PUSH sulla porta 5000, leggere il contenuto di quest'ultimo e visualizzarlo.
import javax.microedition.midlet.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import javax.wireless.messaging.*; import java.io.IOException;
/*************************************************** Esempio di MIDlet che mostra il contenuto letto da un SMS di tipo wap push
Dev By Daniele De Santis ****************************************************/ public class SMS_PUSH_TEST extends MIDlet implements CommandListener, Runnable, MessageListener {
private Display display; private Form form_inizio; private Command cmExit; private Command cmAbout;
String smsPort = "50000"; String smsConnectionStr = "sms://:" + smsPort; MessageConnection smsConn; Thread threadID;
//COSTRUTTORE public SMS_PUSH_TEST() { display = Display.getDisplay(this); cmExit = new Command("Exit", Command.EXIT, 1); //CREA I COMANDI cmAbout = new Command("About", Command.SCREEN, 1); form_inizio = new Form("SMS PUSH TEST"); //Crea un nuovo form e imposta il titolo form_inizio.addCommand(cmExit); //Inserisce i comandi form_inizio.addCommand(cmAbout); form_inizio.setCommandListener(this); display.setCurrent(form_inizio); //Setta il Form di partenza }
//Eseguita all'avvio dell'aplicazione public void startApp (){ String midletClassName = this.getClass().getName(); String filter = "*"; if (smsConn == null) { try { smsConn = (MessageConnection) Connector.open(smsConnectionStr); smsConn.setMessageListener(this); } catch (IOException ioe) { show_alert ("Errore", 1, 3000, form_inizio); } } //Vrifica se l'applicazione è correttamente registrata if (!checkRegistered()){ try { PushRegistry.registerConnection (smsConnectionStr, midletClassName, filter); } catch ( ClassNotFoundException cnf ) { show_alert ("Classe Pushregistry non disponibile su questo cellulare", 1, 3000, form_inizio); } catch (IOException ioe) { show_alert ("Applicazione già registrata", 1, 3000, form_inizio); } String[] connections = PushRegistry.listConnections(true); }
threadID = new Thread(this); threadID.start();
form_inizio.append("In ascolto sulla porta " + smsPort + " "); } //Eseguita alla chiusura dell'aplicazione public void destroyApp(boolean unconditional) { threadID = null; if (smsConn != null) { try { smsConn.close(); } catch (IOException e) { } } }
public void pauseApp() {} //Eseguita alla messa in pausa dell'aplicazione
//Notifica quando viene ricevuto un messaggio public void notifyIncomingMessage(MessageConnection conn) { if (threadID == null) { threadID = new Thread(this); threadID.start(); } } //Gestisce i comandi public void commandAction(Command command, Displayable displayable){ if (command == cmExit){ //PRESSIONE TASTO EXIT destroyApp(false); notifyDestroyed(); } else if (command == cmAbout){ //Mostra l'Alert About per 3 Sec show_alert ("By DeSantiX.iT http://www.desantix.it/", 2, 3000, form_inizio); } }
//Verifica se l'applicazione è già registrata private boolean checkRegistered() { String[] connections = PushRegistry.listConnections(false); for (int i = 0; i < connections.length; i++) { if (connections[i].equals(smsConnectionStr)) return true; //Applicazione registra correttamente } return false; //Registrazione fallita }
//Visualizza i messaggi d'errore public void show_alert (String Message, int Type, int TimeOut, Form Form){ String title; AlertType alertType; switch (Type) { default: case 0: //CONFERMA title = "Conferma"; alertType = AlertType.CONFIRMATION; break; case 1: //ERRORE title = "Attenzione"; alertType = AlertType.ERROR; break; case 2: //INFO title = "Info"; alertType = AlertType.INFO; break; } Alert alert = new Alert(title, Message, null, alertType); alert.setTimeout(TimeOut); display.setCurrent(alert, Form); }
//Thread per la lettura del SMS public void run() { String senderNumber; String smsTextMesg; Message msg; try { msg = smsConn.receive(); if (msg != null) { senderNumber = msg.getAddress(); form_inizio.append("SMS da: " + senderNumber + " "); //Estrae il testo del SMS if (msg instanceof TextMessage) { smsTextMesg = ((TextMessage)msg).getPayloadText(); } else { StringBuffer buf = new StringBuffer(); byte[] data = ((BinaryMessage)msg).getPayloadData(); for (int i = 0; i < data.length; i++) { int intData = (int)data[i] & 0xFF; if (intData < 0x10) { //Se trova uno buf.append("0"); //Appende una terminazione di stringa } buf.append(Integer.toHexString(intData)); buf.append(' '); } smsTextMesg = buf.toString(); //body dell'sms! } //Visualizza il messaggio sul form form_inizio.append("Messaggio: " + smsTextMesg + " "); } } catch (IOException e) {} } }
Per creare un pacchetto jar da caricare sul proprio cellulare o distribuire, è necessario procedere come segue:
- Scaricare dal sito della SUN il took WTK 2.2, reperibile gratuitamente all'url: http://java.sun.com/products/j2mewtoolkit/download-2_2.html.
Per far funzionare WTK è necessario aver installato sul proprio sistema Java 2 SDK. Ambiente, quest'ultimo, scaricabile, sempre gratuitamente, dall'url: http://java.sun.com/j2se/downloads/index.html.
- Copiare il sorgente sopra riportato nel proprio editor di testo (Notepad, Ultraedit, Vim ecc) e salvare il nuovo file con nome SMS_PUSH_TEST.java (in Java è fondamentale dare come nome del file quello dato alla Classe principale).
- Aprire il tool WTK e creare un nuovo progetto cliccando su File -> New Project, e impostare come :
Project Name SMS_PUSH_TEST MIDlet Class Name SMS_PUSH_TEST successivamente cliccare su Create Project.
- Copiare il file SMS_PUSH_TEST.java nella directory C: - Programmi - WTK22 -apps -SMS_PUSH_TEST
- Da WTK possiamo:
- compilare il progetto cliccando su Build - eseguire il progetto cliccando su Run (si aprirà un emulatore di terminale) - crare un pacchetto jar cliccando su: Project -> Package -> Create Package . Terminato il processo nella directory C: -Programmi - WTK22 - apps -SMS_PUSH_TEST -bin troveremo il file SMS_PUSH_TEST.jar da caricare sul nostro cellulare.
Per trasferire jar sul terminale, è possibile usare la connessione: IrDA, Bluetooth oppure il cavetto dati; dipende dalla dotazione del proprio modello.
Terminata l'installazione sul cellulare, cercando tra le applicazioni Java (la posizione cambia a seconda del modello), troveremo un icona come quella riportata nello screenshot che segue:
Lanciandola per la prima volta, compare una messagebox che ci chiede l'autorizzazione ad impostare come avviabile in automatico la midlet. Rispondenddo affermativamente alla domanda, possiamo anche chiudere l'applicazione.
Per creare sms WAP PUSH ed inviarli, è possibile usare SMS Machine / WEB prodotta da Area SX s.r.l.
SMS Machine / WEB è una potente sistema in grado di ricevere ed inviare SMS da uno o più numeri SIM di qualsiasi operatore telefonico su rete GSM. La documentazione completa del prodotto è disponibile all'URL: http://www.areasx.com/index.php?D=1&page=articoli.php&id=1500
Grazie alla comoda interfaccia web, è possibile inviare un sms PUSH WAP con pochi e semplici passaggi.
Dopo essersi loggati, nel menù di destra, cliccare su "Invia SMS" (1), nel form che appare, è necessario compilare: il campo "Numero di destinazione" (2), che corrispone al numero di telofono del cellulare su cui è installata la midlet; la text area (3), che conterrà il body del sms e il campo "Porta per SMS WAP PUSH" (4). Quest'ultimo, normalmente con valore 0 per l'invio di sms tradizionali, va settato sul valore 50000. Numero di porta questo associato, sullo smart phone alla midlet SMS_PUSH_TEST. Il parametro che specifica la porta è impostato nella varibile smsPort, presente nel sorgente Java precentemente visto. Riempiti tutti i campi dell'interfaccia WEB, bisogna cliccare sul tasto "Invia il messaggio" (5) e attendere qualche secondo, per vedere partire in automatico, sul proprio cellulare, la midlet SMS_PUSH_TEST e mostare oltre, al numero gsm del smsmachine, il testo del messaggio invito.
Oltre all'interfaccia web, per inviare sms attraverso SMS Machine / WEB, è possibile effettuare una query tipo INSERT direttamente nel database MySQL, nucleo centrale di quest'ultima, da un'applicazione esterna scritta su misura e nel linguaggio che più si preferisce.
L'esempio mostrato è la base per la realizzazioni di progetti più o meno complessi ed articolati, che mettono in comunicazione il mondo IT, attraverso SMS Machine / WEB, con quello Mobile grazie alla MIDP2.Sfruttando la tecnologia Push Registry, sempre più diffusa negli smart phone odierni, è possibile implementare ai comuni sms funzionionalità avanzate che permettono d'interagire con le applicazioni presenti sui propri cellulari.
Sorgente JAVA SMS_PUSH_TEST_J2ME.zip
Segnala questo articolo:
Parole chiave: - How-To - SMS -
|