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);`
我正在制作一个可以设置闹钟的应用程序。它确实有效,但只有一次。 而且我需要做不止一次。我正在尝试做一个 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);`