Liste der registrierten ausstehenden Absichten in Android-Betriebssystemen abrufen

Ich registriere Alarme, deren Ausführung zu einem bestimmten Zeitpunkt geplant ist. Abhängig von der Größe der geplanten Liste kann dies eine Vielzahl von Alarmen sein. Aber ich habe zwei Fragen, die mir unklar bleiben:

1) Wie kann ich das Betriebssystem nach den von mir registrierten ausstehenden Absichten abfragen? Ich brauche das zum Testen. Der Psudo-Code für das, was ich möchte, würde etwa so lauten:

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

2) Zeigen Sie die ausstehende Absicht an, die ich erstellt habe, und geben Sie eine Aktion und zusätzliche Daten an (die Zeitplan-ID).

private Intent getSchedeuleIntent(Integer id) {

    Intent intent = new Intent(AppConstants.INTENT_ALARM_SCHEDULE);
    intent.putExtra(AppConstants.INTENT_ALARM_SCHEDULE_EXTRA, id);

    return intent;
}

Wir sagen aber auch, dass die Absicht FLAG_CANCEL_CURRENT hat. Bricht es alle ausstehenden Absichten mit derselben Aktion ab oder muss es dieselbe Aktion UND zusätzliche Daten enthalten?

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

Mein Code

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage