Подтвердить что ты не робот

Как анализировать входящие SMS на Android?

Как я могу закодировать на Android, чтобы мое приложение могло анализировать входящие SMS и, возможно, блокировать его или что-то делать (возможно, переходить в другую папку SMS). Прежде чем SMS действительно вызывает уведомление, сообщающее пользователю о новом SMS-сообщении? Я бы нацелился на Android 2.1 и выше.

Я бы хотел проанализировать входящие SMS-сообщения для заданных пользователем спам-слов, и если они захотят удалить/пометить как прочитанные/переместить сообщение в другую папку.

4b9b3361

Ответ 1

Я использую этот код, как 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();
        }
  }

Не забудьте добавить его в манифест и добавить самый высокий приоритет (100) для трансляции или смс, прежде всего перейдя в папку "Входящие" и получив уведомление.

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

Надеюсь, это поможет вам.

Ответ 3

Этот код работает на моем 2.3.3 устройстве. HTC MyTouch 4g Slide. abortBroadcast подавляет уведомление notoundound + уведомление в строке состояния +, не позволяет отправлять SMS в папку "Входящие". Некоторые пользователи упоминали, что он не работает на реальных устройствах и работает только на эмуляторе, что не всегда так. Если приоритет равен 100, то на этом конкретном устройстве код работает как ожидалось.