2

我正在寻找一种在一定时间后运行服务的方法。但是,我不能使用标准的AlarmManager来解决这个问题,因为我不想依赖我的应用程序一直在运行,并且 AlarmManager 会考虑手机锁定的时间。

基本上,目标是在用户使用手机达到一定时间(例如一小时)后运行服务。此计时器应允许在手机锁定或关闭时休息。

4

1 回答 1

0

经过大量研究,我发现最好的方法如下:

  • setRepeating通过AlarmManager 的方法创建每 10 秒运行一次的服务。
  • 如果创建 AlarmManager 的应用程序曾经停止过,一旦应用程序重新启动,只需重新启动重复警报即可。
  • 当服务每 10 秒运行一次时,使用以下代码检查手机是否被锁定:

    KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); boolean locked = keyguardManager.inKeyguardRestrictedInputMode();

    如果电话未锁定,则让服务增加一个数据库变量,以 10 秒为单位跟踪时间。

  • 在更新数据库后,还要让服务检查总解锁时间是否超过最大时间。如果是这样,则激活任何事件。

如果有人提出更好(更清洁)的方法,我会接受这个答案。

于 2012-08-04T04:32:36.697 回答