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

标签 android sms broadcastreceiver

Go SMS 最近更新了一项新功能“禁用其他消息通知”。该功能会导致监听传入 SMS 广播的其他应用程序不触发。例如,我的应用程序 Shady SMS 监听传入的 SMS 广播以发送通知并实际提取和保存 SMS 消息。

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

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

有什么想法吗?

最佳答案

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 消息。如果他们捕获它并将其显示给用户,那将毫无意义。

关于android - 在另一个应用程序中抑制/阻止 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6600266/

相关文章:

android - 在 Oreo 中注册静态广播接收器

Android NullPointerException 没有行号

Android:AndroidPlot 中的触摸事件期间应用程序崩溃

Android - 同屏ListFragments

iphone - 我可以从浏览器启动带有预填充正文的 iPhone 或 Android 短信应用程序吗?

android - 如何使用传入的 SMS 刷新前台 Activity?

android - 如何创建一个 gui 来显示收到的短信?

c# - Xamarin 安卓 : Reopen app at specific time

java - BroadcastReceiver onRecive 无法正常工作

javascript - 无法通过 Firebase CLI 部署 Firebase 规则