Autore Topic: Intercettare l'arrivo di un sms  (Letto 6745 volte)

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Intercettare l'arrivo di un sms
« il: 17 Agosto 2010, 13:30:41 CEST »
+4
Ecco un semplice snippet per intercettare l'arrivo di un sms e agire di conseguenza.

Codice java da inserire nel nostro broadcast receiver:
Codice (Java): [Seleziona]
@Override
    public void onReceive(Context context, Intent intent) {

            if (intent.getAction().equals(ACTION_RECEIVE_SMS)){  
               
            Bundle bundle = intent.getExtras();
                Object messages[] = (Object[]) bundle.get("pdus");
           
            SmsMessage smsMessage[] = new SmsMessage[messages.length];
           
            for (int n = 0; n < messages.length; n++)
                smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); //Creo l'array dei messaggi

                smsMessage[0].getMessageBody(); //Ottengo il testo dell'ultimo messaggio
                smsMessage[0].getOriginatingAddress(); //Ottengo il numero del mittente

                        //Altre operazioni
        }
}

Ed ovviamente per rendere possibile tutto ció é necessario richiedere il permesso nel manifest:
Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
e indicare che il nostro receiver intercetta anche gli sms:
Codice (XML): [Seleziona]
        <receiver android:name=".ReceiverX" android:label="@string/receiver_name">
            <intent-filter>
               <action android:name="android.provider.Telephony.SMS_RECEIVED" />
               ..
            </intent-filter>
        </receiver>
« Ultima modifica: 17 Agosto 2010, 15:15:58 CEST da blackgin »
Postate il LogCat LogCat LogCat LogCat LogCat

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Intercettare l'arrivo di un sms
« Risposta #1 il: 17 Agosto 2010, 15:17:36 CEST »
0
Avevo scritto Activity e non BroadcastReceiver. Qlimax me l'ha fatto notare e ho corretto.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline PreStiige

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Motorola Milestone.
  • Sistema operativo:
    Snow Leopard 10.6
Re:Intercettare l'arrivo di un sms
« Risposta #2 il: 01 Settembre 2010, 01:32:47 CEST »
0
veramente bellissimo snippet, grazie blackgin
"You think, I dev" [.cit PreStiige]

;)

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Intercettare l'arrivo di un sms
« Risposta #3 il: 21 Settembre 2010, 14:14:38 CEST »
0
ottimo snippet.
sapete consigliare anche il modo milgiore per evitare la notifica dell'sms intercettato?
grazie mille.

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Intercettare l'arrivo di un sms
« Risposta #4 il: 21 Settembre 2010, 14:29:22 CEST »
0
ottimo snippet.
sapete consigliare anche il modo milgiore per evitare la notifica dell'sms intercettato?
grazie mille.
Nel senso di evitare che altre app capiscano che é arrivato un messaggio? Beh dubito fortemente che si possa eliminare un evento del sistema.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Intercettare l'arrivo di un sms
« Risposta #5 il: 21 Settembre 2010, 14:32:15 CEST »
0
Citazione
Nel senso di evitare che altre app capiscano che é arrivato un messaggio? Beh dubito fortemente che si possa eliminare un evento del sistema.

bè, fondamentalmente mi basterebbe che non se ne accorgesse l'utente...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intercettare l'arrivo di un sms
« Risposta #6 il: 21 Settembre 2010, 14:43:06 CEST »
0
Non è possibile purtroppo.

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Intercettare l'arrivo di un sms
« Risposta #7 il: 21 Settembre 2010, 14:48:25 CEST »
0
Citazione
Non è possibile purtroppo.

...e cancellandolo al volo? :-P

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intercettare l'arrivo di un sms
« Risposta #8 il: 21 Settembre 2010, 17:00:39 CEST »
0
...e cancellandolo al volo? :-P

La notifica rimane comunque...

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Intercettare l'arrivo di un sms
« Risposta #9 il: 21 Settembre 2010, 18:24:51 CEST »
0
Se il tuo obiettivo é fare un'app che non notifichi quello che l'utente non vuole (la cosiddetta blacklist), devi necessariamente crearti le tue notifiche (che non mostrerai quando arriva un messaggio in blacklist) e dire all'utente di disattivare quelle standard.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Intercettare l'arrivo di un sms
« Risposta #10 il: 22 Settembre 2010, 10:25:25 CEST »
0
credo di aver trovato la soluzione!
ma correggetemi implacabilmente se sbaglio...

ho scovato il metodo abortBroadcast() che, in caso di intent generati tramite sendOrderedBroadcast(), permette di stoppare la propagazione (ordinata) dell'intent verso i receivers successivi.
la priorità del receiver interessato può essese gestita dall'attributo android:priority direttamente nel tag <intent-filter> nel manifest.

ho provato e sembra funzionare! 8-)

fatemi sapere se vi torna o meno...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intercettare l'arrivo di un sms
« Risposta #11 il: 22 Settembre 2010, 11:18:38 CEST »
0
Beh tieni conto che non è una soluzione robusta.
Inoltre non so se in tutte le versioni di android l'intent degli sms viene inviato come ordered.
Se una app che gestisce gli sms si registra con priorità maggiore della tua ad esso l'intent arriva.

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Intercettare l'arrivo di un sms
« Risposta #12 il: 22 Settembre 2010, 12:26:14 CEST »
0
Citazione
Beh tieni conto che non è una soluzione robusta.
Inoltre non so se in tutte le versioni di android l'intent degli sms viene inviato come ordered.

si, certo... ma alla peggio comparirà la notifica. :-P

Citazione
Se una app che gestisce gli sms si registra con priorità maggiore della tua ad esso l'intent arriva.

si, ma questo può accadere comunque! :-o
in generale credo si debba auspicare che la propagazione degli intent venga "uccisa" in base al buon senso, qualora vengano soddisfatti criteri ragionevoli...

che dite?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intercettare l'arrivo di un sms
« Risposta #13 il: 22 Settembre 2010, 12:50:27 CEST »
0
Io lascerei la possibilità all'utente di selezionare di quale programma vuole vedere le notifiche.

Offline lo

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
Re:Intercettare l'arrivo di un sms
« Risposta #14 il: 22 Settembre 2010, 13:12:28 CEST »
0
Citazione
Io lascerei la possibilità all'utente di selezionare di quale programma vuole vedere le notifiche.

ma... scusate la domanda imbarazzante...
ma esiste in android questa possibilità, gestione delle notifiche per singola applicazione? o_O

comunque, per correttezza, posso sempre prevedere una preferenza nella mia applicazione che permetta di scegliere abortBroadcast() o meno... :-)