2010-10-06 8 views
2

i ont diffusé la classe de récepteur pour recevoir des sms, mais je ne sais pas comment supprimer les SMS reçus avant d'arriver à la boîte de réception ainsi que la notificationSuppression des SMS en utilisant BroadcastReceiver - Android

public void onReceive(Context context, Intent intent) {  
     Bundle pudsBundle = intent.getExtras();  
     Object[] pdus = (Object[]) pudsBundle.get("pdus"); 
     SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]);   
     Log.i(TAG, messages.getMessageBody()); 
} 
+0

Mind montrant le code de votre récepteur de diffusion? – AndrewKS

+0

en rapport avec http://stackoverflow.com/questions/1741628/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox –

Répondre

12

Dans votre intention filtre, vous devez définir la priorité supérieure à l'application SMS du système.

<intent-filter android:priority="100" ...

Et puis dans votre récepteur de diffusion que vous appelez abortBroadcast()

public void onReceive(Context context, Intent intent) { 
    //... 
    abortBroadcast(); 
    } 
+3

Cela n'arrêtera-t-il PAS TOUTES les émissions? il devrait avoir si l'intention.action(). equals ("WhateverTheActionIsCalled") – AndrewKS

+0

Arun: Avez-vous une application SMS personnalisée installée? Si cette application a une priorité plus élevée que votre filtre d'intention, ils le recevront en premier. essayez d'augmenter la priorité. De plus, si vous ne revenez pas de 'onRecieve()' rapidement, vous pouvez continuer avec le prochain récepteur de diffusion. – MatteKarla

+0

Merci MatteKarla. votre solution fonctionne bien. – Arun

1
<receiver android:name=".SMSReceiver" 
     android:permission="android.permission.BROADCAST_SMS"> 
     <intent-filter android:priority="999" > 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
</receiver> 

et dans le récepteur

public void onReceive(Context context, Intent intent) { 
    //... 
    abortBroadcast(); 
    } 

Cela fonctionne très bien.