我的应用程序应检测用户是否正在睡觉,当用户醒来并在早上,下午或醒来时第一次打开电话时通过欢迎消息启动,按下电源putton并在主屏幕或别针或其他任何地方输入图案。
我想通过测量上次使用设备的时间来做到这一点。我假设8小时的睡眠,所以如果自上次关闭后8小时过去,下次打开手机时,应用程序启动(分别是内部功能)。
由于发出警报或除了用户互动之外的任何事情而导致的屏幕不应计算在内。
我查看了logcat,它给了我有用的信息I/PowerManagerService: Going to sleep due to power button
。所以PowerManagerServiceListener可能是一种方式。我发现https://developer.android.com/reference/android/os/PowerManager.html但它主动保持显示,而不是被动报告。
另一位候选人是KeyguardViewMediator: onStartedGoingToSleep(2)
和KeyguardServiceDelegate: onScreenTurnedOff()
。
当然,我可以创建一个通过logcat查看的轮询应用程序,但这听起来像是一种强烈耗尽电池的方法。
哪种表现友好的方式可以实现我的目标?
答案 0 :(得分:0)
根据您的描述,您感兴趣的是小时数。然后,您可以每小时安排重复闹钟(请参阅Scheduling Repeating Alarms),将时间保存在共享首选项中,接收BOOT_COMPLETED
广播,比较时间并决定要做什么。
但是,我想很多用户都没有关闭他们的设备,所以我会试着找出你的方法所基于的假设是否有效。
您还可以Snapshot Awareness API尝试getDetectedActivity()
,并在指定的时间间隔内检查DetectedActivity是否为STILL
。