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