闹钟仅在工作日重复
Alarm repeating only on weekdays
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // Tue, Wed...
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7*24*60*60*1000, pi);
这将在星期一每周触发一次,但是:
我想只在工作日(没有周六和周日)设置未决警报意图,如何只使用一个意图来做到这一点?
我不想使用 5 个不同的 PendingIntents 和 5 个不同的 ID,因为这样我就必须取消 5
无法将日历设置为多个日期,因此您不能按照自己喜欢的方式进行设置。
我建议您每天重复闹钟并在 onReceive 中检查今天是哪一天,如果是 saturday/sunday 就立即 return 并且不要做任何事情。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyClass.class), 0);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24 * 60 * 60 * 1000, pi);
接收方
public class MyClass extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (today == sunday || today == saturday) {
return;
}
// do normal stuff.
}
}
也许:
创建setAlarm方法:
public void setAlarm(long interval){
Calendar calendar = Calendar.getInstance();
//Alarm will go off at 1
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pi);
}
创建cancelAlarm方法(可选,如果你想在某处使用它):
public void cancelAlarm(Context context){
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(pi);
}
检查您 onReceive()
中的日期
@Override
public void onReceive(Context context, Intent intent) {
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK); //Sunday = 1, Saterday = 7
switch(day){
case 6: //Friday
long interval = 3*24*60*60*1000 //skip saterday and sunday
setAlarm(interval);
case 2: //Monday
setAlarm(AlarmManager.INTERVAL_DAY); //Alarm will repeat everyday, until friday
break;
}
PS: 不要忘记在第一次的某个地方设置闹钟,使用:setAlarm(AlarmManager.INTERVAL_DAY);
我认为这应该可行。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // Tue, Wed...
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7*24*60*60*1000, pi);
这将在星期一每周触发一次,但是: 我想只在工作日(没有周六和周日)设置未决警报意图,如何只使用一个意图来做到这一点? 我不想使用 5 个不同的 PendingIntents 和 5 个不同的 ID,因为这样我就必须取消 5
无法将日历设置为多个日期,因此您不能按照自己喜欢的方式进行设置。
我建议您每天重复闹钟并在 onReceive 中检查今天是哪一天,如果是 saturday/sunday 就立即 return 并且不要做任何事情。
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyClass.class), 0);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24 * 60 * 60 * 1000, pi);
接收方
public class MyClass extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (today == sunday || today == saturday) {
return;
}
// do normal stuff.
}
}
也许:
创建setAlarm方法:
public void setAlarm(long interval){
Calendar calendar = Calendar.getInstance();
//Alarm will go off at 1
calendar.set(Calendar.HOUR_OF_DAY, 1);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pi);
}
创建cancelAlarm方法(可选,如果你想在某处使用它):
public void cancelAlarm(Context context){
PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context,MyClass.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(pi);
}
检查您 onReceive()
@Override
public void onReceive(Context context, Intent intent) {
Calendar calendar = Calendar.getInstance();
int day = calendar.get(Calendar.DAY_OF_WEEK); //Sunday = 1, Saterday = 7
switch(day){
case 6: //Friday
long interval = 3*24*60*60*1000 //skip saterday and sunday
setAlarm(interval);
case 2: //Monday
setAlarm(AlarmManager.INTERVAL_DAY); //Alarm will repeat everyday, until friday
break;
}
PS: 不要忘记在第一次的某个地方设置闹钟,使用:setAlarm(AlarmManager.INTERVAL_DAY);
我认为这应该可行。