Facebook的“Messenger”有一个短信广播接收器,重启后具有最高优先级

时间:2013-05-08 18:56:23

标签: java android facebook broadcastreceiver

Facebook的Messenger,其2147483647广播接收器的优先级为android.provider.Telephony.SMS_RECEIVED,在其清单中声明。

(令人遗憾的是,我们不得不遵循文档的最高优先级标准为1000,因为其他应用程序制定了自己的规则)

我理解,如果我的优先级也设置为2147483647的高级别,我必须首先安装我的应用程序以优先于任何“关系”。没问题,我做了一个屏幕提醒用户可能需要卸载哪些应用程序然后在我的应用程序运行正常后重新安装。

但是,这就是问题 - 一切正常,但一旦手机重新启动,“Messenger”开始优先于我的应用程序。我到处看看他们怎么能做这个黑魔法。 他们是如何做到的?如何在首次安装我的应用程序后重启后如何获得优先级?

到目前为止,唯一想到的是,在注册广播接收器时,包名称在引导时按字母顺序排序。

融为一体。 f acebook> COM。 s trikeforcezero

我准备在android.intent.action.BOOT_COMPLETED注册我的广播接收器,但我觉得这不会有效。

Messenger还为android.provider.Telephony.SMS_RECEIVED设置为-1的另一个“低级修道院广播接收器”

4 个答案:

答案 0 :(得分:3)

肯定

如果用户在Facebook之前下载您的应用,那么您的接收器将优先,尽管两者都具有优先级2147483647。 重新启动后,Facebook的接收器优先,虽然两者具有相同的优先级,之前安装了您的接收器。因此,当然,诀窍在于它们的BootReceiver。

<强>猜测

  1. 作为第一步,添加具有相同优先级的启动接收器2147483647(虽然优先级无效但只是添加它)到您的应用程序。尝试在Facebook的应用程序之前安装您的应用程序并重新启动手机。这可能与以下事实有关:在这种情况下,您的流程在Facebook之前启动,而您的短信接收器将在Facebook之前启动。
  2. 做同样的事情但是将你的包名重命名为a.a.a只是为了优先于facebook按字母顺序排列。
  3. 在Boot Receiver中,尝试添加以下代码:

    ComponentName component;
    component=new ComponentName(this, SmsReceiver.class);
    getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    component = new ComponentName(this, SmsReceiver.class);
    getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    
  4. 尝试了解您的启动接收器是否优先于Facebook的启动接收器可能会有用。我不确定这是否可能。

  5. 最后,有一个过程可以在清单中区分,但不确定这是否可以方便。

答案 1 :(得分:2)

即使最高优先级值为1000,Facebook也会使用最大整数值作为优先级。所以,如果你想有机会,我会说你也应该保持不变(2147483647)。提醒用户在安装应用程序后卸载并安装Facebook。

重新启动后获得优先权: 你不能为boot_completed设置优先级,所以尝试探索android源代码,特别是SystemServer.java,看看SystemServer启动并运行&amp;一旦启动完成,将使用什么顺序启动为boot_completed注册的应用程序。

答案 2 :(得分:2)

我怀疑首先安装的应用程序是否会破坏联系,但首先运行的是应用程序。在手动安装和卸载应用程序的情况下,您手动控制执行顺序。然后,当您重新启动时,执行顺序将被放弃到Android的启动行为。可以很容易地测试这是否按字母顺序排列:构建一个快速测试应用程序名称aaa并查看它是否在重新启动后保持优先级。如果引导顺序没有按字母顺序更改,请注释,我将确定如何设置启动顺序。

答案 3 :(得分:1)

这揭示了Android机制中的一些错误,因为您认为它们放入清单中的数字并不是真正的数字。 2147483647真的是(-1),即2 ^ 31。为什么你认为首先安装哪个应用程序是重要的?