我需要在每天上午9点,上午11点和下午1点设置闹钟。
简单的解决方案是使用三个不同的待处理Intent,但是是否有任何其他方式与一个待处理的Intent实现相同?
提前致谢!
答案 0 :(得分:1)
谢谢,得到解决方案
只需要在同一个Intent中更改请求代码。它不会取消先前的警报。解决方案Click Here
答案 1 :(得分:0)
如果您有任何时间需要安排的警报数量有限,那么每个警报使用一个PendingIntent
就可以了。
但是,如果您要安排的警报数量可能无限(或者可能只是很多),我认为更好的方法是提供可以对调度信息进行操作的调度程序。例如,如果您需要创建类似日历的内容,您可以在其中为每天设置一个或多个事件,那么您应该考虑这个approch。
的警报部分正如您所看到的,有一个名为AlarmScheduler
的类,其中有一个方法
void scheduleNextAlarm(Context context, AlarmManagerInterface alarmManager,
int batchSize, long currentMillis)
确定需要安排的下一个警报。
在具体实现中,您可以看到该方法调用另一种方法:
queryUpcomingEvents()
通过内容提供商(Calendar provider)运行并获取即将发生的事件。
每次触发新警报时,您都可以重新安排新警报,查看内容提供商(或存储调度信息的任何位置),或者您可以应用不同的调度策略。例如,如果用户在日历上为事件创建新的提醒器,则需要重新安排警报(例如,您可以决定安排今天的所有警报,或仅安排下一个警报)。
在我的应用程序中,我通常使用以下代码(在警报触发时触发的onReceive()
BroadcastReceiver
内):
private void restartScheduler(Context context){
Intent t = new Intent("it.gvillani.socialapp.alerts.SCHEDULE_REQUEST");
context.sendBroadcast(t);
}
当然,我有BroadcastReceiver
等待该操作,并尝试重新安排警报:
public class SchedulerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context c, Intent intent) {
if (intent.getAction().equals("it.gvillani.socialapp.alerts.SCHEDULE_REQUEST")) {
startScheduler(c);
}
}
private void startScheduler(Context c) {
AlarmScheduler.clearAlarms(c);
AlarmScheduler.scheduleNextAlarm(c);
}
}