SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Android @Tulug
Lezione 3
By IvanGualandri
Twitter: @Italialinux
Agenda
● Invio e ricezione SMS
● Broadcast Receiver
● Intent
Le applicazioni di esempio relative a
questa lezione le troverete su github:
https://github.com/inuyasha82/ItalialinuxExample/tree/master/LezioniAndroid
Riassunto puntate precedenti
● Abbiamo visto come gestire i click di
un bottone, facendo implementare
alla nostra activity l'interfaccia
OnClickListener, e implementando il
metodo onClick(View v),
associandolo al bottone mediante il
metodo setOnClickListener(this)
Riassunto puntate precedenti/2
● Abbiamo visto creare un elemento
via codice e aggiungerlo alla gui. I
passi sono:
○ Creare l'oggetto che vogliamo
aggiungere
○ Ottenere un istanza del layout con
findViewById
○ Aggiungerlo nel layout con il
metodo addView
Ricevere e inviare sms
Layout dell'applicazione
Prima di tutto
disegnamo un layout
adeguato per spedire
sms. Dovreste gia
saperlo fare :)
Partiremo dall'invio
sms che dei due è il
più semplice
Spedire SMS - Intro
Android fornisce la maggior parte delle
funzionalitá del telefono mediante dei Manager.
Alcuni esmpi:
● SMSManager - Gestione SMS
● AudioManager - Gestione Audio
● BluetoothManager - Gestione Bluetooth.
● etc. etc.
Spedire SMS - Intro/2
Ovviamente per l'accesso a queste funzionalitá
ci servono gli adeguati permessi. Da inserire
nel Manifest dell'applicazione. Nel nostro caso
serviranno:
● SEND_SMS
● RECEIVE_SMS
<uses-permission android:name="android.
permission.SEND_SMS" />
<uses-permission android:name="android.
permission.RECEIVE_SMS" />
Spedire SMS - Intro/3
Vediamo il workflow della nostra applicazione
(anche se abbastanza intuitivo):
1. L'utente inserisce il messaggio
2. L'utente inserisce il numero di telefono
3. Preme il pulstante Invia per spedire l'sms.
L'invio verrà effettutato quindi sará gestito
dall'evento onClick del bottone.
Ma questo sapete farlo (se avete seguito la
lazione 2)...
Spedire SMS - Intro/3
Quindi l'evento onClick deve leggere il testo
contenuto nelle due caselle di testo (messaggio
e numero) e inviarlo attraverso l'SmsManager.
Leggiamo il testo inserito nelle due EditText:
EditText numberinput = (EditText) findViewById(R.id.number) ;
EditText messageinput = (EditText) findViewById(R.id.message) ;
String phoneNumber = numberinput.getText();
String messageText = messageInput.getText();
Spedire SMS - SMSManager
Come accennato l'SmsManager è una classe
che ci permette di gestire gli aspetti dell'invio di
un sms direttamente dal nostro programma.
Essendo un servizio offerto dal telefono, non
dobbiamo crearne uno nuovo, ma ottenere
quello esistente.
SmsManager manager = SmsManager.getDefault();
Spedire SMS - SMSManager/2
Per spedire il messaggio:
public void sendTextMessage (String destinationAddress, String
scAddress, String text, PendingIntent sentIntent, PendingIntent
deliveryIntent)
● destinationAddress è il numero di telefono del
destinatario
● text è il messaggio.
● scAddress è il numero del service center (se null si usa
quello di default)
● sentIntent e deliveryIntent sono utili per tracciare la
spedizione del messaggio (invio in corso, spedito)
Spedire SMS - SMSManager/3
Nel nostro caso vogliamo solo spedirlo, senza
tracciamento.
Quindi avremo più o meno:
smsManager.sendTextMessage(sendTo, null, myMessage, null,
null);
Spedire SMS - Come testarlo?
Possiamo usare l'emulatore.
Il numero di telefono si trova nella barra del
titolo (si tratta della porta del debugger). Quindi
apriamo due emulatori su uno girerá la nostra
app e l'altro riceverá i messaggi.
Ricevere SMS - Introduzione
Per ricevere un messaggio dobbiamo far sì che la nostra
applicazione sia informata di quando arriva un SMS.
Questo lo facciamo introducendo un nuovo Oggetto:
● il BroadCastReceiver
Come la Activity anche questa è una classe astratta, quindi
creeremo una classe che la estende.
Serve per ricevere dati dalle Intent che vengono generate.
Ricevere SMS - Nel manifest
Un broadcast receiver, al pari di una activity va registrato
nel manifest, non come activity ma come receiver:
<receiver android:name=".SMSReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.provider.Telephony.
SMS_RECEIVED" />
</intent-filter>
</receiver>
Dove in android:name metteremo il nome della classe
BroadCastReceiver.
Ricevere SMS - Intent-filter
<intent-filter>
<action android:name="android.provider.Telephony.
SMS_RECEIVED" />
</intent-filter>
Questo pezzetto di codice informa il sistema che questo
receiver vuole essere "svegliato" solo se si verifica l'action
SMS_RECEIVED.
Le action come dice la parola stessa sono delle azioni che
vengono sollevate dal sistema al verificarsi di alcuni eventi.
Ricevere SMS - Creiamo la classe
Andiamo nel package principale e creiamo la classe
SMSReceiver.
public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
....
}
}
L'oggetto BroadCastReceiver richiede, per poter essere
chiamato al verificarsi delle action definite,
l'implementazione del metodo onReceive:
Ricevere SMS - Ma dove sta l'sms?
@Override
public void onReceive(Context context, Intent intent) {
....
}
A giudicare dalla firma di questo metodo non si vede alcun
SMS al suo interno! :)
Invece non è così, si trova come extra nell'intent.
Le Intent sono una definizione astratta dell'azione che si
vuole eseguire (l'action appunto).
Ricevere un sms genera una Intent RECEIVE_SMS che la
nostra app intercetterà.
Ricevere SMS - Prendere l'sms/2
Per ottenere l'insieme degli extra di una Intent, possiamo
usare il metodo getExtras, che ci torna un oggetto di tipo
Bundle (un semplice contenitore di variabili).
Bundle bundle = intent.getExtras();
Ogni variabile salvata nel bundle è identificata da una
chiave, e quella del messaggio è chiamata "pdus" quindi
dal bundle prendiamo l'oggetto pdus:
Object[] pdus = (Object[])bundle.get("pdus");
Ricevere SMS - Prendere l'sms/3
Object[] pdus = (Object[])bundle.get("pdus");
Ma ancora non basta! Abbiamo un semplice Object
generico, dobbiamo poterlo leggere in qualche modo
L'object[] pdus contiene il o i messaggi ricevuti dal
telefonino.
Per poterli leggere comodamente dobbiamo convertirli in
un oggetto più specifico: SmsMessage.
Ricevere SMS - Prendere l'sms/3
Quindi creiamo una vettore di SmsMessage della stessa
dimensione del vettore pdus:
SmsMessage[] messages = new SmsMessage[pdus.length];
Convertiamo quindi ogni elemento di pdus in SmsMessage,
utilizzando il metodo statico createFromPdu:
for(int i = 0; i < pdus.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
Ricevere SMS - Leggere l'sms
Ora possiamo leggere tranquillamente il testo del
messaggio, e in questo esempio mostrarlo su una notifica
Toast:
for(SmsMessage message: messages){
String messagestr = message.getMessageBody();
String sender = message.getOriginatingAddress();
Toast.makeText(context, sender + ": " + messagestr, Toast.
LENGTH_SHORT).show();
}
Dove getMessageBody ritorna il testo del messaggio.
Mentre getOriginatingAddress torna il mittente del
messaggio.
Ricevere SMS - Risultato
Fine...
Grazie per l'attenzione
Ivan

Mais conteúdo relacionado

Mais procurados

Qt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt DesignerQt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt DesignerPaolo Sereno
 
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtQt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtPaolo Sereno
 
C(99) gtk 01 - introduzione e finestre
C(99) gtk   01 - introduzione e finestreC(99) gtk   01 - introduzione e finestre
C(99) gtk 01 - introduzione e finestreMaurizio Carboni
 
C(99) gtk 03 - le immagini
C(99) gtk   03 - le immaginiC(99) gtk   03 - le immagini
C(99) gtk 03 - le immaginiMaurizio Carboni
 
C(99) gtk 04 - label,button e entry
C(99) gtk   04 - label,button e entryC(99) gtk   04 - label,button e entry
C(99) gtk 04 - label,button e entryMaurizio Carboni
 
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerQt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerPaolo Sereno
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
 
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiQt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a JavascriptRiccardo Piccioni
 
Javascript Camp - Listener Per Eventi
Javascript Camp - Listener Per EventiJavascript Camp - Listener Per Eventi
Javascript Camp - Listener Per EventiSimone Gentili
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 reckdekda
 

Mais procurados (14)

Qt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt DesignerQt Lezione5: Layout management e Qt Designer
Qt Lezione5: Layout management e Qt Designer
 
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni QtQt Lezione0: uso del C++ per scrivere applicazioni Qt
Qt Lezione0: uso del C++ per scrivere applicazioni Qt
 
C(99) gtk 01 - introduzione e finestre
C(99) gtk   01 - introduzione e finestreC(99) gtk   01 - introduzione e finestre
C(99) gtk 01 - introduzione e finestre
 
C(99) gtk 03 - le immagini
C(99) gtk   03 - le immaginiC(99) gtk   03 - le immagini
C(99) gtk 03 - le immagini
 
C(99) gtk 04 - label,button e entry
C(99) gtk   04 - label,button e entryC(99) gtk   04 - label,button e entry
C(99) gtk 04 - label,button e entry
 
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt DesignerQt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
Qt Lezione4 Parte2: creare un custom widget plugin per Qt Designer
 
Qt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immaginiQt Lezione3: un visualizzatore di immagini
Qt Lezione3: un visualizzatore di immagini
 
Lezione Android prima parte
Lezione Android prima parteLezione Android prima parte
Lezione Android prima parte
 
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiQt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passi
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Javascript Camp - Listener Per Eventi
Javascript Camp - Listener Per EventiJavascript Camp - Listener Per Eventi
Javascript Camp - Listener Per Eventi
 
Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Chakra 2012.9 rec
Chakra 2012.9 recChakra 2012.9 rec
Chakra 2012.9 rec
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 

Semelhante a Introduzione alla programmazione android - Android@tulug lezione 3

Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
Notification services su android
Notification services su androidNotification services su android
Notification services su androidasterixms
 
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...Aruba S.p.A.
 
Droidcon Italy 2014 on Train - Codelab step
Droidcon Italy 2014 on Train - Codelab stepDroidcon Italy 2014 on Train - Codelab step
Droidcon Italy 2014 on Train - Codelab stepGiuseppe Cerratti
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitalelostrettodigitale
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROIDPaolo Tosato
 
Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...
Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...
Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...Aruba S.p.A.
 

Semelhante a Introduzione alla programmazione android - Android@tulug lezione 3 (10)

Lezione android esercizi
Lezione android esercizi Lezione android esercizi
Lezione android esercizi
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Android Overview
Android OverviewAndroid Overview
Android Overview
 
Notification services su android
Notification services su androidNotification services su android
Notification services su android
 
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...Con Aruba, a lezione di cloud  - #lezione 27: 'Private Cloud e mail server az...
Con Aruba, a lezione di cloud - #lezione 27: 'Private Cloud e mail server az...
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Droidcon Italy 2014 on Train - Codelab step
Droidcon Italy 2014 on Train - Codelab stepDroidcon Italy 2014 on Train - Codelab step
Droidcon Italy 2014 on Train - Codelab step
 
MOBILE APPS con ANDROID - Lo Stretto Digitale
MOBILE APPS con ANDROID  - Lo Stretto DigitaleMOBILE APPS con ANDROID  - Lo Stretto Digitale
MOBILE APPS con ANDROID - Lo Stretto Digitale
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...
Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...
Con Aruba, a lezione di cloud #lezione 14 - parte 2: Cloud Monitoring, un uti...
 

Introduzione alla programmazione android - Android@tulug lezione 3

  • 1. Android @Tulug Lezione 3 By IvanGualandri Twitter: @Italialinux
  • 2. Agenda ● Invio e ricezione SMS ● Broadcast Receiver ● Intent Le applicazioni di esempio relative a questa lezione le troverete su github: https://github.com/inuyasha82/ItalialinuxExample/tree/master/LezioniAndroid
  • 3. Riassunto puntate precedenti ● Abbiamo visto come gestire i click di un bottone, facendo implementare alla nostra activity l'interfaccia OnClickListener, e implementando il metodo onClick(View v), associandolo al bottone mediante il metodo setOnClickListener(this)
  • 4. Riassunto puntate precedenti/2 ● Abbiamo visto creare un elemento via codice e aggiungerlo alla gui. I passi sono: ○ Creare l'oggetto che vogliamo aggiungere ○ Ottenere un istanza del layout con findViewById ○ Aggiungerlo nel layout con il metodo addView
  • 6. Layout dell'applicazione Prima di tutto disegnamo un layout adeguato per spedire sms. Dovreste gia saperlo fare :) Partiremo dall'invio sms che dei due è il più semplice
  • 7. Spedire SMS - Intro Android fornisce la maggior parte delle funzionalitá del telefono mediante dei Manager. Alcuni esmpi: ● SMSManager - Gestione SMS ● AudioManager - Gestione Audio ● BluetoothManager - Gestione Bluetooth. ● etc. etc.
  • 8. Spedire SMS - Intro/2 Ovviamente per l'accesso a queste funzionalitá ci servono gli adeguati permessi. Da inserire nel Manifest dell'applicazione. Nel nostro caso serviranno: ● SEND_SMS ● RECEIVE_SMS <uses-permission android:name="android. permission.SEND_SMS" /> <uses-permission android:name="android. permission.RECEIVE_SMS" />
  • 9. Spedire SMS - Intro/3 Vediamo il workflow della nostra applicazione (anche se abbastanza intuitivo): 1. L'utente inserisce il messaggio 2. L'utente inserisce il numero di telefono 3. Preme il pulstante Invia per spedire l'sms. L'invio verrà effettutato quindi sará gestito dall'evento onClick del bottone. Ma questo sapete farlo (se avete seguito la lazione 2)...
  • 10. Spedire SMS - Intro/3 Quindi l'evento onClick deve leggere il testo contenuto nelle due caselle di testo (messaggio e numero) e inviarlo attraverso l'SmsManager. Leggiamo il testo inserito nelle due EditText: EditText numberinput = (EditText) findViewById(R.id.number) ; EditText messageinput = (EditText) findViewById(R.id.message) ; String phoneNumber = numberinput.getText(); String messageText = messageInput.getText();
  • 11. Spedire SMS - SMSManager Come accennato l'SmsManager è una classe che ci permette di gestire gli aspetti dell'invio di un sms direttamente dal nostro programma. Essendo un servizio offerto dal telefono, non dobbiamo crearne uno nuovo, ma ottenere quello esistente. SmsManager manager = SmsManager.getDefault();
  • 12. Spedire SMS - SMSManager/2 Per spedire il messaggio: public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) ● destinationAddress è il numero di telefono del destinatario ● text è il messaggio. ● scAddress è il numero del service center (se null si usa quello di default) ● sentIntent e deliveryIntent sono utili per tracciare la spedizione del messaggio (invio in corso, spedito)
  • 13. Spedire SMS - SMSManager/3 Nel nostro caso vogliamo solo spedirlo, senza tracciamento. Quindi avremo più o meno: smsManager.sendTextMessage(sendTo, null, myMessage, null, null);
  • 14. Spedire SMS - Come testarlo? Possiamo usare l'emulatore. Il numero di telefono si trova nella barra del titolo (si tratta della porta del debugger). Quindi apriamo due emulatori su uno girerá la nostra app e l'altro riceverá i messaggi.
  • 15. Ricevere SMS - Introduzione Per ricevere un messaggio dobbiamo far sì che la nostra applicazione sia informata di quando arriva un SMS. Questo lo facciamo introducendo un nuovo Oggetto: ● il BroadCastReceiver Come la Activity anche questa è una classe astratta, quindi creeremo una classe che la estende. Serve per ricevere dati dalle Intent che vengono generate.
  • 16. Ricevere SMS - Nel manifest Un broadcast receiver, al pari di una activity va registrato nel manifest, non come activity ma come receiver: <receiver android:name=".SMSReceiver" android:enabled="true"> <intent-filter> <action android:name="android.provider.Telephony. SMS_RECEIVED" /> </intent-filter> </receiver> Dove in android:name metteremo il nome della classe BroadCastReceiver.
  • 17. Ricevere SMS - Intent-filter <intent-filter> <action android:name="android.provider.Telephony. SMS_RECEIVED" /> </intent-filter> Questo pezzetto di codice informa il sistema che questo receiver vuole essere "svegliato" solo se si verifica l'action SMS_RECEIVED. Le action come dice la parola stessa sono delle azioni che vengono sollevate dal sistema al verificarsi di alcuni eventi.
  • 18. Ricevere SMS - Creiamo la classe Andiamo nel package principale e creiamo la classe SMSReceiver. public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { .... } } L'oggetto BroadCastReceiver richiede, per poter essere chiamato al verificarsi delle action definite, l'implementazione del metodo onReceive:
  • 19. Ricevere SMS - Ma dove sta l'sms? @Override public void onReceive(Context context, Intent intent) { .... } A giudicare dalla firma di questo metodo non si vede alcun SMS al suo interno! :) Invece non è così, si trova come extra nell'intent. Le Intent sono una definizione astratta dell'azione che si vuole eseguire (l'action appunto). Ricevere un sms genera una Intent RECEIVE_SMS che la nostra app intercetterà.
  • 20. Ricevere SMS - Prendere l'sms/2 Per ottenere l'insieme degli extra di una Intent, possiamo usare il metodo getExtras, che ci torna un oggetto di tipo Bundle (un semplice contenitore di variabili). Bundle bundle = intent.getExtras(); Ogni variabile salvata nel bundle è identificata da una chiave, e quella del messaggio è chiamata "pdus" quindi dal bundle prendiamo l'oggetto pdus: Object[] pdus = (Object[])bundle.get("pdus");
  • 21. Ricevere SMS - Prendere l'sms/3 Object[] pdus = (Object[])bundle.get("pdus"); Ma ancora non basta! Abbiamo un semplice Object generico, dobbiamo poterlo leggere in qualche modo L'object[] pdus contiene il o i messaggi ricevuti dal telefonino. Per poterli leggere comodamente dobbiamo convertirli in un oggetto più specifico: SmsMessage.
  • 22. Ricevere SMS - Prendere l'sms/3 Quindi creiamo una vettore di SmsMessage della stessa dimensione del vettore pdus: SmsMessage[] messages = new SmsMessage[pdus.length]; Convertiamo quindi ogni elemento di pdus in SmsMessage, utilizzando il metodo statico createFromPdu: for(int i = 0; i < pdus.length; i++){ messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); }
  • 23. Ricevere SMS - Leggere l'sms Ora possiamo leggere tranquillamente il testo del messaggio, e in questo esempio mostrarlo su una notifica Toast: for(SmsMessage message: messages){ String messagestr = message.getMessageBody(); String sender = message.getOriginatingAddress(); Toast.makeText(context, sender + ": " + messagestr, Toast. LENGTH_SHORT).show(); } Dove getMessageBody ritorna il testo del messaggio. Mentre getOriginatingAddress torna il mittente del messaggio.
  • 24. Ricevere SMS - Risultato