android - 转到 SMS Pro 覆盖 android.provider.Telephony.SMS_RECEIVED

标签 android sms broadcastreceiver

我有一个应用程序,允许用户转发收到的 SMS 消息。过去,我将 android.provider.Telephony.SMS_RECEIVEDintent-filter 中的 android:priority 设置为略高于 Android 的默认消息传递应用程序。我这样做了,这样用户就可以转发消息而不必在消息传递应用程序中清除它们。然而,几个月后,Go SMS Pro 发布了其应用程序的更新,其中 android:priority 值非常高,因此安装该应用程序的用户开始遇到问题。我更新了我的应用程序,使我的优先级略高于 Go SMS Pro,一切顺利。现在 Go SMS Pro 又做了一次,他们的 android:priority 已经被占用到你可以分配的最大值。 2147483647 在他们的一个广播接收器上,2147483640 在另一个上(是的,Go SMS Pro 现在有两个广播接收器)。

为了解决这个问题,我尝试像他们一样将我的优先级更改为最大,但不知何故,即使我们的优先级相同,他们的应用程序仍然在 SMS 战斗中获胜。我在某处读到,当必须在具有相同优先级的两个应用程序之间做出决定时,Android 会选择最早安装的那个。我尝试在我的应用程序之后安装 Go SMS Pro,但仍然没有。

解决这个问题的正确方法是什么?他们在他们的应用程序中做了什么,使他们比其他人更早收到 SMS 广播,即使具有相同的 android:priority 值?

最佳答案

What's the proper way to fix this?

修改您的应用程序以在 Go SMS Pro 或任何其他应用程序之后继续运行。如果您检测到以相同或更高优先级监视同一广播的应用程序(为此使用 PackageManager),您可能还会建议用户,以便他们知道相应地配置这些应用程序。

试图比其他人拥有更高的优先级是一场军备竞赛,在这场竞赛中,你最终最多只能获得相同的优先级。具有固定优先级的有序广播的行为没有记录,因此没有保证的行为。欢迎 Android(或自定义版本的 Android)修改决胜算法。该算法可以是:

  • 按包名字母排序

  • 在散列集合中找到的顺序,其中散列键可以基于任何内容(例如,对象 ID)

  • 随机数生成器

由于您无法可靠地“获胜”,因此当您确实“失败”时,请修改您的应用以尽可能取得成功。

关于android - 转到 SMS Pro 覆盖 android.provider.Telephony.SMS_RECEIVED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17393356/

相关文章:

android - 在一个位置为布局中的所有 TextView 元素设置样式

android - 如何从android中的线程获取结果?

java - 是否可以使用 badlogic(LibGDX) 创建项目而不使用他们的 LibGDX 项目生成器?

java - 如何从短信中过滤/提取代码 (Android)

android - SMS Intents.getMessagesFromIntent(intent) 返回 null

android - 为 BroadcastReceiver 显示 Toast

android - 寻找 FreeImage.so

java - 有没有办法以编程方式从计算机访问短信?

android - Android 设备重启后广播接收器不工作

java - Android 中来电的 BroadcastReceiver 不起作用