3

这是我到目前为止的代码

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
setRepeatingAlarm();

public void setRepeatingAlarm() {

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 10);

    Intent intent = new Intent(this, TimeAlarm.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), (15 * 1000), pendingIntent);
  }

}

这就是我想要完成的所有事情:闹钟要到每分钟过去 30 秒才会打开。一旦你清除它,它直到下一分钟后 30 秒才会恢复。因此,如果我打开应用程序,并且是每分钟 25 秒,它将在 5 秒后激活状态栏通知。但是如果已经过去了 40 秒,我将不得不再等 50 秒(到下一分钟)。我不确定如何使用日历功能来实现这一点?

4

2 回答 2

3

如果我了解您的要求,那么您可以尝试以下操作...

Calendar cal = Calendar.getInstance();
if (cal.get(Calendar.SECOND) >= 30)
    cal.add(Calendar.MINUTE, 1);
cal.set(Calendar.SECOND, 30);

// Do the Intent and PendingIntent stuff

am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60 * 1000, pendingIntent);
于 2012-06-05T22:12:30.920 回答
0

如果您检查文档AlarmManager,它会说RTC_WAKEUP使用时间相对于System.currentTimeMillis()

RTC_WAKEUP System.currentTimeMillis() 中的闹钟时间(UTC 挂钟时间),它会在设备关闭时唤醒设备。

因此,只需修改您的triggerAtTime参数,例如立即开始:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 15 * 1000, pendingIntent);

然后警报将每 15 秒重复触发一次。

于 2012-06-05T22:12:44.523 回答