AlarmManager - 如何在每小时的顶部重复一个闹钟?

8
我希望每小时触发一个事件(例如在5:00、6:00、7:00等时间)。 我尝试使用带有线程的持久化后台服务,但这不是正确的解决方案,因为存在以下问题:
  • 电池消耗
  • 由于Android内存管理而导致服务终止
因此,我正在尝试使用AlarmManager。如果我设置一个在X秒后触发的闹钟(使用“set”方法),它可以正常工作。 但是如何重复一个事件(使用“setRepeating”方法),使其在每个小时的开始触发,直到取消闹钟?
谢谢!
1个回答

15

设置闹钟时,有两个时间:第一个触发时间和下一个触发间隔。

然后,您需要计算到下一个整点的剩余毫秒数,然后将一个小时设置为重复间隔。

// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += remainingMilisecondsToTopHour;
long a=c.getTimeInMillis();

// Schedule the alarm!
AlarmManager am = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME,
c.getTimeInMillis(), 1*60*60*1000, sender);

7
这段代码有点不太清楚。变量c是从哪里来的?为什么创建了变量a,却没有使用它? - RoundSparrow hilltx
回答不错,但大多数情况下它并不能在完全相同的时间工作,可能会在10-15分钟之前或之后。 - Lalit kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接