AlarmManager - 如何在每小时整点重复闹钟?

发布于 2024-09-07 08:46:15 字数 254 浏览 6 评论 0原文

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

  • 电池消耗
  • 由于android内存管理,

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

谢谢!

I want for an event to fire every hour (at 5:00, 6:00, 7:00, etc...).
I tried with a persistent background service with a thread but it wasn't the right solution because of:

  • battery consumption
  • service termination, due to android memory management

So I'm trying with AlarmManager. It works if I set an alarm to fire in X seconds (using "set" method).
But how can I repeat an event (using "setRepeating" method) at the top of every hour, until the alarm is canceled?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜光 2024-09-14 08:46: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);

When you set alarms you have two times: First trigger time, and the next trigger interval.

You then have to calculate the remaining miliseconds to the next top of the hour, then set one hour for the repeating interval.

// 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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文