我正在从收件箱删除一条短信,但我想知道:如何在它到达收件箱之前将其删除?
我正在从收件箱删除一条短信,但我想知道:如何在它到达收件箱之前将其删除?
是的。
尽管一些人对这个问题有负面反应,但短信拦截有合法的用途。例如:自动化电话号码验证、通过短信提供服务(虽然通常应使用数据短信),或者为了通过处理特殊格式的消息以在漂亮的Android特定用户界面中显示它们来改善用户体验的应用程序。
从Android 1.6开始,传入的SMS消息广播(android.provider.Telephony.SMS_RECEIVED
)被传递为“有序广播”——这意味着您可以告诉系统哪些组件应该首先接收广播。
如果在您的SMS监听的<intent-filter>
上定义了android:priority
属性,那么您将在本机SMS应用程序之前收到通知。
此时,您可以取消广播,防止其传播到其他应用程序。
更新 (2013年10月):当Android 4.4到达时,它将对SMS API进行更改,这可能会影响应用程序影响短信传递的能力。
查看这篇Android开发者博客文章获取更多信息:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
的应用程序,所以这是可能的。事实上,Handcent 正在使用优先级为 2147483647
。 - Christopher Orr步骤1:创建自定义广播接收器以接收短信。编写逻辑以中止广播,从而使消息不会出现在您的收件箱中。
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
步骤二 在 AndroidManifest 中注册广播接收器,并将 android:priority 的值设为一个较大的数字。
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
就是这样
上面的代码是如何工作的
由于短信接收广播是有序广播,具有高优先级的接收器将首先收到,所以您的应用程序将首先接收并在接收后中止广播。因此,没有其他应用程序可以接收它。因此,短信不会存在于收件箱中。
/**
* 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);
}
}
检查优先级并在清单文件中将其设置为比其他接收器更高。
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
你还需要将它设置为高优先级。