alarmManager.cancel не работает - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь остановить повторяющуюся тревогу.Я уже искал решение для всего Интернета, но мой код кажется нормальным ...Тем не менее, это не останавливает тревогу ... Вот немного кода (FM является объектом записи файлов)

public void StartAlarm() {
     Intent intent = new Intent(getApplicationContext(), AlarmReciever.class);
     PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);

     AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
     Calendar alarm = Calendar.getInstance();
     alarm.setTimeInMillis(System.currentTimeMillis());
     alarm.set(Calendar.HOUR_OF_DAY, 15);
     alarm.set(Calendar.MINUTE, 0);
     long alarmCal=alarm.getTimeInMillis();
     if (alarmCal<=new Date().getTime()) {
        alarm.add(Calendar.DAY_OF_MONTH, 1);
     }
     am.setRepeating(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender);
     FM.Write("startAlarm()");
     }


 public void StopAlarm() {
        if (isAlarmRunning()) {
             Intent intent = new Intent(getApplicationContext(), AlarmReciever.class);
             PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
            AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
            alarmManager.cancel(sender);
            FM.Write("alarm canceled");
            isAlarmRunning();
        }
public boolean isAlarmRunning() {
    Intent intentToCheck = new Intent(getApplicationContext(),AlarmReciever.class);
    boolean alarm = PendingIntent.getBroadcast(getApplicationContext(), 0, intentToCheck,
            PendingIntent.FLAG_NO_CREATE) != null;
    FM.Write("alarm = "+alarm);
    if (!alarm) {
        return false;
    }
    else
        return true;
}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Как вы проверяете, что сигнал тревоги все еще там? Вам нужно использовать эквивалент PendingIntent (то же самое намерение, те же самые флаги), чтобы остановить тревогу, и это работает. Кстати, ваш метод isAlarmRunning() проверяет, существует ли PendingIntent, что не совпадает с зарегистрированным сигналом тревоги. Может вернуть true, даже если сигнал тревоги был удален.

1 голос
/ 19 марта 2012

используйте это в обеих функциях

PendingIntent sender = PendingIntent.getBroadcast(getApplicationContext(), 0,     intent, PendingIntent.FLAG_UPDATE_CURRENT);
...