【问题标题】:How can I set exact, repeating alarms in Android 4.4?如何在 Android 4.4 中设置准确、重复的闹钟?
【发布时间】:2014-11-16 16:52:48
【问题描述】:

现在,我正在设置这样的闹钟:

        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

        timedate = cal.getTime();

        //convert date to milis
        long timeInMilis = (timedate.getTime());

        //Set Alarm to Repeat
        manager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMilis, interval, pendingIntent);

不幸的是,重复的预定时间不准确,我读到它们可能在整个间隔内都不准确!

所以,我想切换到设置精确的重复警报。我的设备至少需要最新的 API 19/Android 4.4,所以我不能使用 setRepeating。

我可以做些什么来设置精确的重复警报?

【问题讨论】:

标签: java android android-alarms


【解决方案1】:

不幸的是,重复的预定时间不准确,我读到它们可能在整个间隔内都不准确!

如果您的targetSdkVersion 为 19 岁或更高,则可以。

我可以做些什么来设置精确的重复警报?

使用setExact() 来控制您的初始延迟。然后,作为处理该事件的工作的一部分,使用setExact() 在下一个所需时间获得控制权。 IOW,你自己做“重复”的部分。

是的,这很烦人。

故意让开发人员使用精确的重复警报很烦人,因为这些警报比不精确的兄弟更糟糕。如果用户会察觉到不准确的行为并且不会欣赏它,请随时使用setExact() 使警报在用户需要时发生。但是,如果用户不会察觉到不精确的行为,请使用不精确的警报,因为用户可能会注意到您的精确警报对电池的影响。

【讨论】:

  • 我需要设置一个精确的重复警报,因为这是我的应用程序的重点:( 我希望我可以使用不精确的。我想我的主要问题是我可以在我的代码中使用上面的 SetExact() 但是在哪里我应该重新安排闹钟吗?在广播接收器中?如何?
  • @KalaJ:“在广播接收器中?” - 鉴于您问题中的代码,是的。 “如何?” -- 通过在onReceive() 中的AlarmManager 上调用setExact(),表示您何时想再次获得控制权。请记住,“精确”有点用词不当,因为 Android 不是实时操作系统,因此您将在初始时间附近获得控制权,而不是在那个时候精确控制。因此,您将需要在您的BroadcastReceiver 中调用setExact() 来指定您想要控制“for realz”的时间,而不仅仅是从现在开始增加 X 时间,否则几个警报周期的累积漂移可能会给您带来一些问题。
  • 好的,但是如果我有几个应该重复的警报?我只需要使用独特的待处理意图来区分它们吗?如果是这样,那么我只想说如果这个待定意图......然后这样做。如果这个待定意图,比这样做吗?
  • @KalaJ:“我还能指定间隔/它重复的频率吗?” - 不。 setExact() 就像旧的 set()。这是一次性的活动。这就是为什么你必须在每个事件上调用它来设置下一个事件。 “之后它会像 setRepeating 一样无限重复吗?” - 不。这就是为什么你必须在每个事件上调用它来设置下一个事件。 “我还需要做什么特别的事情吗?” -- 你必须在每个事件上调用它来设置下一个事件。
  • @KalaJ: My PowerHungry sample app 演示了使用setExact() 来模拟精确的重复警报,尽管我并不担心事件时间漂移。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
相关资源
最近更新 更多