Ich versuche, mit meiner App mehrere Alarme einzustellen und sie auf Anfrage abzubrechen.Alarme für Android Alarm Manager können nicht abgebrochen werden
Ich habe viele Themen über das gleiche gelesen, und ging durch die Dokumentation, aber es scheint, als ob es nicht funktioniert.
Dokumentation sagt, dass eine Absicht zu finden versuchen, Abbrechen, die die übereinstimmt ich mit 'filterEquals ‚liefern (‘ fest, ob zwei Absichten die gleichen für die Zwecke des Vorsatzes Auflösung (Filterung) sind. Das heißt, wenn ihre Aktion, Daten, Typ, Klasse und Kategorien sind die gleichen. Dies vergleicht keine zusätzlichen Daten in den Absichten. ')
Ich stelle die gleiche Aktion, Daten, Typ, Klasse und Kategorie, also warum funktioniert es nicht?
Alarm erstellen:
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
int interval = 30000;
Intent intent = new Intent(getApplicationContext(), Broadcast.class);
intent.putExtra("alarmTime",alarmTime);
intent.putExtra("reminder1",reminder1);
intent.putExtra("reminder2",reminder2);
intent.putExtra("title",title);
intent.putExtra("message",message);
intent.putExtra("vibrate",vibrate);
intent.putExtra("sound",sound);
intent.putExtra("name",name);
//Create _id from data input. is unique
int _id = 0;
for (char i: name.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:title.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:message.toCharArray()){
_id += Character.getNumericValue(i);
}
_id += (int) alarmTime.getTime();
_id += (int) reminder1.getTime();
_id += (int) reminder2.getTime();
Log.e("ALARMS", "Creating alarm with id: "+_id);
intent.setData(Uri.parse("custom://" + _id));
intent.setAction(String.valueOf(_id));
PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + interval, pendingUpdateIntent);
Abbrechen Alarm
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), Broadcast.class);
intent.putExtra("alarmTime",alarmTime);
intent.putExtra("reminder1",reminder1);
intent.putExtra("reminder2",reminder2);
intent.putExtra("title",title);
intent.putExtra("message",message);
intent.putExtra("vibrate",vibrate);
intent.putExtra("sound",sound);
intent.putExtra("name",name);
int _id = 0;
for (char i:name.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:title.toCharArray()){
_id += Character.getNumericValue(i);
}
for (char i:message.toCharArray()){
_id += Character.getNumericValue(i);
}
_id += (int) alarmTime.getTime();
_id += (int) reminder1.getTime();
_id += (int) reminder2.getTime();
intent.setData(Uri.parse("custom://" + _id));
intent.setAction(String.valueOf(_id));
PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);
Log.e("ALARMS", "Cancelling alarm with id: "+_id);
// Cancel alarms
try {
manager.cancel(pendingUpdateIntent);
} catch (Exception e) {
Log.e("ALARMS", "AlarmManager update was not canceled. " + e.toString());
}
So 3-mal nenne ich das schaffen Alarm mit verschiedenen Parametern, so dass mein _id ist jedes Mal anders.
Dann rufe ich dreimal den Abbruchalarm und die generierten IDs für jeden Alarm beim Erstellen und Abbrechen.
So läuft der Abbruch, aber meine Alarme werden immer noch ausgelöst.
Meine Alarme lösen einen Broadcast-Empfänger aus, der eine Benachrichtigung pro Alarm ausgibt.
habe ich vergessen zu erwähnen, dass ich mit verschiedenen Flaggen für die PendingIntent versucht aber keine Arbeit (FLAG_CANCEL_CURRENT, FLAG_UPDATE_CURRENT)