Alarmas multiples en android, algunas se acumulan...Porque Ocurre?

  • Respuestas:1
  • AbiertoSin chinchetaSin solución
  • Posts del Foro: 2

25-feb-2015 18:08:25 vía Web

Hola, espero alguien me pueda ayudar con esto.

Estoy tratando de crear 5 alarmas distintas en android studio.
Lo que pasa es que cuando creo las alarmas con 1 min de diferencia para probar que sirven 3 de las 5 se me acumulan en una sola alarma.
Ej:
alarma 1
alarma 2
alarma 3
alarma 4
alarma 5

suena la alarma 1 cuando llega a la dos no pasa nada, luego llega a la 3 no pasa nada y cuando llega a la 4 me envia la 2,3 y 4 en una sola notificacion.
Ya revise el codigo y parece estar bien, ya que al parecer genera un id diferente para cada alarma y asi no caiga una alarma sobre otra pero se me acumulan como indique antes.

aca la funcion que crea las alarmas.

Alguien sabe que pueda estar fallando para que se acumuelen las alarmas unas con otras???

Gracias

public class Recordatorios2 extends Activity {

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




@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")){
         desayuno.setText("Desayuno: " + targetCal.getTime());
        comida = desayuno.getText().toString();
        descripcion = "desayuno";
    }else if(alarma.getSelectedItem().toString().equals("Primera Merienda")){
        merienda1.setText("Primer Merienda: " + targetCal.getTime());
        comida = merienda1.getText().toString();
        descripcion = "primera merienda";
    }else if(alarma.getSelectedItem().toString().equals("Almuerzo")){
        almuerzo.setText( "Almuerzo: " + targetCal.getTime());
        comida = almuerzo.getText().toString();
        descripcion = "almuerzo";
    }else if(alarma.getSelectedItem().toString().equals("Segunda Merienda")){
        merienda2.setText( "Segunda Merienda: " + targetCal.getTime());
        comida = merienda2.getText().toString();
        descripcion = "segunda merienda";
    } else if(alarma.getSelectedItem().toString().equals("Cena")){
        cena.setText("Cena: " + targetCal.getTime());
        comida = cena.getText().toString();
        descripcion = "cena";

    }
        Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
        intent.putExtra("Comida",comida);
        final int id = (int)System.currentTimeMillis()/1000;
        Random generator = new Random();
        int id_nuevo = id * 5 + generator.nextInt();
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), id_nuevo ,intent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
        Toast.makeText(this,"Alarma " + descripcion + " creada",Toast.LENGTH_SHORT).show();

y la clase AlarmReceiver

public class AlarmReceiver extends BroadcastReceiver {
MediaPlayer player;
Recordatorios2 r = new Recordatorios2();
@Override
public void onReceive(Context arg0, Intent i) {
    String v = i.getStringExtra("Comida");
    Toast.makeText(arg0,v, Toast.LENGTH_LONG).show();
    player = MediaPlayer.create(arg0,R.raw.alarma);
    player.start();


}

}

— modificado el 25-feb-2015 18:17:35

  • Posts del Foro: 2

26-feb-2015 4:29:31 vía Web

Ya resolvi esto, pero el problema ahora es como se puede eliminar o modificar una alarma????

— modificado el 26-feb-2015 4:29:58