始终检查屏幕是否开启

时间:2017-04-29 13:40:47

标签: android

要实现一个简单的睡眠检测应用程序,我需要处理ACTION_SCREEN_OFFACTION_SCREEN_ON广播,以获得与用户睡眠相关的时间(基于设备不活动)。但是,这些广播不能放在舱单中;接收方必须在某个应用程序组件中取消/注册。

我该如何实现?在我看来,注册接收器,比方说, a Service不会做太多事情,因为在服务完成后它应该要求取消注册。除非我有一个长期,持久的服务,没有做任何事情。

1 个答案:

答案 0 :(得分:0)

您可以创建一个注册到广播接收器的STIKY服务。

在广播中检查onReceive方法中的开/关状态:

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
    // screen off
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
    // screen on
}

并在您的服务中注册:

YourBroadcastReceived receiver = new YourBroadcastReceiver();
IntentFilter screenStateFilter = new IntentFilter();
screenStateFilter.addAction(Intent.ACTION_SCREEN_ON);
screenStateFilter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, screenStateFilter);

请勿忘记在服务被终止后取消注册,并且在创建服务时始终只注册一次。