我们可以在Android到达收件箱之前删除其中的短信吗?

时间:2009-11-16 11:33:43

标签: android sms

我正在从收件箱中删除短信,但我想知道:如何在收到收件箱之前将其删除?

5 个答案:

答案 0 :(得分:186)

尽管对此问题有一些负面反应,但短信拦截还有合法用途。例如:自动化电话号码验证,通过短信提供的服务(尽管通常应该通过数据短信进行),或者用于通过处理特殊格式的消息来改善用户体验的应用程序,以便在一个不错的Android中显示它们特定的用户界面。

从Android 1.6开始,传入的短信广播(android.provider.Telephony.SMS_RECEIVED)以“ordered broadcast”形式发送 - 这意味着您可以告诉系统哪些组件应首先接收广播。

如果您在短信听取android:priority上定义<intent-filter>属性,则会在本机短信应用程序之前收到通知。

此时,您可以cancel广播,防止广播传播到其他应用。


更新(2013年10月):当Android 4.4到货时,它会更改SMS API,这可能会影响应用影响短信发送的能力。
查看此Android开发者博客文章以获取更多信息:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

答案 1 :(得分:11)

步骤1:创建自定义广播接收器以接收短信。编写逻辑以中止最广泛的内容,以便邮件无法在您的收件箱中使用

public class SMSReceiver extends BroadcastReceiver
{
    public void onReceive(Context context, Intent intent)
    {
     if(conditionMatches){
     abortBroadcast();
     }
    }
}

Step-2 在AndoridManifest中注册广播接收器并将android:priority值设为大数

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

多数民众赞成

以上代码如何运作

由于接收广播的短信是有序广播,优先级高的接收者将首先接收,因此您的应用程序首先接收,并在收到您正在中止广播。所以没有其他应用程序可以接收它。因此短信不会出现在收件箱中

答案 2 :(得分:9)

下面(“android:priority”和abortBroadcast())解决方案的工作原理只要Android Messaging应用程序默认(我的意思是股票Android Messaging应用程序)。如果用户安装“GoSMSPro”或“HandcentSMS”,这些应用程序仍会在收件箱中显示消息,我相信这是由于“android:priority”。如果手机上安装了第三方消息传递应用程序,我认为没有更好的方法来解决上述问题。

答案 3 :(得分:1)

/**
 * Check priority
 * @param activity
 */
public static void receiverPriority(Activity activity){

    Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED");
    List<ResolveInfo> infos =  activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0);
    for (ResolveInfo info : infos) {
        System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority);
    }
}

检查优先级并设置比其他接收器更高的优先级(在清单中)。

答案 4 :(得分:0)

如果您有这样的情况,并且您想要删除或忽略与此联系号码“+ 44xxxxx”等相关的消息,请在SMS广播接收器中使用此代码

 if(sender.equalsIgnoreCase("+44xxxxxx")
   this.abortBroadCast();

您还必须将其设置为高优先级。