2013-05-26 4 views
0

В течение последних двух дней я пытался заставить AlarmManager отменить установленные ранее Alarms, по какой-то причине я не могу заставить его работать.Android AlarmManager не отменяет идентичные намерения

У меня проблема с googled, и наиболее распространенным решением было отслеживать старые намерения, потому что только с ними они отменяются.

Чтобы решить эту проблему, я решил создать свой собственный класс Intent, который является Serializable.

Затем я сохранил классы Intent в файле «Intent.ser» и напомнил им об отмене моего будильника.

SerUitvalIntent.java

public class SerUitvalIntent extends Intent implements Serializable 
{ 

private String klas; 
private int delay; 
private Boolean uitvalBuzz; 
private Boolean algemeenBuzz; 

public SerUitvalIntent(Context context, Class<?> class1) 
{ 
    super(context, class1); 
} 

public void setBundle(Bundle b) 
{ 
    klas = b.getString(someClass.KLAS); 
    delay = b.getInt(someClass.DELAY); 
    uitvalBuzz = b.getBoolean(someClass.UITVALBUZZ); 
    algemeenBuzz = b.getBoolean(someClass.ALGEMEENBUZZ); 
} 

public Bundle getBundle() 
{ 
    Bundle b = new Bundle(); 
    b.putBoolean(someClass.UITVALBUZZ, uitvalBuzz); 
    b.putBoolean(someClass.ALGEMEENBUZZ, algemeenBuzz); 
    b.putString(someClass.KLAS, klas); 
    b.putInt(someClass.DELAY, delay); 
    return b; 
} 

/** 
* 
*/ 
private static final long serialVersionUID = 8289838097824161902L; 
} 

someClass.java

public static void schedule(Context context, long delay, Bundle data, Boolean startup) 
{ 
    DataHandler dHandle = new DataHandler(context, false); 
    final AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    SerUitvalIntent oldIntent = dHandle.getAlarm(); 

    if(oldIntent != null) 
    { 
     oldIntent.putExtra(BUNDLE, oldIntent.getBundle()); 
     oldIntent.putExtra(FROMUI, false); 
     Bundle b = oldIntent.getBundle(); 
     Log.i("AlarmManagerUitval", "Cancelled " + b.getString(KLAS) + "." + b.getInt(DELAY) + "." + b.getBoolean(UITVALBUZZ) + " alarm"); 
     final PendingIntent oldPending = PendingIntent.getService(context, 0, oldIntent, 0); 
     //Cancel latest alarm 
     alarm.cancel(oldPending); 
    } 


    final SerUitvalIntent intent = new SerUitvalIntent(context, UitvalService.class); 
    intent.setBundle(data); 
    dHandle.setAlarm(intent); 

    intent.putExtra(BUNDLE, data); 
    intent.putExtra(FROMUI, false); 

    final PendingIntent pending = PendingIntent.getService(context, 0, intent, 0); 

    Log.i("AlarmManagerUitval", "Started " + data.getString(KLAS) + "." + data.getInt(DELAY) + "." + data.getBoolean(UITVALBUZZ) + " alarm"); 
    long time; 

    if(startup) 
    { 
     time = SystemClock.elapsedRealtime(); 
    } 
    else 
    { 
     time = SystemClock.elapsedRealtime()+delay; 
    } 
    alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, time,delay, pending); 
} 

Мой Logcat показывает идентичные данные, когда сигналы устанавливаются и отмененное (Log.i() показывает одинаковые данные) , но почему-то это не отменяет.

Logcat данных

05-26 14:21:00.108: I/AlarmManagerUitval(26041): Started v4.60000.true alarm 
05-26 14:21:00.178: I/UitvalService(26041): updating: v4 
(...) 
05-26 14:21:30.227: I/AlarmManagerUitval(26041): Cancelled v4.60000.true alarm 
05-26 14:21:30.237: I/AlarmManagerUitval(26041): Started h4.60000.true alarm 
05-26 14:21:30.307: I/UitvalService(26041): updating: h4 
(...) 
05-26 14:22:30.526: I/UitvalService(26104): updating: v4 
05-26 14:23:30.244: I/UitvalService(26104): updating: v4 

ответ

0

я сдалась: P

Я сохранил данные, которые я хотел отправить вместе в тревоге, и воссоздан общий Intent каждый раз, я хотел, чтобы отменить предыдущий сигнал тревоги ,

Затем я вспомнил сохраненные данные о намерении, вызванном сигналом тревоги.

Если кто-то найдет правильный ответ на эту проблему, мне все равно будет интересно узнать.)

Wampie

Смежные вопросы