android.intent.action.SCREEN_ON不能用作接收者意图filter

我试图让屏幕打开时调用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进行testing,并且调用了这个。

这是一个1.6(SDK级别4)项目。

谷歌代码search透露了这一点,我下载了项目并同步它,转换它与最新工具一起工作,但它也无法拦截该事件。

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的忠告,我select尝试删除长寿命的服务并使用不同的技术。 但是我仍然需要检测屏幕和事件。

Solutions Collecting From Web of "android.intent.action.SCREEN_ON不能用作接收者意图filter"

遵循CommonsWare的忠告,我select尝试删除长寿命的服务并使用不同的技术。

其实,我相信我的build议更多的是淡蓝色的::-)

但是我仍然需要检测屏幕和事件。

有些事件表明Android不想启动新的进程,所以设备不会因为各种各样的东西而变得太慢,而必须立即运行。 ACTION_SCREEN_ON就是其中之一。 关于该主题,请参阅前面的问题,获得浅蓝色的build议。

所以,你需要问自己:“自我,我真的需要控制这些事件吗?” 如果你的答案是“否”,核心的Android团队会喜欢它。

Actullay我面对这个问题,但我成功地解决它

1)从您的主要活动开始服务

  Intent i = new Intent(MainActivity.this, UpdateService.class); startService(i); 

2)在服务类中注册reciver。

 @Override public void onCreate() { super.onCreate(); // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenReciever(); registerReceiver(mReceiver, filter); } 

3)完成