android.intent.action.SCREEN_ON不能用作接收器意图过滤器

时间:2010-04-04 17:27:05

标签: android broadcastreceiver

我正在尝试在屏幕打开时调用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级别4)项目中。

谷歌代码搜索显示了这一点,我下载了项目并同步了它,将其转换为使用最新工具,但它也无法拦截该事件。

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的sage建议,我选择尝试删除长期服务并使用不同的技术。但是我仍然需要检测屏幕上的事件。

3 个答案:

答案 0 :(得分:13)

  

遵循CommonsWare的sage建议   我选择试图删除   长寿服务与使用不同   技术。

实际上,我相信我的建议更像是浅蓝色......: - )

  

但我仍然需要检测屏幕   关闭和开启事件。

某些事件Android不想启动新进程,因此设备不会因为一次性运行所有类型的东西而变得太慢。 ACTION_SCREEN_ON就是其中之一。有关该主题的浅蓝色建议,请参阅此previous question

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

答案 1 :(得分:1)

答案 2 :(得分:-1)

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)完成