android如何设置每天三次闹钟?
How to set alarm thrice in everyday in android?
我需要在每天上午 9 点、上午 11 点和下午 1 点设置闹钟。
简单的解决方案是使用三个不同的待定 Intent,但是 是否有任何其他方法可以使用一个待定 Intent 来实现相同的目的?
提前致谢!
谢谢,已解决
只需要在同一个Intent中修改request code即可。它不会取消以前的警报。 Click Here 解决方案
如果您随时需要安排的闹钟数量有限,也许每个闹钟使用一个 PendingIntent
就可以了。
但是,如果您要安排的警报数量可能不受限制(或者可能只是很多),我认为更好的方法是提供一个可以根据计划信息采取行动的计划程序。例如,如果您需要创建日历之类的东西,您可以在其中为每一天设置一个或多个事件,则应考虑此方法。
您可以查看 Android Calendar project
的警报部分
如您所见,有一个名为 AlarmScheduler
的 class,其中您有一个方法
void scheduleNextAlarm(Context context, AlarmManagerInterface alarmManager,
int batchSize, long currentMillis)
这决定了下一个需要安排的闹钟。
在具体实现中可以看到该方法调用了另外一个方法:
queryUpcomingEvents()
在内容提供商 (Calendar provider) 上运行并获取即将发生的事件。
每次触发新警报时,您都可以重新安排一个新警报,查看内容提供商(或存储计划信息的任何位置),或者您可以应用不同的计划策略。例如,如果用户为日历上的事件创建新提醒,您需要重新安排闹钟(例如,您可以决定安排今天的所有闹钟,或只安排下一个闹钟)。
在我的应用程序中,我通常使用以下代码(在警报触发时触发的 BroadcastReceiver
的 onReceive()
内):
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);
}
}
我需要在每天上午 9 点、上午 11 点和下午 1 点设置闹钟。
简单的解决方案是使用三个不同的待定 Intent,但是 是否有任何其他方法可以使用一个待定 Intent 来实现相同的目的?
提前致谢!
谢谢,已解决
只需要在同一个Intent中修改request code即可。它不会取消以前的警报。 Click Here 解决方案
如果您随时需要安排的闹钟数量有限,也许每个闹钟使用一个 PendingIntent
就可以了。
但是,如果您要安排的警报数量可能不受限制(或者可能只是很多),我认为更好的方法是提供一个可以根据计划信息采取行动的计划程序。例如,如果您需要创建日历之类的东西,您可以在其中为每一天设置一个或多个事件,则应考虑此方法。
您可以查看 Android Calendar project
的警报部分如您所见,有一个名为 AlarmScheduler
的 class,其中您有一个方法
void scheduleNextAlarm(Context context, AlarmManagerInterface alarmManager,
int batchSize, long currentMillis)
这决定了下一个需要安排的闹钟。
在具体实现中可以看到该方法调用了另外一个方法:
queryUpcomingEvents()
在内容提供商 (Calendar provider) 上运行并获取即将发生的事件。
每次触发新警报时,您都可以重新安排一个新警报,查看内容提供商(或存储计划信息的任何位置),或者您可以应用不同的计划策略。例如,如果用户为日历上的事件创建新提醒,您需要重新安排闹钟(例如,您可以决定安排今天的所有闹钟,或只安排下一个闹钟)。
在我的应用程序中,我通常使用以下代码(在警报触发时触发的 BroadcastReceiver
的 onReceive()
内):
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);
}
}