应用程序被杀后,广播接收器无法接收

时间:2014-02-08 16:30:02

标签: android broadcastreceiver

我创建了一个广播接收器来管理这些事件(ACTION_SCREEN_ON,ACTION_SCREEN_OFF和ACTION_USER_PRESENT)。我在我的主要活动中注册我的广播接收器

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);

mReceiver = new UnlockReceiver();


registerReceiver(mReceiver, filter);

我的问题是我的应用程序被杀死后(当我从应用程序选择器中转换它时)UnlockReceiver没有收到。我有这个问题,因为这些广播无法在Manifest上声明我尝试使用Service和AlarmManager解决它。我该如何解决?

2 个答案:

答案 0 :(得分:0)

从Android 3.1开始,系统的软件包管理器会跟踪处于停止状态的应用程序,并提供从后台进程和其他应用程序控制其启动的方法。

请注意,应用程序的停止状态与活动停止状态不同。系统分别管理这两个停止状态。

平台定义了两个新的意图标志,让发件人指定是否允许Intent激活已停止的应用程序中的组件。

FLAG_INCLUDE_STOPPED_PACKAGES - 将已停止的应用程序的意图过滤器包含在要解决的潜在目标列表中。 FLAG_EXCLUDE_STOPPED_PACKAGES - 从潜在目标列表中排除已停止应用程序的意图过滤器。 如果在intent中定义了这两个标志中的任何一个或两个,则默认行为是在潜在目标列表中包含已停止应用程序的过滤器。

https://developer.android.com/about/versions/android-3.1.html

答案 1 :(得分:0)

您在活动中动态注册广播接收器,这就是它无效的原因。

在清单中静态声明它会起作用,但那不是你的情况。

我有一个工作场所,由你来决定是否使用它:

使用始终在后台运行的粘性服务,并在服务中注册您的广播接收器。