我正在从收件箱中删除SMS,但我想知道:如何在SMS到达收件箱之前将其删除?
我正在从收件箱中删除SMS,但我想知道:如何在SMS到达收件箱之前将其删除?
Answers:
是。
尽管对此问题有一些负面反应,但SMS拦截还是有合法用途的。例如:自动电话号码验证,通过SMS提供的服务(尽管通常应通过数据SMS来完成),或者用于通过处理特殊格式的消息来改善用户体验的应用程序,以便在漂亮的Android中显示它们特定的UI。
从Android 1.6开始,传入的SMS消息广播(android.provider.Telephony.SMS_RECEIVED
)以“ 有序广播 ”的形式提供-意味着您可以告诉系统哪些组件应首先接收广播。
如果您android:priority
在SMS侦听上定义了一个属性<intent-filter>
,那么您将在本机SMS应用程序之前收到通知。
此时,您可以取消广播,以防止其传播到其他应用程序。
更新(2013年10月): Android 4.4到货时,它将对SMS API进行更改,这可能会影响应用影响SMS传递的能力。
请查看此Android开发者博客文章,了解更多信息:http :
//android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
,所以有可能。实际上,Handcent正在使用优先级2147483647
。
"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
。
步骤1:创建您的自定义广播接收器以接收短信。编写逻辑以中止最广泛的操作,以使该消息对您的收件箱不可用
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
步骤2在AndoridManifest中注册广播接收器,并将android:priority值设置为一个大数
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
而已
上面的代码如何工作
由于SMS接收广播是一种有序广播,因此具有高优先级的接收器将首先接收,因此您的应用程序将首先接收,而接收后您将中止广播。因此,没有其他应用程序可以接收它。因此,短信将不会存在于收件箱中
以下(“ android:priority”和abortBroadcast())解决方案可以在默认情况下使用Android Messaging应用程序(我的意思是库存的Android Messaging应用程序)。如果用户安装“ GoSMSPro”或“ HandcentSMS”,这些应用程序仍在收件箱中显示消息,我相信这是由于“ android:priority”。如果在电话上安装了第三方消息传递应用程序,我认为没有更好的方法可以解决上述问题。
/**
* 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);
}
}
检查优先级并在其他清单中设置更高的优先级(在清单中)。
如果您遇到这种情况,并且想要删除或忽略与此联系电话“ + 44xxxxx”等有关的消息,请在SMS Broadcast接收器中使用此代码
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
您还必须将其设置为高优先级。