android - 闹钟仅在工作日重复

标签 android alarmmanager

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

这将在每周星期一触发一次,但是: 我想仅在工作日(不含周六和周日)设置挂起的警报 Intent ,如何仅使用一个 Intent 来做到这一点? 我不想使用 5 个不同的 PendingIntents 和 5 个不同的 ID,因为这样我就必须取消 5 个

最佳答案

也许:

创建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);

我认为这应该可行。

关于android - 闹钟仅在工作日重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35698160/

相关文章:

android - setAlarmClock(信息,pi);作为 setRepeating() 工作

android - 需要知道什么时候是新的一天,即时间是 00 :00:00

java - 在android中跟踪FTP上传数据?

java - Service 内部的 Handler 和 Thread 一直在运行,而 Service 似乎已经停止

android - AlarmManager 永远不会为 BroadcastReceiver 返回事件,如何调试?

Android:有没有办法阻止在 BootReceiver 中触发 AlarmReceiver

Android 导航栏顶部

android - Android 工具栏的 2 个问题,隐藏的翻译和图标问题

关闭应用后取消安卓闹钟

android - 我应该使用 AlarmManager 还是 Handler?