如何在Android上分析收到的短信?

如何在Android上分析收到的短信?,android,sms,Android,Sms,我如何在安卓系统中编写代码,以便我的应用程序能够分析传入的短消息,并在短消息实际发出通知告知用户新短消息之前阻止它或执行某些操作(可能移动到其他短消息文件夹)?我的目标是安卓2.1及以上版本 我想分析用户指定的垃圾短信,如果发现,我想删除/标记为已读/将邮件移动到另一个文件夹。你可以捕获传入的短信,但我认为你将无法阻止通知。 如果你想删除短信,这里有一个线程可以帮助你…… 我将此代码用作广播接收器: public void onReceive(Context context, Intent in

我如何在安卓系统中编写代码,以便我的应用程序能够分析传入的短消息,并在短消息实际发出通知告知用户新短消息之前阻止它或执行某些操作(可能移动到其他短消息文件夹)?我的目标是安卓2.1及以上版本


我想分析用户指定的垃圾短信,如果发现,我想删除/标记为已读/将邮件移动到另一个文件夹。

你可以捕获传入的短信,但我认为你将无法阻止通知。
如果你想删除短信,这里有一个线程可以帮助你……

我将此代码用作广播接收器:

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();
        }
  }
public void onReceive(上下文、意图)
{   
//这将停止向其他人发送通知
这个.abortBroadcast();
//---获取传入的SMS消息---
Bundle=intent.getExtras();
SmsMessage[]msgs=null;
字符串str=“”;
if(bundle!=null)
{
//---检索收到的SMS消息---
Object[]pdus=(Object[])bundle.get(“pdus”);
msgs=新SMS消息[PDU.length];

对于(int i=0;i此代码适用于我的2.3.3设备。HTC MyTouch 4g幻灯片。 abortBroadcast禁止状态栏上的notificationsound+通知+不允许短信进入收件箱。
一些用户提到,它不能在真实设备上工作,只能在emulator上工作,但情况并非总是如此。如果优先级为100,那么在这个特定设备上,代码会按预期工作。

如果我的应用程序已经处理了传入的短信,我需要Android不显示默认的“新消息”通知。因此,这是一个imp最佳用户体验的重要要求:(StackOverflow上有许多线程会告诉你,如果不使用隐藏的扩展类,这是不可能的……。但是,是的,你还需要等待其他人的答复……。现在abortBroadcast();方法可用于限制传入消息进入收件箱。
    <receiver android:name=".SmsReceiver">
        <intent-filter android:priority="100">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
        </intent-filter>
    </receiver>