Pending Intent 仅适用于 1 个警报
Pending Intent only work for 1 alarm
目前,我有一个使用 pendingIntennt 的闹钟,它在按下按钮(保存闹钟)时起作用。问题是,当我安排并保存了多个闹钟时,将响起的闹钟只是最新的一个。我怎样才能让所有的警报都响起?
这是按钮内部的代码:
public void saveReminder(View v) {
final int reminderHour = mReminderTimePicker.getCurrentHour().intValue();
final int reminderMinute = mReminderTimePicker.getCurrentMinute().intValue();
final String reminderName = mReminderName.getText().toString();
final boolean reminderStatus = mReminderSwitchSwitch.isChecked();
//AlarmManagerHelper.cancelAlarms(this);
//Updating Reminder Information
ParseQuery<ParseObject> query = ParseQuery.getQuery("MyReminders");
query.getInBackground(objectId, new GetCallback<ParseObject>() {
public void done(ParseObject reminderObject, ParseException e) {
if (e == null) {
reminderObject.put("reminderName", reminderName);
reminderObject.put("reminderHour", reminderHour);
reminderObject.put("reminderMinute", reminderMinute);
reminderObject.put("reminderStatus", reminderStatus);
reminderObject.saveInBackground();
}
}
});
//set time into calendar instance
GregorianCalendar calendar= new GregorianCalendar();
calendar.set(GregorianCalendar.HOUR_OF_DAY,reminderHour);
calendar.set(GregorianCalendar.MINUTE,reminderMinute);
calendar.set(GregorianCalendar.SECOND,00);
calendar.set(GregorianCalendar.MILLISECOND,0000);
AlarmManager reminder = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent reminderintent = new Intent(this, ReminderService.class);
//push information to reminder screen
reminderintent.putExtra("reminderName", reminderName);
reminderintent.putExtra("reminderHour", reminderHour);
reminderintent.putExtra("reminderMinute", reminderMinute);
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 1, reminderintent, PendingIntent.FLAG_UPDATE_CURRENT);
reminder.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);
finish();
}
您似乎对所有闹钟都使用了相同的 requestCode 1,因此每次您设置闹钟时,它都会在您调用 PendingIntent.getActivity() 时覆盖前一个。
您需要的是一种为每个警报设置唯一 ID 的方法。
使用 objectId
字符串,您可以通过将字符串中的所有字符相加来生成唯一 ID:
int id = 0;
for (int i = 0; i < objectId.length(); i++){
id += objectId.charAt(i);
}
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), id, reminderintent, PendingIntent.FLAG_UPDATE_CURRENT);
reminder.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);
目前,我有一个使用 pendingIntennt 的闹钟,它在按下按钮(保存闹钟)时起作用。问题是,当我安排并保存了多个闹钟时,将响起的闹钟只是最新的一个。我怎样才能让所有的警报都响起?
这是按钮内部的代码:
public void saveReminder(View v) {
final int reminderHour = mReminderTimePicker.getCurrentHour().intValue();
final int reminderMinute = mReminderTimePicker.getCurrentMinute().intValue();
final String reminderName = mReminderName.getText().toString();
final boolean reminderStatus = mReminderSwitchSwitch.isChecked();
//AlarmManagerHelper.cancelAlarms(this);
//Updating Reminder Information
ParseQuery<ParseObject> query = ParseQuery.getQuery("MyReminders");
query.getInBackground(objectId, new GetCallback<ParseObject>() {
public void done(ParseObject reminderObject, ParseException e) {
if (e == null) {
reminderObject.put("reminderName", reminderName);
reminderObject.put("reminderHour", reminderHour);
reminderObject.put("reminderMinute", reminderMinute);
reminderObject.put("reminderStatus", reminderStatus);
reminderObject.saveInBackground();
}
}
});
//set time into calendar instance
GregorianCalendar calendar= new GregorianCalendar();
calendar.set(GregorianCalendar.HOUR_OF_DAY,reminderHour);
calendar.set(GregorianCalendar.MINUTE,reminderMinute);
calendar.set(GregorianCalendar.SECOND,00);
calendar.set(GregorianCalendar.MILLISECOND,0000);
AlarmManager reminder = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent reminderintent = new Intent(this, ReminderService.class);
//push information to reminder screen
reminderintent.putExtra("reminderName", reminderName);
reminderintent.putExtra("reminderHour", reminderHour);
reminderintent.putExtra("reminderMinute", reminderMinute);
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 1, reminderintent, PendingIntent.FLAG_UPDATE_CURRENT);
reminder.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);
finish();
}
您似乎对所有闹钟都使用了相同的 requestCode 1,因此每次您设置闹钟时,它都会在您调用 PendingIntent.getActivity() 时覆盖前一个。
您需要的是一种为每个警报设置唯一 ID 的方法。
使用 objectId
字符串,您可以通过将字符串中的所有字符相加来生成唯一 ID:
int id = 0;
for (int i = 0; i < objectId.length(); i++){
id += objectId.charAt(i);
}
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), id, reminderintent, PendingIntent.FLAG_UPDATE_CURRENT);
reminder.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), operation);