如何在android中每天设置三次警报?

时间:2016-04-14 07:25:49

标签: android alarmmanager android-alarms

我需要在每天上午9点,上午11点和下午1点设置闹钟。

简单的解决方案是使用三个不同的待处理Intent,但是是否有任何其他方式与一个待处理的Intent实现相同?

提前致谢!

2 个答案:

答案 0 :(得分:1)

谢谢,得到解决方案

只需要在同一个Intent中更改请求代码。它不会取消先前的警报。解决方案Click Here

答案 1 :(得分:0)

如果您有任何时间需要安排的警报数量有限,那么每个警报使用一个PendingIntent就可以了。

但是,如果您要安排的警报数量可能无限(或者可能只是很多),我认为更好的方法是提供可以对调度信息进行操作的调度程序。例如,如果您需要创建类似日历的内容,您可以在其中为每天设置一个或多个事件,那么您应该考虑这个approch。

您可以查看Android Calendar project

的警报部分

正如您所看到的,有一个名为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);
    }
}