Alarmmanager only stores an Alarm

Asked

Viewed 813 times

5

I have a problem related to AlarmManager, For example, if I program an Alarm for 16:00 and another for 16:30 only the second is generating the notification, different from the second. I did some confusing conversions to manipulate the schedule, but it is certainly working. Follow the section where save the information from Alarm:

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

2 answers

1

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

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

1

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

Taking advantage, instead of using Alarmmanager which is highly verbose, you can use this library:

https://github.com/carlosedinazioaraujo/ThinDroid

Made by this one who speaks to you :D

To schedule an alarm just note how many methods 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.Radle and use the will. Any questions I’m willing to give you :D

Browser other questions tagged

You are not signed in. Login or sign up in order to post.