我正在尝试制作一个警报应用程序,该应用程序需要用户多次“n”次输入并在这些特定时间响铃。为此,我为小时和分钟条目创建了一个EditTexts数组。在启动按钮的onclick监听器中,我希望为所有输入的时间输入初始化报警管理器。
创建一个日历数组后,我是否应该创建一个意图和待处理意图数组以及警报管理器对象 - 每个日历对象各一个?
这是我的开始按钮的代码:
public void setAlert(View view) {
int length = editHour.length;
int h[] = new int[length];
int m[] = new int[length];
Calendar[] cal = new Calendar[length];
for (int i = 0; i < length; i++) {
cal[i] = Calendar.getInstance();
}
for (int i = 0; i < length; i++) {
try {
m[i] = Integer.parseInt(editHour[i].getText().toString());
h[i] = Integer.parseInt(editMinute[i].getText().toString());
cal[i].set(Calendar.HOUR, h[i]);
cal[i].set(Calendar.MINUTE, m[i]);
Intent intent = new Intent(this, AlarmService.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this,
12345, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,
cal[i].getTimeInMillis(), pendingIntent);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
} catch (Exception ex) {
ex.printStackTrace();
System.out.print("OOPS!");
}
}
}
答案 0 :(得分:1)
您的请求代码是唯一的,这是您的问题。您必须为不同的警报使用唯一代码。具有一个请求代码的代码会覆盖警报时间。 (抱歉我的英语不好,这不是我的语言!)
使用此代码:
for (int i = 0; i < length; i++) {
.
.
.
int requestCode = (int) (System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(this,
requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Thread.sleep(10);
.
.
.
}
答案 1 :(得分:0)
如果您想要5种不同的警报,那么您的PendingIntent应该是不同的。您可以通过在其中添加额外内容来使PendingIntent唯一。但无论如何,你的代码至少应该生成一个警报。验证您在日历中设置的时间是否正确。
无论如何,您不需要5个单独的日历,意图或任何东西。只需更新它们并设置警报。你明确地不需要将它们保存在数组中。