Intento pendiente con intención diferente pero id. Mismo

Tengo dos intención pendiente de usar con el Administrador de Alarma uno es:

Intent i = new Intent(context, TriggerAlarm.class); PendingIntent pi =PendingIntent.getBroadcast(context,0,i,PendingIntent.FLAG_CANCEL_CURRENT); 

Y el otro es:

  Intent i = new Intent(context, TriggerNotification.class); PendingIntent pi = PendingIntent.getBroadcast(context,0, i,PendingIntent.FLAG_CANCEL_CURRENT); 

Yo uso estos dos en diferentes métodos en mi aplicación

mi pregunta es:

¿Estos differents pendientes se diferencian entre sí? Porque las intenciones son diferentes, pero los IDs son los mismos

Si configuro el administrador de alarmas para cada una de estas intenciones pendientes, ¿ambos activan o reemplazan a otro?

Así que la manera fácil es probarlo directamente por ti mismo. Lo he probado en mi computadora y aquí es lo que tengo:

¿Son estos pendientes diferentes diferentes entre sí? Porque las intenciones son diferentes, pero los IDs son los mismos

-Si son diferentes entre sí, aunque los IDs son los mismos

Si configuro el administrador de alarmas para cada una de estas intenciones pendientes, ¿ambos activan o reemplazan a otro?

-Los dos se activarán

Aquí está mi código para la prueba, usted puede copiar y probarlo por usted mismo

Copie este método en su actividad y llámelo

 private void setAlarmManager() { Log.v("AlarmManager", "Configuring AlarmManager..."); Intent startIntent1 = new Intent(context, AlarmReceiverFirst.class); PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, startIntent1, PendingIntent.FLAG_CANCEL_CURRENT); Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class); PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 20); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Log.v("AlarmManager", "Starting AlarmManager for >= KITKAT version"); alarm.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1); alarm.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent2); } else { Log.v("AlarmManager", "Starting AlarmManager for < KITKAT version"); alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent1); alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent2); } Log.v("AlarmManager", "AlarmManager has been started"); } 

Cree su primera clase de receptor

 public class AlarmReceiverFirst extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v(this.getClass().getSimpleName(), "first alarm receiver is called"); } } 

Cree su segunda clase de receptor

 public class AlarmReceiverSecond extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v(this.getClass().getSimpleName(), "second alarm receiver is called"); } } 

Registre esos receptores en su manifiesto

 <receiver android:name=".AlarmReceiverFirst" /> <receiver android:name=".AlarmReceiverSecond" /> 

Para no confundir, lo que llamaste Id aquí se llama código de solicitud. Se utiliza para cancelar la intención pendiente.

Los intentos son sólo la acción que PendingIntent está obligado a ejecutar una vez que se activa. Pero estos criterios de activación dependen completamente de PendingIntent y RequestCode está jugando aquí un papel bastante bueno para identificar, gestionar y activar PendingIntent.

Por lo tanto, no importa cuál sea el intento, si se repite el requestCode, se activará el último PendingIntent. Si necesita activar múltiples PendingIntents, el requestCode debe ser diferente el uno del otro.

Usted puede tener el mismo nombre de intentos pero con diversos ids como el siguiente,

 Intent i = new Intent(context, TriggerAlarm.class); PendingIntent pi =PendingIntent.getBroadcast(context,System.currentTimeMillis(),i,PendingIntent.FLAG_CANCEL_CURRENT); 

Y

 Intent i = new Intent(context, TriggerNotification.class); PendingIntent pi = PendingIntent.getBroadcast(context,System.currentTimeMillis(), i,PendingIntent.FLAG_CANCEL_CURRENT); 

De esta manera, tanto las intenciones se distinguen de manera diferente entre sí y obtendrá triggered.You puede tener cualquier ID único en lugar de System.currentTimeMillis()

  • Android: Inicie el servicio con Context.startService vs PendingIntent.getService
  • FLAG_CANCEL_CURRENT o FLAG_UPDATE_CURRENT
  • Eliminar los datos de la intención de notificación
  • Android AlarmManager problema con la configuración y restablecimiento de una alarma
  • ¿Cómo puedo pasar correctamente los extras exclusivos a una intención pendiente?
  • FusedLocationApi con PendingIntent para actualizaciones de ubicación de fondo. No se pueden recibir actualizaciones
  • Alarma pendiente La alarma no se cancela
  • Android O, Background Service se está ejecutando durante más de 30 minutos. ¿Por qué?
  • ¿AlarmManager requiere que PendingIntent sea del tipo BroadcastReceiver?
  • Utilizar two pendingIntent en una vista en Appwidget
  • Cancelación de una solicitud pendiente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.