Per testare la ricezione si utilizza ancora la WMA console, questa volta come mittente del messaggio. Si preme il pulsante "Send Sms" in alto a sx:
Se il nostro emulatore è identificato dal numero +5550001 (che compare in alto a sx una volta lanciato), selezioniamolo nella schermata che compare (campo di testo "To Selected Clients"); nel campo "Port" inseriamo 7500 e scriviamo il testo del messaggio nello spazio sottostante (identificato dall'etichetta "Message"); premiamo infine il pulsante "Send" in basso. Nella console appare il tracciamento relativo al messaggio inviato, mentre nell'emulatore possiamo far comparire un form dove riportiamo il mittente del messaggio e il testo del messaggio.
La seconda modalità di ricezione dei messaggi (che risulta anche più semplice) è possibile creando una classe che implementa l'interfaccia MessageListener
(potrebbe essere anche la stessa MIDlet). La classe va quindi settata come MessageListener
di una determinata connessione. Nell'esempio che segue supponiamo che l'operazione venga fatta nella stessa classe che implementa l'interfaccia (viene quindi passato this come parametro):
MessageConnection mc = (MessageConnection) Connector.open("sms://+7500");
mc.setMessageListener(this);
Alla ricezione di un messaggio viene invocato, dalla piattaforma J2ME del terminale, il metodo public void notifyIncomingMessage
(MessageConnection conn
) che va dunque implementato per gestire le informazioni contenute nel messaggio.
Quando si effettua l'uscita dalla midlet è opportuno liberare il listener e chiudere la MessageConnection
:
Listato 35. Uscita dalla Midlet
protected void destroyApp(boolean unconditional)
{
try {
if (conn != null) {
conn.setMessageListener(null);
conn.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
}
Il test di questa modalità è analogo al caso precedente di ricezione tramite il thread. Se si cerca di aprire una connessione SMS su una porta già utilizzata, si ottiene una IOException.
Verificare il supporto delle WMA
È possibile scoprire a runtime se un terminale supporta le WMA tramite la seguente istruzione:
Class.forName("javax.wireless.messaging.Message");
Se l'istruzione non rilancia eccezione, significa che le WMA sono supportate.
Ricevere messaggi CBS
Oltre ai messaggi SMS, nell'implementazione delle WMA, è possibile ricevere anche i messaggi CBS che sono inviati direttamente dalle stazioni base GSM e contengono informazioni relative alla cella nella quale il nostro telefono si trova. Questi messaggi sono solamente ricevibili e non inviabili (se si prova a fare una send()
di un messaggio cbs si ottiene un'eccezione).
La connessione viene aperta in maniera analoga al caso SMS ma viene utilizzato il protocollo cbs:// invece di sms://.
Nella WMA Console è possibile simulare l'invio di messaggi CBS premendo il pulsante "Send CBS".