我正在寻找一种在一定时间后运行服务的方法。但是,我不能使用标准的AlarmManager来解决这个问题,因为我不想依赖我的应用程序一直在运行,并且 AlarmManager 会考虑手机锁定的时间。
基本上,目标是在用户使用手机达到一定时间(例如一小时)后运行服务。此计时器应允许在手机锁定或关闭时休息。
我正在寻找一种在一定时间后运行服务的方法。但是,我不能使用标准的AlarmManager来解决这个问题,因为我不想依赖我的应用程序一直在运行,并且 AlarmManager 会考虑手机锁定的时间。
基本上,目标是在用户使用手机达到一定时间(例如一小时)后运行服务。此计时器应允许在手机锁定或关闭时休息。
经过大量研究,我发现最好的方法如下:
setRepeating
通过AlarmManager 的方法创建每 10 秒运行一次的服务。当服务每 10 秒运行一次时,使用以下代码检查手机是否被锁定:
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean locked = keyguardManager.inKeyguardRestrictedInputMode();
如果电话未锁定,则让服务增加一个数据库变量,以 10 秒为单位跟踪时间。
在更新数据库后,还要让服务检查总解锁时间是否超过最大时间。如果是这样,则激活任何事件。
如果有人提出更好(更清洁)的方法,我会接受这个答案。