【问题标题】:AlarmManager - How to repeat an alarm at the top of every hour?AlarmManager - 如何在每小时的顶部重复警报?
【发布时间】:2010-06-27 12:40:14
【问题描述】:

我希望每小时触发一次事件(在 5:00、6:00、7:00 等...)。 我尝试使用带有线程的持久后台服务,但它不是正确的解决方案,因为:

  • 电池消耗
  • 服务终止,由于 android 内存管理

所以我正在尝试使用 AlarmManager。如果我将警报设置为在 X 秒内触发(使用“设置”方法),它会起作用。 但是我怎样才能在每小时的顶部重复一个事件(使用“setRepeating”方法),直到闹钟被取消?

谢谢!

【问题讨论】:

    标签: android repeat alarmmanager


    【解决方案1】:

    当您设置警报时,您有两个时间:第一次触发时间和下一次触发间隔。

    然后您必须计算到下一小时的剩余毫秒数,然后将重复间隔设置为一小时。

    // 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);
    

    【讨论】:

    • 这段代码似乎有点不清楚。 c从哪里来?为什么 a 被创建了,然后从未使用过?
    • 很好的答案,但大多数情况下,它在 10-15 分钟之前或之后的工作时间并不完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多