如何在 Android 上分析传入的短信?

How to analyze incoming SMS on Android?

我如何在 Android 中进行编码,以便我的应用可以分析传入的 SMS,并可能在 SMS 实际发出通知通知用户有新 SMS 之前阻止它或执行某些操作(可能移动到不同的 SMS 文件夹)?我会针对 Android 2.1 及更高版本。

我想分析传入的 SMS 是否有用户指定的垃圾邮件词,如果发现我想删除/标记为已读/将消息移动到不同的文件夹。


我使用这段代码,作为广播接收器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 +="\
";
        }
        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),否则短信将首先进入收件箱并收到警报通知。

1
2
3
4
5
    <receiver android:name=".SmsReceiver">
        <intent-filter android:priority="100">
            </action>
        </intent-filter>
    </receiver>

希望对你有所帮助。


此代码适用于我的 2.3.3 设备。 HTC MyTouch 4g 幻灯片。
abortBroadcast 抑制状态栏上的通知声音通知,不允许短信进入收件箱。
一些用户提到它不能在真实设备上运行,只能在模拟器上运行,但情况并非总是如此。如果优先级为 100,则在此特定设备上代码按预期工作。


你可以捕获传入的短信,但我认为你将无法阻止通知.....
如果你想删除短信,这里有一个可以提供帮助的线程......
如何以编程方式从 Android 的收件箱中删除短信?