我正在尝试在屏幕开启时调用BroadcastReceiver。在我的AndroidManifest.xml文件中,我已经指定了:
<receiver android:name="IntentReceiver">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON"></action>
</intent-filter>
</receiver>
然而,似乎接收器从未被调用(断点不触发,日志语句被忽略)。我已经进行了一项测试,将SCREEN_ON替换为BOOT_COMPLETED,这样就可以调用了。
这是在一个1.6(SDK level 4)项目中。
通过Google代码搜索发现了这个问题,我下载了该项目并同步了它,将其转换为最新的工具版本,但它也无法拦截该事件。
这个链接可能已经不再支持了:http://www.google.com/codesearch/p?hl=en#_8L9bayv7qE/trunk/phxandroid-intent-query/AndroidManifest.xml&q=android.intent.action.SCREEN_ON 以前,我曾经成功地使用Context.registerReceiver()来拦截这个事件。
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// ...
}
}, new IntentFilter(Intent.ACTION_SCREEN_ON));
然而,这是通过一个长期运行的服务来完成的。在遵循CommonsWare的明智建议后,我选择尝试删除长期运行的服务并使用不同的技术。但我仍然需要检测屏幕开关事件。
ACTION_BATTERY_CHANGED
——这种现象的典型例子——的行为方式,但他们肯定跳过了这个。如果您在源代码中搜索ACTION_SCREEN_ON
(例如通过 Google 代码搜索)并在其在PowerManagerService
中的使用中找到注册接收器标志仅被设置,则会注意到。 - CommonsWare