1

我通过以下方式启动闹钟:

protected void onHandleIntent(Intent intent) {
    Log.v("alarm", "onHandleIntent");

    int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP;
    long interval = AlarmManager.INTERVAL_HALF_HOUR;
    long timeToRefresh = SystemClock.elapsedRealtime() + interval;

    alarmManager.setInexactRepeating(alarmType, timeToRefresh, interval, alarmIntent);

    updateService();
}

但是警报不是每 30 分钟触发一次,而是每 45 分钟触发一次。为什么?setInexactRepeating 的容差是 15 分钟吗?

4

2 回答 2

0

从文档中,“您的警报的第一次触发不会在请求的时间之前,但它可能不会在该时间之后的几乎整个间隔内发生。此外,虽然重复警报的整个周期将按照要求,但之间的时间任何两次连续触发的警报可能会有所不同。如果您的应用程序需要非常低的抖动,请改用 setRepeating(int, long, long, PendingIntent)。”

来源:AlarmManager

于 2012-11-20T20:30:37.530 回答
0

你应该使用RTC_WAKEUP,因为这基本上更有意义。它是now(如在挂钟上,而不是自启动等)并且您希望在“ now+ 30 分钟”内唤醒。

于 2012-11-20T20:33:50.257 回答