使用报警管理器重复报警

时间:2012-07-06 10:58:23

标签: android alarmmanager android-alarms repeatingalarm

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

        }
    }
}

2 个答案:

答案 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个单独的日历,意图或任何东西。只需更新它们并设置警报。你明确地不需要将它们保存在数组中。