Android 警报仅在工作日重复

Android 警报仅在工作日重复,android,alarmmanager,Android,Alarmmanager,这将在周一每周发射一次,但: 我想只在工作日(没有周六和周日)设置挂起的报警意图,如何只使用一个意图? 我不想使用5个具有5个不同ID的不同PendingEvents,因为这样我就必须取消5个不可能将日历设置为多个日期,因此您无法按自己喜欢的方式执行 我建议您每天重复闹钟,并在onReceive登记当天,如果是周六/周日,请立即返回,不要做任何事情 Calendar calendar = Calendar.getInstance(); calendar.set(Cale

这将在周一每周发射一次,但: 我想只在工作日(没有周六和周日)设置挂起的报警意图,如何只使用一个意图?
我不想使用5个具有5个不同ID的不同PendingEvents,因为这样我就必须取消5个

不可能将日历设置为多个日期,因此您无法按自己喜欢的方式执行

我建议您每天重复闹钟,并在onReceive登记当天,如果是周六/周日,请立即返回,不要做任何事情

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);
接受者

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.
    }
}
创建cancelAlarm方法(可选,如果您想在某处使用):

检查您的
onReceive()中的日期

PS:别忘了使用:
setAlarm(AlarmManager.INTERVAL\u DAY)在第一次的某处设置闹钟

我认为这应该行得通

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); 
}
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);
}
@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;
}