如何在安卓系统上设置重复闹钟的工作日?

7
我希望仅在周一至周五收到警报。 我的代码如下:
if (chk_weekday.isChecked()) {

                    int day = calNow.get(Calendar.DAY_OF_WEEK);
                    if (day == 2 || day == 3 || day == 4 || day == 5
                            || day == 6) {

                        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                                calSet.getTimeInMillis(), 1 * 60 * 60 * 1000,
                                pendingIntent);

                    }

有一个想法。


1
另一种方法:创建5个闹钟(每天一个),并将重复时间设置为WEEK。 - Pankaj Kumar
3个回答

20

请尝试这段代码。它在我的应用程序中成功运行。

if (chk_monday.isChecked()) {
                        forday(2);
                    } else if (chk_tuesday.isChecked()) {
                        forday(3);
                    } else if (chk_wednesday.isChecked()) {
                        forday(4);
                    } else if (chk_thursday.isChecked()) {
                        forday(5);
                    } else if (chk_friday.isChecked()) {
                        forday(6);
                    } else if (chk_sat.isChecked()) {
                        forday(7);
                    } else if (chk_sunday.isChecked()) {
                        forday(1);
                    }

public void forday(int week) {

        calSet.set(Calendar.DAY_OF_WEEK, week);
        calSet.set(Calendar.HOUR_OF_DAY, hour);
        calSet.set(Calendar.MINUTE, minuts);
        calSet.set(Calendar.SECOND, 0);
        calSet.set(Calendar.MILLISECOND, 0);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                calSet.getTimeInMillis(), 1 * 60 * 60 * 1000, pendingIntent);
    }

2
如果用户想为多天设置闹钟,它将无法正常工作。 - Lucifer
我同意@Lucifer的观点,如果用户设置了多个星期的闹钟,这将无法工作,这只适用于单选项。 - HeartlessArchangel
4
请将以下内容翻译成中文:remove "if{}else if{}.."just use "if{} if{}..." then it should set alarm for multiple days....:) 请移除 "if{}else if{}..",改用 "if{} if{}...",这样就可以设置多天的闹钟.... :) - Melbourne Lopes
3
你每小时都在重复它。对于每周,公式应为24 * 7 * 60 * 60 * 1000。 - Mitesh Shah
为什么不把所有复选框添加到一个复选框数组中,然后使用for循环检查选中的复选框并将它们的索引保存到另一个数组中,之后再使用另一个for循环为该数组中的每个数字设置警报。 - Tamim Attafi
显示剩余2条评论

4

根据你的问题,我相信你想在除了周六和周日外的每天执行某些活动。所以你的代码是正确的,但你声明的方式有误,按照以下方式进行更改并尝试:

在OnCreate()方法中声明闹钟。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), 1 * 60 * 60 * 1000,  pendingIntent);

现在你的闹钟已经设定为每天重复,除了周六、周日,你需要每天都执行操作。
  if (chkMonday.isChecked()) 
  {
      activityToPerform();
  }

  if (chkTuesday.isChecked()) 
  {
      activityToPerform();
  }

  if (chkWednesday.isChecked()) 
  {
      activityToPerform();
  }

  if (chkThrusday.isChecked()) 
  {
      activityToPerform();
  }

  if (chkFriday.isChecked()) 
  {
      activityToPerform();
  }

  if (chkSaturday.isChecked()) 
  {
      activityToPerform();
  }

  if (chkSunday.isChecked()) 
  {
      activityToPerform();
  }

  private void activityToPerform()
  {
    // your action code
  }

你能举一个例子吗? - ckpatel
非常感谢您。但还有一件事。我有7个星期几的复选框,假设我勾选了星期一、星期二、星期五,那么只会弹出3天的警报。您能给我提供建议吗? - ckpatel
建议您什么?请简要提出您的问题。 - Lucifer
假设我有7个复选框,分别为星期一到星期日。如果我只勾选星期一、星期五和星期日这三个选项,则只会在这三天响起闹钟。例如,闹钟只会在星期一、星期五和星期日响起。请给出任何示例。 - ckpatel
你每小时都在重复它。对于每周的公式将是24 * 7 * 60 * 60 * 1000。 - Mitesh Shah
显示剩余2条评论

2

一种方法是当广播接收到警报通知时,检查下一天是否为星期六,如果是,则将警报设置为星期一,否则只需添加1天即可创建。

每次都需要设置新的闹钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接