Android alarmmanager 在特定日期设置警报并在所有周重复

Android alarmmanager set alarms in specific days and repeat them all the weeks

我正在制作一个可以设置闹钟的应用程序。它确实有效,但只有一次。 而且我需要做不止一次。我正在尝试做一个 class 计划警报。

例如我有 class 个星期一七点钟,所以我需要在每个星期一启动闹钟。但我还有另一个 class 星期二,我也必须这样做。

这是我的代码 pd-> rqs1 = 1

Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(System.currentTimeMillis());
        cal.set(Calendar.HOUR_OF_DAY, horai); // i put the hour with the interface
        cal.set(Calendar.MINUTE,minutoi);///
       cal.set(Calendar.DAY_OF_WEEK,dias.getSelectedItemPosition()+1);
        cal.add(Calendar.SECOND, 2);



        Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
        intent.putExtra("name", curso); // i put the name of the curso
      PendingIntent pendingIntent =
               PendingIntent.getBroadcast(getBaseContext(),
                      RQS_1, intent, PendingIntent.FLAG_ONE_SHOT);


    AlarmManager alarmManager =
            (AlarmManager)getSystemService(Context.ALARM_SERVICE);


    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);`

所以,我一直在寻找如何做到这一点。 请帮我 。谢谢

尝试使用 FLAG_UPDATE_CURRENT 代替 FLAG_ONE_SHOT.

还要确保在设备重启后重新安排警报。 Here 就是一个很好的例子。

1- 替换这个

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
        cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);`

有了这个:

alarmManager.set(AlarmManager.RTC_WAKEUP,
            cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);

2- 替换这个

PendingIntent pendingIntent =
           PendingIntent.getBroadcast(getBaseContext(),
                  RQS_1, intent, PendingIntent.FLAG_ONE_SHOT);

有了这个:

PendingIntent pendingIntent =
           PendingIntent.getBroadcast(getBaseContext(),
                  RQS_1, intent, PendingIntent.FLAG_UPDATE_CURRENT );

3- 在里面加上这个 onReceive:

  Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    intent.putExtra("name", curso); // i put the name of the curso
  PendingIntent pendingIntent =
           PendingIntent.getBroadcast(getBaseContext(),
                  RQS_1, intent, PendingIntent.FLAG_UPDATE_CURRENT );


AlarmManager alarmManager =
        (AlarmManager)getSystemService(Context.ALARM_SERVICE);


alarmManager.set(AlarmManager.RTC_WAKEUP,
        cal.getTimeInMillis(), 24 * 7 * 60 * 60 * 1000 , pendingIntent);`