2012-10-14 119 views
-1

我有一个程序,允许用户输入三次报警,然后在适当的时候显示报警。但是,每当我设置报警,只有最后一个正在执行。报警接收器多个报警

因此,基本上,用户输入1,2或3然后我执行时间选择对话框的数量,然后将这些时间发送到警报接收器。但只有最后一个警报正在进行。任何帮助表示赞赏。代码长度的道歉,我知道这是非常低效的。

报警活动片段::

buttonSetTime.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(alarmNumInt == 1){ 
       tvSet.setText(""); 
       openTimePicker1(false); 
       } 
       else if (alarmNumInt == 2){ 
        tvSet2.setText(""); 
        openTimePicker2(false); 
        tvSet.setText(""); 
        openTimePicker1(false); 

        } 
       else { 
       tvSet3.setText(""); 
       openTimePicker3(false); 
       tvSet2.setText(""); 
       openTimePicker2(false); 
       tvSet.setText(""); 
       openTimePicker1(false); 
       } 
      } 
     }); 


    protected void openTimePicker1(boolean b) { 
     // TODO Auto-generated method stub 
      Calendar calendar = Calendar.getInstance(); 

      timePromptDia = new TimePickerDialog(
      AlarmActivity.this, 
      onTimeSetListener, 
      calendar.get(Calendar.HOUR_OF_DAY), 
      calendar.get(Calendar.MINUTE), 
      b); 
      timePromptDia.setTitle("Set Alarm 1 Time"); 

      timePromptDia.show(); 

     } 

    protected void openTimePicker2(boolean b) { 
     // TODO Auto-generated method stub 
      Calendar calendar = Calendar.getInstance(); 

      timePromptDia2 = new TimePickerDialog(
      AlarmActivity.this, 
      onTimeSetListener2, 
      calendar.get(Calendar.HOUR_OF_DAY), 
      calendar.get(Calendar.MINUTE), 
      b); 
      timePromptDia2.setTitle("Set Alarm 2 Time"); 

      timePromptDia2.show(); 

     } 

    protected void openTimePicker3(boolean b) { 
     // TODO Auto-generated method stub 
      Calendar calendar = Calendar.getInstance(); 

      timePromptDia3 = new TimePickerDialog(
      AlarmActivity.this, 
      onTimeSetListener3, 
      calendar.get(Calendar.HOUR_OF_DAY), 
      calendar.get(Calendar.MINUTE), 
      b); 
      timePromptDia3.setTitle("Set Alarm 3 Time"); 

      timePromptDia3.show(); 

     } 

      OnTimeSetListener onTimeSetListener = new OnTimeSetListener(){ 

      public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  
      Calendar calNow = Calendar.getInstance(); 
      Calendar calSet = (Calendar) calNow.clone(); 

      calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      calSet.set(Calendar.MINUTE, minute); 
      calSet.set(Calendar.SECOND, 0); 
      calSet.set(Calendar.MILLISECOND, 0); 

      if(calSet.compareTo(calNow) <= 0){ 
      //Today Set time passed, count to tomorrow 
      calSet.add(Calendar.DATE, 1); 
      } 
      setAlarm(calSet); 
      //condition for other alarms 

      }}; 

      OnTimeSetListener onTimeSetListener2 = new OnTimeSetListener(){ 

       public void onTimeSet(TimePicker view, int hourOfDay, int minute) {     
       Calendar calNow = Calendar.getInstance(); 
       Calendar calSet = (Calendar) calNow.clone(); 

       calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); 
       calSet.set(Calendar.MINUTE, minute); 
       calSet.set(Calendar.SECOND, 0); 
       calSet.set(Calendar.MILLISECOND, 0); 

       if(calSet.compareTo(calNow) <= 0){ 
       //Today Set time passed, count to tomorrow 
       calSet.add(Calendar.DATE, 1); 
       } 
       setAlarm2(calSet); 
       }}; 


      OnTimeSetListener onTimeSetListener3 = new OnTimeSetListener(){ 

         public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

         Calendar calNow = Calendar.getInstance(); 
         Calendar calSet = (Calendar) calNow.clone(); 

         calSet.set(Calendar.HOUR_OF_DAY, hourOfDay); 
         calSet.set(Calendar.MINUTE, minute); 
         calSet.set(Calendar.SECOND, 0); 
         calSet.set(Calendar.MILLISECOND, 0); 

         if(calSet.compareTo(calNow) <= 0){ 
         //Today Set time passed, count to tomorrow 
         calSet.add(Calendar.DATE, 1); 
         } 
         setAlarm3(calSet); 
         }}; 

      protected void setAlarm(Calendar targetCal) { 
       // TODO Auto-generated method stub 


        Intent intent1 = new Intent(getBaseContext(), AlarmReceiver.class); 
        PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getBaseContext(), req, intent1, 0); 
        AlarmManager alarmManager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
        alarmManager1.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent1); 
        alarmManager1.setRepeating(AlarmManager.RTC_WAKEUP, 
          targetCal.getTimeInMillis(), 
          TimeUnit.HOURS.toMillis(24), 
          pendingIntent1); 

        tvSet.setText("Alarm 1 is set @ " + targetCal.getTime() + "\n" +" Repeat everyday\n"); 


      } 

      protected void setAlarm2(Calendar targetCal2) { 
       // TODO Auto-generated method stub 


        Intent intent2 = new Intent(getBaseContext(), AlarmReceiver.class); 
        PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getBaseContext(), req2, intent2, 0); 
        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
        alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal2.getTimeInMillis(), pendingIntent2); 
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
          targetCal2.getTimeInMillis(), 
          TimeUnit.HOURS.toMillis(24), 
          pendingIntent2); 

        tvSet2.setText("Alarm 2 is set @ " + targetCal2.getTime()+" Repeat everyday\n"); 
      } 

      protected void setAlarm3(Calendar targetCal3) { 
       // TODO Auto-generated method stub 


        Intent intent3 = new Intent(getBaseContext(), AlarmReceiver.class); 
        PendingIntent pendingIntent3 = PendingIntent.getBroadcast(getBaseContext(), req3, intent3, 0); 
        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
        alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal3.getTimeInMillis(), pendingIntent3); 
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
          targetCal3.getTimeInMillis(), 
          TimeUnit.HOURS.toMillis(24), 
          pendingIntent3); 

        tvSet3.setText("Alarm 3 is set @ " + targetCal3.getTime() + " Repeat everyday\n");   
      } 
} 

与广播接收机活动:

public class AlarmReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context arg0, Intent arg1) { 

    playSound(); 
    Toast toast; 
    toast = Toast.makeText(arg0, "Time for Blood Glucose Testing!", Toast.LENGTH_LONG); 
    toast.setGravity(Gravity.CENTER, 0,0); 
    toast.show(); 
    Vibrator vibrator = (Vibrator) arg0.getSystemService(Context.VIBRATOR_SERVICE); 
    vibrator.vibrate(1000); 

    } 
public void playSound(){ 
    ToneGenerator alertTone = new ToneGenerator(AudioManager.STREAM_DTMF,ToneGenerator.MAX_VOLUME); 
    alertTone.startTone(ToneGenerator.TONE_DTMF_1, 1000); 
} 

} 

回答

0

什么是REQ,REQ2和REQ3的价值?每个警报都需要不同。

此外,我不认为这会解决您的问题,但您不需要在AlarmManager上调用set()& setRepeating(),只需一个或另一个。

当发生警报或让AlarmManager通过使用setRepeating()处理重置时,可以调用set()并自己重置警报。

+0

令人惊异的捕获,我在程序中的某个点将每个请求设置为1。将每个值都更改为不同的值,并且完美地工作。非常感谢! – user1742524