在停止的应用程序中接收广播

时间:2016-07-20 20:31:36

标签: android android-intent android-source android-5.1.1-lollipop

默认情况下,处于停止状态(尚未运行一次)的应用程序无法接收广播。如果我们将标志FLAG_INCLUDE_STOPPED_PACKAGES添加到广播意图中,有一种方法可以接收它。

我的问题是我需要接收系统意图android.intent.action.MEDIA_MOUNTED(并且我不想将该标志添加到其中)。

即使停止申请,我怎样才能收到它?

在我看来,这肯定是可能的,因为例如com.android.shell应用程序即使它的力量停止也能够接收这样的意图。怎么做?

修改

只是澄清一下,因为看起来这并不明显:

这里的一切都是从Android开源项目开发者的角度出发的。我正在修改操作系统源代码,我希望接收广播的应用程序可以预先安装,使用平台证书签名,它可以使用隐藏的API等。一切都被允许,甚至修改系统。

3 个答案:

答案 0 :(得分:4)

将您的应用程序声明为系统应用程序应该可以让您定期接收广播,即使您的应用处于" 已停止状态"。

将以下内容添加到清单中,并确保您的应用程序已使用平台密钥签名:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
android:sharedUserId="android.uid.system">

答案 1 :(得分:0)

如果您不是指强制停止的应用程序,而是而是处于停止状态的已关闭应用程序,那么请查看这两个链接以了解如何实现可在应用关闭后激活的BroadcastReceiver。否则,可能会采用自定义ROM和/或sys应用程序。

BroadcastReceiver 1

BroadcastReceiver 2

答案 2 :(得分:-1)

如果你在root设备上,你可以使用Xposed修改android.content.Intent#isExcludingStopped,如下:

fn main() {
    let a = 1;
    let b = 2;

    {
        let b = &b;
        needs_to_own_a(move || a_function(a, b));
    }
}

不要忘记将班级名称放在 xposed_init 中。 当然这有一些安全隐患,有效地将你带回到Android 3.0-,虽然这不应该是一个大问题,因为没有人希望利用几乎所有没有这个补丁的现有Android设备上都不存在的漏洞应用

我尝试了以上内容并且有效!