usando tutorial studio notification manager example ejemplo cancel android alarmmanager

tutorial - cómo configurar múltiples alarmas usando android alarm manager



tutorial alarmmanager (4)

Estoy construyendo una aplicación de alarma. He implementado con éxito funciones básicas de alarma.

Calendar calendar = Calendar.getInstance(); calendar.set(calendar.HOUR_OF_DAY, sHour); calendar.set(calendar.MINUTE, sMin); calendar.set(calendar.SECOND, 0); calendar.set(calendar.MILLISECOND, 0); long sdl = calendar.getTimeInMillis(); Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmList.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager ALARM1 = (AlarmManager)getSystemService(ALARM_SERVICE); ALARM1.set(AlarmManager.RTC_WAKEUP, sdl, sender);

en mi aplicación, el usuario puede seleccionar días (domingo, lunes ...) para repetir la alarma semanalmente. Intento crear múltiples alarmas para repetir semanalmente pero no sé cómo hacerlo. ¿Puedo crearlo usando el intervalo (repetición) o debo crear múltiples administradores de alarmas?


De los documentos :

Si ya hay una alarma para este intento programado (con la igualdad de dos intentos definida por filterEquals(Intent) , entonces será eliminada y reemplazada por esta

Múltiples AlarmManagers no resolverían su problema. Si tienen varias alarmas diferentes (diferentes horas y diferentes días), entonces necesitarás configurar la alarma dentro del BroadcastReceiver cada vez que disparas una alarma anterior.

También necesitaría retener RECEIVE_BOOT_COMPLETED y tener un BroadcastReceiver para recibir el inicio, de modo que si el teléfono se reinicia, puede reprogramar sus alarmas.


Necesita utilizar different Broadcast id''s para los pending intents . Algo como esto:

Intent intent = new Intent(load.this, AlarmReceiver.class); final int _id = (int) System.currentTimeMillis(); PendingIntent appIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT);

Usar la hora del sistema debe ser un identificador único para cada intento pendiente que dispare.


Para configurar múltiples alarmas, debe definir su Intent cada vez para que se pueda distinguir de las demás. La forma más fácil de hacerlo es configurar el campo de data de su Intent siguiente manera:

// give your alarm an id and save it somewhere // in case you want to cancel it in future String myAlarmId = ...; // create your Intent Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); intent.setData(Uri.parse("myalarms://" + myAlarmId)); ...

El resto de tu código @ Hassy31 está bien tal como está y no cambia.

Tenga en cuenta que el parámetro PendingIntent.getBroadcast() en el método PendingIntent.getBroadcast() (como lo sugiere @parag) no se utiliza de acuerdo con la documentación, por lo que esta no es la manera correcta de hacerlo.


establecer la id difusión para pendienteIntent

for (int id = 0; id < 3; id++) { // Define pendingintent PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id,ntent, 0); // set() schedules an alarm alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, pendingIntent); }