повторяющийся будильник без отмены

У меня установлен повторяющийся будильник, моя проблема в том, что после отмены он не отменяется (я проверяю это с помощью Log.v()

Вот как я создаю сигнал тревоги (в IntentService)

AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intentToFire = new Intent(CAlarmReceiver.ACTION_CHECK_ALARM);
PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0);

private void rescheduleAlarm() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, TIME_TO_REFRESH);
    alarms.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), CHECK_TIME,   alarmIntent);

}

Затем в действии у меня есть кнопка, когда она нажимает, она вызывает этот код

private OnClickListener btnCloseApplicationListener = new OnClickListener() {
    public void onClick(View v) {
        intentToCancel = new Intent(CAlarmReceiver.ACTION_CHECK_ALARM);
        alarmIntent = PendingIntent.getBroadcast(v.getContext(), 0, intentToCancel, 0);
        alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarm.cancel(alarmIntent);
        finish();
    }
};

После выполнения finish() я продолжаю видеть журналы, которые у меня есть, в окне DDMS. Как я могу отменить это? Заранее спасибо!


person polonskyg    schedule 06.07.2011    source источник


Ответы (1)


попробуйте использовать тот же контекст для намерения. Намерения должны совпадать, и я думаю, ваша проблема в том, что вы используете другой контекст при попытке отменить будильник.

alarmIntent = PendingIntent.getBroadcast(this, 0, intentToCancel, 0);
person J.G.Sebring    schedule 11.07.2011
comment
Tapirboy, я думаю, должно совпадать только намерение. Вы говорите, что я должен создать экземпляр класса, который я использовал для создания тревоги в этом классе, чтобы иметь тот же контекст, а затем отправить этот объект в качестве первого параметра getBroadcast? Что-то вроде: намерениеToCancel = новое намерение (CAlarmReceiver.ACTION_CHECK_ALARM); PreviousClass c = new PreviousClass(); alarmIntent = PendingIntent.getBroadcast(c, 0,intentToCancel, 0); будильник = (AlarmManager) getSystemService (Context.ALARM_SERVICE); сигнализация.отмена (сигнализацияIntent); финиш(); - person polonskyg; 12.07.2011
comment
Нет, вам не нужно создавать экземпляр класса. - person J.G.Sebring; 24.08.2011
comment
Да, но я переназначал тревогу в приемнике, поэтому я создал переменную на уровне приложения, и если эта переменная ложна, я просто не переназначаю тревогу. Не знаю, что метод отмены не работал. - person polonskyg; 25.08.2011