要实现一个简单的睡眠检测应用程序,我需要处理ACTION_SCREEN_OFF
和ACTION_SCREEN_ON
广播,以获得与用户睡眠相关的时间(基于设备不活动)。但是,这些广播不能放在舱单中;接收方必须在某个应用程序组件中取消/注册。
我该如何实现?在我看来,注册接收器,比方说,
a Service
不会做太多事情,因为在服务完成后它应该要求取消注册。除非我有一个长期,持久的服务,没有做任何事情。
答案 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);
请勿忘记在服务被终止后取消注册,并且在创建服务时始终只注册一次。