在android中设置重复星期几闹钟
Posted
技术标签:
【中文标题】在android中设置重复星期几闹钟【英文标题】:Set Repeat days of week alarm in android 【发布时间】:2013-07-27 11:22:30 【问题描述】:有人可以给出设置重复星期警报的良好逻辑吗?我已经使用了每周警报
alarmCalendar.set(Calendar.HOUR, AlarmHrsInInt);
alarmCalendar.set(Calendar.MINUTE, AlarmMinsInInt);
alarmCalendar.set(Calendar.SECOND, 0);
alarmCalendar.set(Calendar.AM_PM, amorpm);
Long alarmTime = alarmCalendar.getTimeInMillis();
Intent intent = new Intent(Alarm.this, AlarmReciever.class);
intent.putExtra("keyValue", key);
PendingIntent pi = PendingIntent.getBroadcast(Alarm.this, key, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, 7*1440*60000 , pi);
闹钟准时触发,7天后自动触发。
但我的要求是我想选择天而不是仅仅 7 天。
例如每周一、周二、周四上午 9:00 - 闹钟应该会自动触发。如何在 setRepeating 中执行此操作?
有人可以帮我解决这个问题吗?
谢谢!
【问题讨论】:
【参考方案1】:这些问题和你想的一样。这些答案会很有帮助:
您只需要指定开始它的日期,然后每 7 天重复一次。在给定问题的答案中指定了几种方法:
How can i get the repeat alarm for week days using alarm manager?
android Notification on specific weekday goes off directly
how to repeat alarm week day on in android
更新:
在你的评论中你说
如何在 setRepeating 中设置 triggerAtMillis 部分。比如说今天是星期二,我选择每周星期一、星期三、星期五。 - 星期三我要放什么?
我的理解是,如果今天是星期二,如何设置闹钟让我们说星期三重复,对吧?首先是的,您可以使用多个 id 分别为每一天设置警报。
然后您可以将alarmCalendar.set(Calendar.DAY_OF_WEEK, week);
行添加到您现有的代码中。根据工作日(从 1 到 7),它会在当天重复。您可以将其作为参数传递给函数。喜欢:
setAlarm(2); //set the alarm for this day of the week
public void setAlarm(int dayOfWeek)
// Add this day of the week line to your existing code
alarmCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
alarmCalendar.set(Calendar.HOUR, AlarmHrsInInt);
alarmCalendar.set(Calendar.MINUTE, AlarmMinsInInt);
alarmCalendar.set(Calendar.SECOND, 0);
alarmCalendar.set(Calendar.AM_PM, amorpm);
Long alarmTime = alarmCalendar.getTimeInMillis();
//Also change the time to 24 hours.
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, 24 * 60 * 60 * 1000 , pi);
我从上述问题之一中获取了示例。希望现在更清楚。
【讨论】:
你的意思是说我必须为不同的闹钟日期设置不同的ID。但是如何在 setRepeating 中设置 triggerAtMillis 部分。比如说今天是星期二,我选择每周星期一、星期三、星期五。 - 从当前时间起 1 天后的周三触发器应该放什么? 是的,不同的警报有不同的 ID。对于您的第二部分,请参阅更新后的答案。 @Shobit Puri 我想在工作日设置闹钟,以上示例有效,但如何像每个星期二、星期三一样设置每周。如果我将触发时间设置为 7 天,那么如果第二天是星期二,则它不起作用。你能帮忙吗? 主要是因为我必须在工作日每1/2/3周设置一次闹钟,所以我必须玩触发时间 @droid_dev 您想为工作日的每一天或每个星期二设置闹钟等【参考方案2】:要设置工作日的重复警报,请使用以下代码。希望这会有所帮助。
Calendar calender= Calendar.getInstance();
calender.set(Calendar.DAY_OF_WEEK, weekNo); //here pass week number
calender.set(Calendar.HOUR_OF_DAY, hour); //pass hour which you have select
calender.set(Calendar.MINUTE, min); //pass min which you have select
calender.set(Calendar.SECOND, 0);
calender.set(Calendar.MILLISECOND, 0);
Calendar now = Calendar.getInstance();
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);
if (calender.before(now)) //this condition is used for future reminder that means your reminder not fire for past time
calender.add(Calendar.DATE, 7);
final int _id = (int) System.currentTimeMillis(); //this id is used to set multiple alarms
Intent intent = new Intent(activity, YourServiceClass.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, _id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), 7 * 24 * 60 * 60 * 1000, pendingIntent);
【讨论】:
【参考方案3】:if (Monday.isChecked())
setalarm(2);
else if (Tuesday.isChecked())
setalarm(3);
else if (Wednesday.isChecked())
setalarm(4);
else if (Thursday.isChecked())
setalarm(5);
else if (Friday.isChecked())
setalarm(6);
else if (Saturday.isChecked())
setalarm(7);
else if (Sunday.isChecked())
setalarm(1);
public void setalarm(int weekno)
cal.set(Calendar.DAY_OF_WEEK, weekno);
cal.set(Calendar.MINUTE, min);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), 1 * 60 * 60 * 1000, pendingIntent);
【讨论】:
我可能弄错了,但似乎这是让闹钟在一周内重复的唯一答案,而不是第二天。【参考方案4】:Intent intent1 = new Intent(getApplicationContext(),
NotificationReceiver.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),
1,
intent1,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager1 = (AlarmManager)getSystemService(ALARM_SERVICE);
java.util.Calendar calendar1 = java.util.Calendar.getInstance();
calendar1.set(java.util.Calendar.DAY_OF_WEEK,
Calendar.MONDAY);
calendar1.set(java.util.Calendar.HOUR_OF_DAY,
22);
calendar1.set(java.util.Calendar.MINUTE,
8);
calendar1.set(java.util.Calendar.SECOND,
0);
alarmManager1.setExact(AlarmManager.RTC, calendar1.getTimeInMillis(), pendingIntent1);
【讨论】:
以上是关于在android中设置重复星期几闹钟的主要内容,如果未能解决你的问题,请参考以下文章
使用对象 java.util.Date 时出现错误的星期几 [重复]