Obtener la lista de los intentos pendientes registrados en Android OS

Registro las alarmas que programo para ejecutar en un momento determinado, y puede haber muchas alarmas dependiendo del tamaño de la lista programada. Pero tengo dos preguntas que no me quedan claras:

1) ¿Cómo puedo consultar el sistema operativo para los registros de Intents I pendientes? Necesito esto para las pruebas. El código psudo para lo que quiero sería algo como esto:

List<PendingIntent> intentsInOS = context.getAllPendingIntentsOfType(AppConstants.INTENT_ALARM_SCHEDULE)); 

2) Ver la intención pendiente que crear, proporcionar una acción y datos adicionales (la identificación de la programación).

 private Intent getSchedeuleIntent(Integer id) { Intent intent = new Intent(AppConstants.INTENT_ALARM_SCHEDULE); intent.putExtra(AppConstants.INTENT_ALARM_SCHEDULE_EXTRA, id); return intent; } 

Pero también decimos que la intención tiene FLAG_CANCEL_CURRENT. ¿Cancelará todos los intentos pendientes con la misma acción, o tiene que tener la misma acción Y datos adicionales?

 PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, getSchedeuleIntent(schedule.id), PendingIntent.FLAG_CANCEL_CURRENT); 

Mi código

 @Override public void run() { List<ScheduledLocation> schedules = dbManager.getScheduledLocations(); if(schedules == null || schedules.isEmpty()){ return; } AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); //alarmManager. // we need to get the number of milliseconds from current time till next hour:minute the next day. for(ScheduledLocation schedule : schedules){ long triggerAtMillis = DateUtils.millisecondsBetweenNowAndNext(now, schedule.hour, schedule.minute, schedule.day); PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, getSchedeuleIntent(schedule.id), PendingIntent.FLAG_CANCEL_CURRENT); alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtMillis, MILLISECONDS_IN_WEEK, pendingIntent); } // List<PendingIntent> intentsInOS = context.getAllPendingIntentsOfType(AppConstants.INTENT_ALARM_SCHEDULE)); } private Intent getSchedeuleIntent(Integer id) { Intent intent = new Intent(AppConstants.INTENT_ALARM_SCHEDULE); intent.putExtra(AppConstants.INTENT_ALARM_SCHEDULE_EXTRA, id); return intent; } 

1 ¿Cómo puedo consultar el sistema operativo para los registros de Intents I pendientes?

No estoy seguro de que pueda, pero puede comprobar si un PendingIntent específico está registrado o no es así:

 private boolean checkIfPendingIntentIsRegistered() { Intent intent = new Intent(context, RingReceiver.class); // Build the exact same pending intent you want to check. // Everything has to match except extras. return (PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE) != null); } 

2 ¿Cancelará todas las intenciones pendientes con la misma acción, o tiene que tener la misma acción Y datos adicionales?

Se cancelará todo el PendingIntent que se resuelven para ser iguales.

¿Qué significa exactamente igual ?

El java doc de android dice:

Determine si dos intenciones son las mismas para los propósitos de resolución de intenciones (filtrado). Es decir, si su acción, datos, tipo, clase y categorías son los mismos. Esto no compara ningún dato adicional incluido en los intentos.

Puede leer en la línea 7391 aquí: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/content/Intent.java

Para resumir, todos los PendingIntent que se construyen exactamente los mismos excepto los extras serán cancelados.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.