Android 如何为不同的日期设置AlarmManager?

Android 如何为不同的日期设置AlarmManager?,android,android-intent,alarmmanager,Android,Android Intent,Alarmmanager,我已经在Android上完成了一个小的报警应用程序,它工作得很好,但是,现在它只能为一天设置一个报警,但是它的设计是为了选择不同的日子,例如(星期一、星期三、星期五)。这是我设置警报的方式: Calendar cal = Calendar.getInstance(); //tPicker is a TimePicker cal.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour()); cal.set(Calendar.MINUTE, tPicke

我已经在Android上完成了一个小的报警应用程序,它工作得很好,但是,现在它只能为一天设置一个报警,但是它的设计是为了选择不同的日子,例如(星期一、星期三、星期五)。这是我设置警报的方式:

Calendar cal = Calendar.getInstance();

//tPicker is a TimePicker
cal.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour());
cal.set(Calendar.MINUTE, tPicker.getCurrentMinute());
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);   

AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent(this));

//pIntent method
public static PendingIntent pIntent(Context context){
Intent intent = new Intent();
intent.setAction("myAlarm.intent.action.CLOCK");

return PendingIntent.getBroadcast(context, 0, intent,    PendingIntent.FLAG_UPDATE_CURRENT);
}

正如我所说,它工作得很好,但我不知道如何为我在应用程序中选择的每一天设置警报,我将感谢您的帮助,谢谢

您需要为每个需要的报警设置不同的挂起功能。从文档中:

如果确实需要多个不同的PendingEvent对象同时处于活动状态 同时(例如用作两个同时显示的通知) 同时),那么您需要确保 把他们和不同的人联系起来是不同的 悬挂式帐篷。这可能是所考虑的任何意图属性 Intent.filterEquals或提供给的不同请求代码整数 getActivity(Context,int,Intent,int),getActivities(Context,int, Intent[],int),getBroadcast(上下文,int,Intent,int),或 getService(Context,int,Intent,int)

例如,更改此行:

return PendingIntent.getBroadcast(context, MONDAY, intent,    PendingIntent.FLAG_UPDATE_CURRENT);

其中,星期一是一个静态整数。

您需要设置报警管理器3次(如果选择了星期一、星期三和星期五)

代码被盗自:

然后为每天设置报警管理器:

alarmMgr.set(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(), pIntent(this)); 
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), pIntent(this));  
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal3.getTimeInMillis(), pIntent(this));  
编辑:

private static final MONDAY = 2;
private static final WEDNESDAY = 4;
private static final FRIDAY = 6;

Calendar calMonday = Calendar.getInstance();

//tPicker is a TimePicker
calMonday.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour());
calMonday.set(Calendar.MINUTE, tPicker.getCurrentMinute());
calMonday.set(Calendar.SECOND, 0);
calMonday.set(Calendar.MILLISECOND, 0); 

//now copy you calendar for the other days
Calendar calWednesday = calMonday.clone();
Calendar calFriday = calMonday.clone();

//set week days
calMonday.set(Calendar.DAY_OF_WEEK, MONDAY);
calWednesday.set(Calendar.DAY_OF_WEEK, WEDNESDAY); 
calFriday.set(Calendar.DAY_OF_WEEK, FRIDAY); 

AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calMonday.getTimeInMillis(), pIntent(this, MONDAY));
alarmMgr.set(AlarmManager.RTC_WAKEUP, calWednesday.getTimeInMillis(), pIntent(this, WEDNESDAY));
alarmMgr.set(AlarmManager.RTC_WAKEUP, calFriday.getTimeInMillis(), pIntent(this, FRIDAY));

//pIntent method
public static PendingIntent pIntent(Context context, int id){
    Intent intent = new Intent();
    intent.setAction("myAlarm.intent.action.CLOCK");

    return PendingIntent.getBroadcast(context, id, intent,    PendingIntent.FLAG_UPDATE_CURRENT);
}

看看这个例子,我是否需要每天使用不同的日历和AlarmManager实例,或者只是PendingEvent id必须不同?谢谢正如我之前所问的,在本例中,这是否意味着使用不同的AlarmManager、日历实例,或者只是传递给PendingEvent的id需要不同?谢谢您只需要3个不同的日历实例。。。但是,如果您以后想要停止一个警报,那么您的意图需要有所不同。然后你需要给每个PendingEvent传递一个id,所以我可以对PendingEvent使用相同的方法,使用相同的操作(?)但是每次传递一个不同的id,对吗?谢谢。我会尽快试一试并发布我的结果,谢谢!
private static final MONDAY = 2;
private static final WEDNESDAY = 4;
private static final FRIDAY = 6;

Calendar calMonday = Calendar.getInstance();

//tPicker is a TimePicker
calMonday.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour());
calMonday.set(Calendar.MINUTE, tPicker.getCurrentMinute());
calMonday.set(Calendar.SECOND, 0);
calMonday.set(Calendar.MILLISECOND, 0); 

//now copy you calendar for the other days
Calendar calWednesday = calMonday.clone();
Calendar calFriday = calMonday.clone();

//set week days
calMonday.set(Calendar.DAY_OF_WEEK, MONDAY);
calWednesday.set(Calendar.DAY_OF_WEEK, WEDNESDAY); 
calFriday.set(Calendar.DAY_OF_WEEK, FRIDAY); 

AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calMonday.getTimeInMillis(), pIntent(this, MONDAY));
alarmMgr.set(AlarmManager.RTC_WAKEUP, calWednesday.getTimeInMillis(), pIntent(this, WEDNESDAY));
alarmMgr.set(AlarmManager.RTC_WAKEUP, calFriday.getTimeInMillis(), pIntent(this, FRIDAY));

//pIntent method
public static PendingIntent pIntent(Context context, int id){
    Intent intent = new Intent();
    intent.setAction("myAlarm.intent.action.CLOCK");

    return PendingIntent.getBroadcast(context, id, intent,    PendingIntent.FLAG_UPDATE_CURRENT);
}