在另一个应用程序中抑制/阻止BroadcastReceiver

Noa*_*man 9 sms android broadcastreceiver

最近使用新功能"禁用其他消息通知"更新了SMS.该功能使得收听传入SMS广播的其他应用程序不会触发.例如,我的应用程序Shady SMS监听传入的SMS广播以发送通知并实际提取和保存SMS消息.

当启用Go SMS中的这一新功能时,Shady不会发送通知或保存最终根本不响应传入SMS广播的消息.

Go SMS必须以某种方式取消注册我的应用程序的广播接收器,因为传入的SMS广播不能被中止.我的意图过滤器设置为android:priority ="0".

有什么想法吗?

Jim*_*Jim 21

GoSMS确实将优先级设置为2147483647,但这不是"最大"(它是最大的整数) - 它太高了.SYSTEM_HIGH_PRIORITY的Android文档为1000(http://developer.android.com/reference/android/content/IntentFilter.html#SYSTEM_HIGH_PRIORITY),应用优先级应低于此值 - 它不是系统应用.

这将产生不可预测的行为.(GoSMS并不总是忽略其他应用程序通知 - abortBroadcast仅在首先获得它时才有效,通常基于安装顺序,但并非总是如此.)系统级应用程序将执行,然后Android将尝试整理非系统应用程序.如果查看源代码,执行顺序基于优先级,但对于超过999的应用程序或具有相同优先级的应用程序,选择应用程序顺序的调用不一致.它可能是安装顺序,但系统更改可能导致其他执行顺序(我已经多次看到测试这个).

这应该由GoSMS(和许多其他错误的应用程序)修复.仅仅因为"优先级"是一个整数,并不意味着整数的最高值会产生最高优先级.(就像Web URL是一个字符串,但并非所有字符串值都有效.)此外,GoSMS应该知道其他应用程序可能想要处理用户不可见的SMS消息.如果他们捕获它并将其显示给用户,那就没有意义了.

  • 我讨厌去做这个短信.这是您可以在用户手机上的应用中进行的最具侵入性的事情之一.他们需要让广播通过! (12认同)
  • 我认为可以中止广播,在他们的情况下,用户希望通过选择适当的选项来解决这个问题.不公平的是他们使用绝对最高优先级..我已经给他们发了一封关于它的电子邮件我是希望它能很快得到解决 (2认同)

Com*_*are 13

我的意图过滤器设置为android:priority ="0".

这是可能的最低优先级.所有其他应用程序将首先获得他们的机会.引用文档:

它控制执行广播接收器以接收广播消息的顺序.具有较高优先级值的那些在具有较低值的那些之前被调用.(该命令仅适用于同步消息;异步消息会忽略它.)

所以,他们只是打电话abortBroadcast().他们可能优先考虑到屋顶.

  • 我刚刚检查了他们的apk,他们确实将意图过滤器的优先级设置为2147483647。基于SDK规则,似乎无法阻止他们的应用阻止其他应用接收广播的传入sms。他们的优先级是最大可能。我也认为传入的短信广播是异步的,所以我不太确定他们是如何中止它的。 (2认同)