在我的onReceive方法中我有这段代码:
if (from.equals(number)) {
abortBroadcast();
in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(in);
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Not from needed number", Toast.LENGTH_SHORT).show();
}
其中number =“29853” - 我希望捕获的数字消息,而不是保存在收件箱中。
此代码正常工作 - 如果sms来自第一个Toast的编号,并且它打印消息的内容,如果sms不是来自编号“Not from needed number”打印。问题是abortBroadcast没有提供它的业务 - 尽管接收者的优先级是1000,但来自号码的消息仍然在手机的收件箱中:
<receiver android:name=".service_classes.MyReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"
android:priority="1000" />
</intent-filter>
</receiver>
问题是什么 - 为什么不abortBroadcast工作?
答案 0 :(得分:8)
将android:priority
移动到它所属的intent-filter。
<intent-filter android:priority="9999999">
那么你将更有可能拥有优先权,你的取消将起作用。 我测试过它确实有用。
答案 1 :(得分:4)
从Android 4.4开始,您无法中止这些广播。这是指向AOSP来源的链接:
答案 2 :(得分:3)
来自收件箱的abortBroadcast()
没有删除消息,只是取消状态栏通知。要从收件箱中删除短信,请参阅this link
答案 3 :(得分:1)
我前段时间使用过它并且它正在工作,我可以拒绝显示一些消息,但现在这不起作用。我认为android不再允许用户对SMS_RECEIVED事件进行全部控制。