android.intent.action.SCREEN_ON不能作为接收器意图过滤器工作。

9

我正在尝试在屏幕开启时调用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的明智建议后,我选择尝试删除长期运行的服务并使用不同的技术。但我仍然需要检测屏幕开关事件。

3个回答

14

根据CommonsWare的明智建议,我决定尝试删除长期运行的Service并使用不同的技术。

实际上,我认为我的建议更像是淡蓝色的... :-)

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

Android中有一些事件,设备不希望为这些事件启动新进程,以免设备因所有的东西都必须同时运行而变得过慢。其中之一就是ACTION_SCREEN_ON。请参见此先前的问题,了解与该主题相关的淡蓝色建议。

因此,你需要问自己,“我真的需要控制这些事件吗?”如果你的答案是“不需要”,那么Android核心团队会很高兴。


2
谢谢 CW。如果在运行时或文档中有关于无法捕获ACTION_SCREEN_ON的警告,那就太棒了。我将此归类为“陷阱”。 - Jim Blackler
1
是的,我认为他们记录了 ACTION_BATTERY_CHANGED ——这种现象的典型例子——的行为方式,但他们肯定跳过了这个。如果您在源代码中搜索 ACTION_SCREEN_ON(例如通过 Google 代码搜索)并在其在 PowerManagerService 中的使用中找到注册接收器标志仅被设置,则会注意到。 - CommonsWare


-1

其实我曾经遇到这个问题,但我已成功解决了它。

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

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

2) 在服务类中注册接收器。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接