从AlarmManager获取已用时间

时间:2014-11-05 23:35:28

标签: android android-service

非常新的android,如果这是一个愚蠢的问题,请原谅我......

所以,我正在制作一个带有倒数计时器的应用程序,它会定期响铃,然后在倒计时到达零时再次 - 足够简单。但是,即使用户关闭应用程序或手机处于睡眠状态,我希望应用程序继续运行,这样每当计时器响起时,应用程序将会唤醒并显示一个活动,显示倒计时结束前的时间。要做到这一点,我需要使用一项服务,并且看,谷歌开发者为我做了AlarmManager服务!甜!

然而,我发现了两件事:

1)AlarmManager类没有默认构造函数,所以我假设我不能只是扩展它并加上一些逻辑,以便我可以一次性完成所有这些操作。好的,很酷 - 我只是创建一个在开始时实例化AlarmManager的服务,并在那里实现我的逻辑。

2)在文档中,我没有看到任何方式获取经过时间或来自AlarmManager的剩余时间。

所以,我的问题是:这是否意味着我需要两个同时开始的定时器?比方说,一个AlarmManager唤醒手机并调用活动,并且服务中包含一个CountDownTimer来保存剩余时间并拨打警报铃声?

感谢您帮助解决我无能为力的屁股。

1 个答案:

答案 0 :(得分:0)

您可以延长AlarmManager。然而,常见的方法是获取它的一个实例,它作为系统服务运行。

使用Context.getSystemService(Context.ALARM_SERVICE)获取实例,您就可以将PendingIntent注册到该系统服务,该服务独立于您自己的应用。 PendingIntent可以启动某个活动,也可以使用某些Intent发送广播。您不会在AlarmManager内不断监控已用时间。而是计算方法调用的当前时间与触发事件所需的时间之间的时间差。然后在AlarmManager中设置一个警报,其中PendingIntent表示您希望在该时间间隔或时间点采取的操作。

另一方面,如果您希望获得最大的灵活性,请将您的服务作为前台服务运行,并监听系统广播,例如ACTION_TIME_TICK,每分钟都会触发一次。或者,如果您不在前台运行服务,您也可以使用START_STICKY运行服务,这可以保证您的服务在系统终止后重新启动(由于睡眠或关闭应用程序)。将此视为持续运行的后台服务。这为您的实施提供了很大的灵活性。