android alarmmanager android-alarms repeatingalarm

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 ?