默认情况下,处于停止状态(尚未运行一次)的应用程序无法接收广播。如果我们将标志FLAG_INCLUDE_STOPPED_PACKAGES
添加到广播意图中,有一种方法可以接收它。
我的问题是我需要接收系统意图android.intent.action.MEDIA_MOUNTED
(并且我不想将该标志添加到其中)。
即使停止申请,我怎样才能收到它?
在我看来,这肯定是可能的,因为例如com.android.shell
应用程序即使它的力量停止也能够接收这样的意图。怎么做?
修改:
只是澄清一下,因为看起来这并不明显:
这里的一切都是从Android开源项目开发者的角度出发的。我正在修改操作系统源代码,我希望接收广播的应用程序可以预先安装,使用平台证书签名,它可以使用隐藏的API等。一切都被允许,甚至修改系统。
答案 0 :(得分:4)
将您的应用程序声明为系统应用程序应该可以让您定期接收广播,即使您的应用处于" 已停止状态"。
将以下内容添加到清单中,并确保您的应用程序已使用平台密钥签名:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
...
android:sharedUserId="android.uid.system">
答案 1 :(得分:0)
如果您不是指强制停止的应用程序,而是而是处于停止状态的已关闭应用程序,那么请查看这两个链接以了解如何实现可在应用关闭后激活的BroadcastReceiver。否则,可能会采用自定义ROM和/或sys应用程序。
答案 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设备上都不存在的漏洞应用
我尝试了以上内容并且有效!