2016-04-13 14 views
1

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)

Antwort

0

Scheint, wie ich von einem anderen Datum an die Alarme und die _id Jahre waren unterschiedliche Fütterung wurde ein paar Zahlen (Anfang und Ende waren die gleichen), dies führte zu einem Aufruf für einen Abbruch auf _id Werte, die anders waren und nicht funktionierten.

die Art und Weise geändert ich die _id erzeugen die Daten auszuschließen (was ich mit new Date() erzeugt) und nicht funktioniert es

Durch schlecht, ich es nicht gesehen haben.