Android 安卓系统,使用时间选择器多次报警

Android 安卓系统,使用时间选择器多次报警,android,alarmmanager,timepicker,android-alarms,android-timepicker,Android,Alarmmanager,Timepicker,Android Alarms,Android Timepicker,我试着用时间选择器在一天中的三餐中设置5个闹钟,事实上我对它做了很多调查,我发现有点困惑。 我做这件事的方式不是很“有效”,但我在这件事上没有经验,我不能不这样想。 现在的问题是,如果我发出5个警报,但当我认为间隔一分钟时,有时其中一个或两个警报不起作用。 例子: 我有一个RelativeLayout,它们在文本视图中显示报警,因此: 警报1 警报2 警报3 警报4 警报5 报警2有时不工作,或者报警2和4不工作。当间隔一分钟放置时 事实上,代码不是很好,但仍然应该创建5并运行,但就是这样 我希

我试着用时间选择器在一天中的三餐中设置5个闹钟,事实上我对它做了很多调查,我发现有点困惑。 我做这件事的方式不是很“有效”,但我在这件事上没有经验,我不能不这样想。 现在的问题是,如果我发出5个警报,但当我认为间隔一分钟时,有时其中一个或两个警报不起作用。 例子: 我有一个RelativeLayout,它们在文本视图中显示报警,因此: 警报1 警报2 警报3 警报4 警报5

报警2有时不工作,或者报警2和4不工作。当间隔一分钟放置时

事实上,代码不是很好,但仍然应该创建5并运行,但就是这样

我希望有人能帮我一把

多谢各位

这就是代码和类

public class Recordatorios2 extends Activity {

Button buttonstartSetDialog;
TextView desayuno,merienda1,almuerzo,merienda2,cena;
TimePickerDialog timePickerDialog;
private Spinner alarma;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recordatorios2);
    llenarSpinnerAlarmas();

    desayuno = (TextView)findViewById(R.id.Desayuno);
    merienda1 = (TextView) findViewById(R.id.Merienda1);
    almuerzo = (TextView) findViewById(R.id.Almuerzo);
    merienda2 = (TextView) findViewById(R.id.Merienda2);
    cena = (TextView) findViewById(R.id.cena);

    alarma = (Spinner) findViewById(R.id.spinnerAlarma);
    buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
    buttonstartSetDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          //  desayuno.setText("");
            openTimePickerDialog(false);
        }
    });
     }


 public void llenarSpinnerAlarmas(){

    alarma = (Spinner) findViewById(R.id.spinnerAlarma);
    //Creamos el adaptador
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.Alarmas,android.R.layout.simple_spinner_item);
    //Añadimos el layout para el menú
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    //Le indicamos al spinner el adaptador a usar
    alarma.setAdapter(adapter);
}

private void openTimePickerDialog(boolean is24r) {
    Calendar calendar = Calendar.getInstance();

    timePickerDialog = new TimePickerDialog(
            Recordatorios2.this,
            onTimeSetListener,
            calendar.get(Calendar.HOUR_OF_DAY),
            calendar.get(Calendar.MINUTE),
            is24r);
    timePickerDialog.setTitle("Elija la alarma");

    timePickerDialog.show();
}

TimePickerDialog.OnTimeSetListener onTimeSetListener
        = new TimePickerDialog.OnTimeSetListener(){

    @Override
    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){
            calSet.add(Calendar.DATE, 1);
        }

        setAlarm(calSet);
    }};

private void setAlarm( Calendar targetCal) {

    if(alarma.getSelectedItem().toString().equals("Desayuno")){

        RelativeLayout recordatorios = (RelativeLayout) findViewById(R.id.recordatoriosLayout);
        desayuno.setText("Desayuno: " + targetCal.getTime());
        Intent intent1 = new Intent(getBaseContext(), AlarmReceiver.class);
        PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getBaseContext(),1 , intent1, 0);
        AlarmManager alarmManager1 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager1.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent1);

    }else if(alarma.getSelectedItem().toString().equals("Primera Merienda")){
        RelativeLayout recordatorios = (RelativeLayout) findViewById(R.id.recordatoriosLayout);
        merienda1.setText("Primer Merienda: " + targetCal.getTime());
        Intent intent2 = new Intent(getBaseContext(), AlarmReceiver.class);
        PendingIntent pendingIntent2 = PendingIntent.getBroadcast(getBaseContext(),2 , intent2,0);
        AlarmManager alarmManager2 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager2.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent2);

    }else if(alarma.getSelectedItem().toString().equals("Almuerzo")){
        RelativeLayout recordatorios = (RelativeLayout) findViewById(R.id.recordatoriosLayout);
        almuerzo.setText( "Almuerzo: " + targetCal.getTime());
        Intent intent3 = new Intent(getBaseContext(), AlarmReceiver.class);
        PendingIntent pendingIntent3 = PendingIntent.getBroadcast(getBaseContext(),3 , intent3, 0);
        AlarmManager alarmManager3 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager3.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent3);

    }else if(alarma.getSelectedItem().toString().equals("Segunda Merienda")){
        RelativeLayout recordatorios = (RelativeLayout) findViewById(R.id.recordatoriosLayout);
        merienda2.setText( "Segunda Merienda: " + targetCal.getTime());
        Intent intent4 = new Intent(getBaseContext(), AlarmReceiver.class);
        PendingIntent pendingIntent4 = PendingIntent.getBroadcast(getBaseContext(),4 , intent4,0);
        AlarmManager alarmManager4 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager4.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent4);

    } else if(alarma.getSelectedItem().toString().equals("Cena")){
        RelativeLayout recordatorios = (RelativeLayout) findViewById(R.id.recordatoriosLayout);
        cena.setText("Cena: " + targetCal.getTime());
        Intent intent5 = new Intent(getBaseContext(), AlarmReceiver.class);
        PendingIntent pendingIntent5 = PendingIntent.getBroadcast(getBaseContext(),5 , intent5, 0);
        AlarmManager alarmManager5 = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        alarmManager5.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent5);


}
}



}

AlarmReceiver
类中实现
setAlarm()
方法,但当我这样做的时候,会发生的是,这种方法是典型的,我认为他不能像一个接收者那样做,所以你可以确定你的意图,从而定制你必须显示的每条消息???还尝试实现一种方法来停止报警,但不知道我当时喜欢这个或那个意图,而且不容易访问。遵循本教程,伙计,尝试遵循本教程,但它使我非常复杂,也有一些东西让我出错。我需要知道的是,我编程的一些警报没有发出声音,或者我积累了其他警报,因为有时我一次最多发出3声。对于这个问题,我很抱歉,但我是新来的,开始很困难。准备解决它,我所做的是使用它为每个意图生成不同的id。最终int _id=((int)System.currentTimeMillis()/1000);随机生成器=新随机();int-id_-nuevo=(_-id+generator.nextInt());
public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context arg0, Intent i) {
        Toast.makeText(arg0, "alarma", Toast.LENGTH_LONG).show();

}