我正在从收件箱中删除短信,但我想知道:如何在收到收件箱之前将其删除?
答案 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();
您还必须将其设置为高优先级。