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

Posted

技术标签:

【中文标题】如何在 Android 上分析传入的短信?【英文标题】:How to analyze incoming SMS on Android? 【发布时间】:2011-06-05 23:41:35 【问题描述】:

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

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

【问题讨论】:

【参考方案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();
        
  

记得在清单中添加它并添加广播的最高优先级(100),否则短信将首先进入收件箱并收到警报通知。

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

希望对你有帮助。

【讨论】:

【参考方案2】:

您可以捕获传入的短信,但我认为您将无法阻止通知..... 如果你想删除短信,这里有一个可以提供帮助的线程......How to delete an SMS from the inbox in Android programmatically?

【讨论】:

好吧,如果我的应用程序已经处理了传入的 SMS,我需要 Android 不显示默认的“新消息”通知。所以这是获得最佳用户体验的重要要求:( 嗯,*** 上有很多线程会告诉你,如果不使用你自己的隐藏扩展类是不可能的......但是你也想等待其他人的回复。 ....... 现在中止广播();方法可用于限制传入消息进入收件箱。【参考方案3】:

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

【讨论】:

以上是关于如何在 Android 上分析传入的短信?的主要内容,如果未能解决你的问题,请参考以下文章

Android中传入短信的状态栏通知?

如何将发送高级短信权限设置为始终允许在 android 中?

如何在 ios 上静音传入的文本

如何在android中打开特定的短信

如何通过sip在android中发送短信

如何通过 Android 应用向用户发送短信通知