AlarmManager only stores an Alarm

5

I have a problem with AlarmManager , for example, if I set an Alarm to 16:00 and another to 16:30 only the second is generating the notification, different from the second. I made some rather confusing conversions to manipulate the schedule, but it's certainly working. Here is the section where you saved the Alarm information:

//ATIVAÇÃO DO ALARME BASEADO NO HORÁRIO QUE O USUÁRIO DESEJAR

Intent intent = new Intent("ALARME_DISPARADO");
PendingIntent p = PendingIntent.getBroadcast(this, 0, intent, 0);

//cal = Calendar.getInstance();

//Abaixo faço a conversão das horas e minutos digitados pelo usuário para Millis e depois somo tudo
horasint = new SimpleDateFormat("HH");//Pegando somente o valor "hora"
resulhora = new Date(System.currentTimeMillis());

minutosint = new SimpleDateFormat("mm");//Pegando somente o valor "minuto"
resulminutos = new Date(System.currentTimeMillis());

String inthora = ""+horasint.format(resulhora);//Salvando o valor hora em uma string
String intminutos = ""+minutosint.format(resulminutos);//Salvando o valor minuto em uma string

long horamilli = Integer.parseInt(inthora) * 3600000;//Convertendo a string hora para inteiro e convertendo para Millisegundos
long minutosmilli = Integer.parseInt(intminutos) * 60000;//Convertendo a string minuto para inteiro e convertendo para Millisegundos

long paraMEIA_NOITE = (24*3600000) - (horamilli + minutosmilli);//Subtraindo 24h do horário atual em Millisegundos para saber quanto tempo falta para 00:00h

long x = System.currentTimeMillis() - (24*3600000); //Subtraindo o horário atual por 24h em Milisegundos
long y = x + paraMEIA_NOITE;//Adicionando quanto falta para meia noite porém está incompleto faltando a parte que lhe pedi ajuda agora

//COLOCAR CONDIÇÕES AQUI PARA CASO SEJA NO DIA SEGUINTE, OU DOIS DEPOIS, ASSIM SUCESSIVAMENTE

if(auxdia == day)//Domingo - Domingo
{
    long z = y + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}

else if(auxdia == day + 1)//Tal dia - Um dia depois
{
    long z = y + (24*3600000) + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}

else if(auxdia == day + 2)//Tal dia - Dois dias depois
{
    long z = y + (2*(24*3600000)) + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}

else if(auxdia == day + 3)//Tal dia - Três dias depois
{
    long z = y + (3*(24*3600000)) + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}

else if(auxdia == day + 4)//Tal dia - Quatro dias depois
{
    long z = y + (4*(24*3600000)) + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}

else if(auxdia == day + 5)//Tal dia - Cinco dias depois
{
    long z = y + (5*(24*3600000)) + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}
else if(auxdia == day + 6)//Tal dia - Seis dias depois
{
    long z = y + (6*(24*3600000)) + (Integer.parseInt(edhorario.getText().toString())*3600000) + (Integer.parseInt(edminutos.getText().toString())*60000);//Adicionando a hora que o usuário digitou
    cal.setTimeInMillis(z);
    long teste = z;
    Toast.makeText(this, "- Hora Marcada: "+teste+"\n\n- Hora Atual: "+System.currentTimeMillis(), Toast.LENGTH_LONG).show();
}


//cal.add(Calendar.SECOND, 0);

AlarmManager alarme = (AlarmManager) getSystemService(ALARM_SERVICE);
alarme.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), p);

//alarme.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, p);
    
asked by anonymous 10.12.2014 / 00:45

2 answers

1

If you have the alarm for 16:00 and another for 16:30, surely you will have to create a real-time verification to verify. For example, you will have two methods, one that sets the alarm for 16:00 and another for 16:30. And in the check, check if the current system time is equal to 16 and the 0 minute, then it triggers the first alarm, if not, it triggers the second alarm.

I've had something like this here with me. I hope I have helped;)

    
25.01.2015 / 12:39
1

You can not schedule two alarms with the same 'intent action'. If you do this, the previous one will be canceled. This is a behavior planned .

Enabling, instead of using AlarmManager that is highly verbose, you can use this library:

link

Made by this one that speaks to you: D

To schedule an alarm, just note down as many methods as you want with:

@AlarmTask (interval = {INTERVAL_IN_MILLI}, wakeUp = {BOOLEAN}) void foo () {}

Just read the Readme you have on the github page, import the project into your build.grad and use the will. Any questions I am at your disposal: D

    
02.03.2016 / 01:37