0

我正在尝试制作一个警报应用程序,该应用程序从用户那里获取多个“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!");

        }
    }
}
4

2 回答 2

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);

    .
    .
    .
}
于 2015-01-09T16:14:27.900 回答
0

如果您想要 5 个不同的警报,那么您的 PendingIntent 应该不同。您可以通过在其中添加额外内容来使 PendingIntent 独一无二。但无论如何,您的代码至少应该生成一个警报。验证您在日历中设置的时间是否正确。

无论如何,您不需要 5 个单独的日历、意图或任何东西。只需更新它们并设置警报。您绝对不需要将它们保存在数组中。

于 2012-07-06T14:54:12.140 回答