2012-07-06 102 views
0

我试图做出一个报警应用程序,它需要来自用户的多个“n”次时间输入并在特定时间响铃。为此,我为小时和分钟条目创建了一个EditText数组。在开始按钮的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

你并不需要保存未决INTENS中的对象,只要设置报警。你的问题是什么?它工作与否? – Ran 2012-07-06 11:03:11

+0

这段代码不起作用......没有报警正在产生......我的问题是......如果我总共有5次......我怎么称呼我的AlarmService类5次......我会需要5个日历对象....那么我需要5个不同的警报管理对象,有5个不同的意图和待定的意图? – tanvi 2012-07-06 13:36:45

回答

0

如果你想5个不同的警报那么你的PendingIntent应该是不同的。您可以通过额外添加PendingIntent来实现独特功能。但无论如何,你的代码至少应该产生一个警报。验证您在日历中设置的时间是否正确。

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

+0

我不想更新日历对象,因为我想存储用户输入的序列。而且,我将在用户的同一时间接收所有条目,然后用一个开始按钮同时设置所有的警报。这可以在不使用日历数组的情况下完成吗? – tanvi 2012-07-06 14:56:54

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

    . 
    . 
    . 
}