2011-08-31 17 views
9

estoy haciendo una pequeña aplicación donde tengo que configurar la alarma de la matriz, pero sólo una alarma está configurada y trabajando a la vez que está en la última posición de la matriz por qué se comporta como esto sigue es mi código¿Cómo configurar más de una alarma a la vez en Android?

AlarmManager[] alarmManager=new AlarmManager[24]; 
       for(f=0;f<arr2.length;f++) 
       { 
        Intent intent = new Intent(AlarmR.this, Riciving.class); 
        pi=PendingIntent.getBroadcast(AlarmR.this, 0,intent, 0); 

        alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); 
        alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); 

        } 

Gracias de antemano

+0

puede utilizar esta [Más de alarmas] (http://www.satyakomatineni.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=3503) – Uttam

+0

@Uttam Utils.getTimeAfterInSecs (45); no funciona porque no hay utils de clase interna, entonces, ¿cómo puedo lograr lo mismo? – Nitin

+0

Hola, ¿puede por favor publicar el código completo con receptor Múltiple alarma al mismo tiempo ... –

Respuesta

22

En su pendingIntent necesita establecer el segundo requestCode en un número único. Por lo general, ejecuto la matriz a través de un bucle for y establezco el código de solicitud dinámicamente para cada elemento en la matriz. Sin el requestCode las alarmas se sobrescriben entre sí.

AlarmManager[] alarmManager=new AlarmManager[24]; 
intentArray = new ArrayList<PendingIntent>(); 
for(f=0;f<arr2.length;f++){ 
    Intent intent = new Intent(AlarmR.this, Riciving.class); 
    pi=PendingIntent.getBroadcast(AlarmR.this, f,intent, 0); 

    alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); 

    intentArray.add(pi); 

} 

Básicamente, lo que desea cambiar requestCode a una serie dinámica. Al establecerlo en f le está dando una nueva identificación única para cada elemento en la matriz. Tenga en cuenta que, si desea cancelar las alarmas, necesitará usar otro ciclo for y cancelar cada uno individualmente. Personalmente agrego todas mis alarmas a su propia matriz para poder manejarlas por separado.

Entonces, si necesita cancelar ellos:

private void cancelAlarms(){ 
    if(intentArray.size()>0){ 
     for(int i=0; i<intentArray.size(); i++){ 
      alarmmanager.cancel(intentArray.get(i)); 
     } 
     intentArray.clear(); 
    } 
} 
+0

me puede dar algún código – Nitin

+0

I actualicé mi respuesta con algún código. Tenga en cuenta que esto no coincide con la documentación. Tuve que lidiar con esto no hace mucho tiempo en un proyecto en el que estoy trabajando. – ryandlf

+5

¿Por qué la matriz de AlarmManager-s? – KarolDepka

3

Si desea configurar varias alarmas (repetir o individual), a continuación, sólo tiene que crear sus PendingIntents con diferentes requestCode. Si requestCode es el mismo, la nueva alarma sobrescribirá la anterior.

Aquí está el código para crear múltiples alarmas individuales y mantenerlas en ArrayList. Sigo PendingIntent's en la matriz porque eso es lo que necesitas para cancelar tu alarma. // variable de contexto contiene su Context

AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); 
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 

for(i = 0; i < 10; ++i) 
{ 
Intent intent = new Intent(context, OnAlarmReceiver.class); 
// Loop counter `i` is used as a `requestCode` 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); 
// Single alarms in 1, 2, ..., 10 minutes (in `i` minutes) 
mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime() + 60000 * i, 
      pendingIntent); 

intentArray.add(pendingIntent); 
} 
Cuestiones relacionadas