8

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

4

3 回答 3

13

根据 CommonsWare 的明智建议,我选择尝试删除长期服务并使用不同的技术。

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

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

Android 不希望为某些事件启动新进程,因此设备不会因为各种必须同时运行的东西而变得太慢。ACTION_SCREEN_ON就是其中之一。有关该主题的浅蓝色建议,请参阅上一个问题。

所以,你需要问自己,“我自己,我真的需要控制这些事件吗?”。如果您的回答是“否”,核心 Android 团队会很高兴。

于 2010-04-05T01:46:27.180 回答
1

这是我找到的最好的例子http://androidexample.com/Screen_Wake_Sleep_Event_Listner_Service_-_Android_Example/index.php?view=article_discription&aid=91&aaid=115

于 2013-12-06T21:55:57.953 回答
-1

Actullay 我遇到了这个问题,但我成功解决了

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

于 2017-04-20T13:46:48.467 回答