Area SX srl - Informatica e Microelettronica
0
Torna a: Home Page Soluzioni Linea SMS Machine Altri apparati SMS Machine Lanciare un applicazione J2ME da remoto con un SMS

Lanciare un applicazione J2ME da remoto con un SMS

Data di pubblicazione: 10-05-2005 | Versione Italiana  | (No English Version)The English version of this article does not exists
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 -

Data di pubblicazione: 10-05-2005Hits: 41563
I marchi citati sono propriet� dei titolari dei relativi diritti. Le caratteristiche tecniche e i prezzi riportati sono indicativi e soggetti a variazioni senza preavviso. Le foto non hanno valore contrattuale. Nonostante accurate verifiche, il presente documento pu� contenere prezzi o specifiche errati. Area SX si scusa in anticipo e si impegna ad evitare tali imprecisioni.

 Area SX store
In questa sezione puoi ordinare direttamente i prodotti descritti in questo articolo
SMS.WEB;MINI.SMS.WEB
Tutti i prezzi indicati sono espressi in Euro con IVA e spese di trasporto escluse. I prezzi si riferiscono al singolo pezzo
DescrizioneCodicePrezzo
Per maggiori informazioniSMS Machine
Le mini SMS Machine è un sistema composto da una Linux Box con prestinstallato il software SMS Machine Web in grado di ricevere e trasmettere SMS completo di applicativo WEB per la lettura, l'archiviazione e l'elaborazione degli SMS ricevuti tramite browser in locale o su rete internet/intranet.
Il pacchetto comprende:
  • Una Linux Box con preinstallato il software SMSMACHINE WEB
  • Antenna GSM/UMTS con connettore SMA Maschio
  • Alimentatore a parete 220V
  • CD con il Manuale di installazione



Prodotto compliant RoHs
SMS.WEB€ 399
Per maggiori informazioniPer maggiori informazioni

Rivenditori Social Contatti Condizioni
Area SX s.r.l
Via Stefano Longanesi 25
00146 Roma

Tel: +39.06.99.33.02.57
Fax: +39.06.62.20.27.85
P.IVA 06491151004
Condizioni di vendita
Procedura di rientro in garanzia
Condizioni per i rivenditori