Android previene la activación inmediata del servicio de alarma si ha pasado la hora de alarma del día
alarmmanager android-alarms (1)
No necesita crear
Timestamp
s.
Puedes hacerlo con tu
Calendar
.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
if(calendar.before(Calendar.getInstance())) {
calendar.add(Calendar.DATE, 1);
}
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
También mencionaría que a partir de KitKat, si su
targetSdkVersion
es 19 o superior, el
AlarmManager#set()
no es exacto.
Si desea que su alarma se
setExact*()
a una hora exacta, deberá usar un
setExact*()
.
La referencia para Alarm Manager dice que
Si el tiempo de activación establecido está en el pasado, la alarma se activará de inmediato.
Estoy enfrentando este problema en mi aplicación. Aquí está mi código de administrador de alarmas:
Intent myIntent = new Intent(getActivity(), DinnerAlarmReceiver.class);
pendingDinnerIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
¿Hay alguna solución a este problema?
-----EDITAR------
He escrito un código para estimar si el tiempo establecido para la alarma es anterior a la hora actual. Aquí está la parte anterior con los cambios correspondientes:
Calendar calendar = Calendar.getInstance();
long currentTime = calendar.getTimeInMillis();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
long setTime = calendar.getTimeInMillis();
Timestamp setTimestamp = new Timestamp(setTime);
Timestamp currentTimestamp = new Timestamp(currentTime);
if (setTimestamp.after(currentTimestamp))
{
alarmManager.set(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), pendingDinnerIntent);
}
else
{
}
¿Qué debería hacer el
alarmManager
en caso de que
setTimestamp
sea anterior a
currentTimestamp
?