我正在尝试在屏幕打开时调用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)项目中。
谷歌代码搜索显示了这一点,我下载了项目并同步了它,将其转换为使用最新工具,但它也无法拦截该事件。
这可能不再受支持了吗?
以前我已经能够通过调用Context.registerReceiver()来成功拦截此事件
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// ...
}
}, new IntentFilter(Intent.ACTION_SCREEN_ON));
然而,这是由一个长寿服务。遵循CommonsWare的sage建议,我选择尝试删除长期服务并使用不同的技术。但是我仍然需要检测屏幕上的事件。
答案 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)完成