Alarma de repetición para días específicos de la semana en Android

En mi aplicación tengo una funcionalidad para activar alarma en 4 senerios:

  • Sólo una vez para una fecha y hora elegidas por el usuario
  • Diariamente para el tiempo elegido
  • Semanal según fecha y hora elegida
  • Días personalizados personalizados de la semana

Implementar con éxito los primeros 3 senerios usando el siguiente:

Sólo una vez:

Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, Integer.parseInt(date[0])); calendar.set(Calendar.MONTH, (Integer.parseInt(date[1])) - 1); calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(date[2])); calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0])); calendar.set(Calendar.MINUTE, Integer.parseInt(time[1])); calendar.set(Calendar.SECOND, 0); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

Para la programación diaria:

 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0])); calendar.set(Calendar.MINUTE, Integer.parseInt(time[1])); calendar.set(Calendar.SECOND, 0); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

Para la programación semanal (según la fecha del sistema):

 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek); calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time[0])); calendar.set(Calendar.MINUTE, Integer.parseInt(time[1])); calendar.set(Calendar.SECOND, 0); //long interval = calendar.getTimeInMillis() + 604800000L; alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendingIntent); 

Para los días de semana personalizados elegidos por el usuario (por ejemplo, sólo para el lunes y el viernes, se repite semanalmente) estoy usando el mismo código que he utilizado para la programación semanal por iteración. Pero no funciona para el lunes (que se establece antes de viernes) y el trabajo para el viernes. Además, no activa la alarma de hoy si hoy (fecha del sistema) es un lunes o un viernes.

Entonces, ¿cómo puedo implementar la programación de alarma semanal para los días personalizados de la semana?

No hay una manera de decirle al Administrador de alarmas cuáles días quieres que se dispare.

Una solución sería tener una alarma para cada día de la semana que desea que se dispare repitiendo semanalmente.

Así que para su escenario de lunes y viernes, establecería un recordatorio semanal de repetición el lunes y un recordatorio semanal de repetición el viernes.

Ejemplo de código:

 private void scheduleAlarm(int dayOfWeek) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek); // Check we aren't setting it in the past which would trigger it to fire instantly if(calendar.getTimeInMillis() < System.currentTimeMillis()) { calendar.add(Calendar.DAY_OF_YEAR, 7); } // Set this to whatever you were planning to do at the given time PendingIntent yourIntent; AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, yourIntent); } private void setUpAlarms() { scheduleAlarm(Calendar.MONDAY); scheduleAlarm(Calendar.FRIDAY); } 

Usted ha dicho que usó el mismo código de su programación semanal, "por iteración". Si entiendo que está intentando establecer una alarma múltiple (dos en su ejemplo) con la misma PendingIntent .

El problema es que como dice la documentación

Cuando configura una segunda alarma que utiliza la misma intención pendiente, reemplaza la alarma original.

De esta manera sólo se activa la segunda alarma.

Así que para resolver su problema simplemente necesita usar un PendingIntent diferente para cada programación.

  • La función "Optimización de aplicaciones" de Samsung mata aplicaciones de fondo después de 3 días
  • Lista de selector de favoritos de Android con la opción predeterminada seleccionada
  • Código fuente de la aplicación Despertador
  • Cómo configurar Alarma para días laborables en android
  • Repetición de IntentService usando Timers- ¿es aconsejable?
  • Cómo repetir el día de la semana de alarma en android
  • ¿Qué contexto recibe BroadcastReceivers al escuchar BOOT_COMPLETED?
  • Android: ¿por qué se detuvo la notificación de alarma después de reiniciar el sistema
  • No se puede descartar / ocultar el icono de la alarma en Android 5.0 Lollipop
  • ¿Cómo puede crear más de una alarma?
  • Servicio enlazado a BroadcastReceiver
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.