2011-01-09 12 views
19

Come posso programmare in Android in modo tale che la mia app possa analizzare un SMS in arrivo e magari bloccarlo o fare qualcosa (magari spostarsi in una cartella SMS diversa) PRIMA che l'SMS sollevi effettivamente una notifica che informa l'utente di un nuovo SMS? Mi rivolgo a Android 2.1 e versioni successive.Come analizzare gli SMS in arrivo su Android?

Vorrei analizzare gli SMS in arrivo per le parole di spam specificate dall'utente e, se trovato, desidero cancellare/contrassegnare come letto/spostare il messaggio in una cartella diversa.

risposta

24

io uso questo codice, come BroadcastReceiver:

public void onReceive(Context context, Intent intent) 
{ 
    //this stops notifications to others 
    this.abortBroadcast(); 

    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = "";    
    if (bundle != null) 
    { 
     //---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length];    
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
      str += "SMS from " + msgs[i].getOriginatingAddress(); 
      from = msgs[i].getOriginatingAddress(); 
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      msg = msgs[i].getMessageBody().toString(); 
      str += "\n"; 
     } 
     if(checksomething){ 
      //make your actions 
      //and no alert notification and sms not in inbox 
     } 
     else{ 
      //continue the normal process of sms and will get alert and reaches inbox 
      this.clearAbortBroadcast(); 
     } 
    } 

ricordati di aggiungerlo nel manifesto e aggiungi una priorità higgest (100) per la trasmissione o sms andrà prima a casella di posta elettronica e ottenere la notifica di avviso.

<receiver android:name=".SmsReceiver"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
     </intent-filter> 
    </receiver> 

Spero che ti aiuti.

0

Bene u può intrappolare l'SMS in arrivo, ma penso che u non sarà in grado di bloccare la notifica .....
Se u vuole cancellare SMS: ecco un filo che può aiutare ....
How to delete an SMS from the inbox in Android programmatically?

+0

beh, ho bisogno che Android NON mostri la notifica di "nuovo messaggio" predefinita se la mia applicazione ha già gestito gli SMS in arrivo. Quindi questo è un requisito importante per la migliore esperienza utente :( –

+0

beh ci sono molti thread su StackOverflow che ti diranno che non è possibile senza usare le tue classi estese di quelli che sono nascosti ....... ma sì sei pallido attendere la risposta di altri anche ........ – viv

+1

Ora abortBroadcast(); metodo può essere utilizzato per limitare il messaggio in arrivo per andare in Posta in arrivo. – AB1209

0

Questo codice funziona sul mio dispositivo 2.3.3. HTC MyTouch 4g Slide. l'abortBroadcast sopprime il messaggio di notifica + sulla barra di stato + non consente all'SMS di accedere alla Posta in arrivo. Alcuni utenti hanno menzionato che non funziona su dispositivi reali e funziona solo su emulatore, che non è sempre il caso. Se la priorità è 100, su questo particolare dispositivo il codice funziona come previsto.