2011-01-09 20 views
19

Wie kann ich in Android so programmieren, dass meine App eine eingehende SMS analysieren und möglicherweise blockieren oder etwas tun kann (vielleicht in einen anderen SMS-Ordner verschieben) BEVOR die SMS tatsächlich eine Benachrichtigung auslöst, die dem Benutzer eine neue SMS mitteilt? Ich würde Android 2.1 und höher als Ziel haben.Wie eingehende SMS auf Android analysieren?

Ich würde eingehende SMS für Benutzer definierte Spam-Wörter analysieren, und wenn gefunden, würde löschen/markieren als lesen/verschieben Sie die Nachricht in einen anderen Ordner.

Antwort

24

ich benutze diesen Code als 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(); 
     } 
    } 

erinnern sie sich in einem offenkundigen hinzuzufügen und eine max Priorität (100) für Broadcast oder SMS wird zunächst auf Posteingang gehen hinzufügen und die Alert-Benachrichtigung zu erhalten.

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

Ich hoffe, es hilft Ihnen.

0

Nun kann u Falle der eingehende SMS, aber ich denke, u nicht in der Lage sein, um die Benachrichtigung zu blockieren .....
Wenn u SMS hier löschen wollen, ist ein Thread, der helfen kann ....
How to delete an SMS from the inbox in Android programmatically?

+0

Nun, ich brauche Android, um die Standardmeldung 'Neue Nachricht' NICHT anzuzeigen, wenn meine Anwendung die eingehenden SMS bereits bearbeitet hat. Das ist also eine wichtige Voraussetzung für die beste Benutzererfahrung :( –

+0

Nun, es gibt viele Threads auf StackOverflow, die Ihnen sagen, dass es nicht möglich ist, ohne Ihre eigenen erweiterten Klassen von denen zu verwenden, die versteckt sind ....... aber ja, Sie sind wan warten auf die Antwort anderer auch ......... – viv

+1

Jetzt kann die Methode abortBroadcast(); verwendet werden, um die eingehende Nachricht auf den Posteingang zu beschränken. – AB1209

0

Dieser Code funktioniert auf meinem 2.3.3 Gerät. HTC MyTouch 4g schieben. Der abortBroadcast unterdrückt den Notificationsound + Notification auf der Statusleiste + ermöglicht nicht, dass die SMS in den Posteingang gelangt. Einige Benutzer hatten erwähnt, dass es auf echten Geräten nicht funktioniert und nur auf Emulator funktioniert, das ist nicht immer der Fall. Wenn die Priorität 100 ist, funktioniert der Code auf diesem bestimmten Gerät wie erwartet.

Verwandte Themen