Как отменить уведомления Android? - PullRequest
5 голосов
/ 11 августа 2010

Я создаю приложение, в котором пользователь может установить будильник на основе местоположения GPS. Я хочу, чтобы в каждый момент времени была активна только 1 сигнализация. Поэтому, когда пользователь устанавливает второй сигнал тревоги, я хочу отменить уведомление для первого сигнала тревоги (затем установить новое уведомление для второго сигнала тревоги).

Прямо сейчас мои уведомления продолжают складываться (так как я не могу их удалить, поэтому они все активны). Вот мой код, где я пытаюсь удалить сигнал тревоги и уведомления:

// Stop the location alarm activity
Intent intentAlarmService_delete = new Intent(v.getContext(), AlarmService.class);
stopService(intentAlarmService_delete); // I think this calls onDestroy() in AlarmService class ...

mNtf = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNtf.cancelAll();

Intent alarmIntent2 = new Intent(getApplicationContext(), OneTimeAlarmReceiver.class);
PendingIntent pendingIntentAlarm = PendingIntent.getBroadcast(getApplicationContext(), PENDING_INTENT_REQUEST_CODE1, 
    alarmIntent2, PendingIntent.FLAG_CANCEL_CURRENT);
pendingIntentAlarm.cancel();

Это функция onDestroy () в моем AlarmService.class (я не совсем уверен, когда это вызывается ...)

public void onDestroy(){
    super.onDestroy();
    mNtf.cancel(NOTIFICATION_ID1);

    Intent alarmIntent = new Intent(getApplicationContext(), OneTimeAlarmReceiver.class);

    PendingIntent pendingIntentAlarm = PendingIntent.getBroadcast(getApplicationContext(), PENDING_INTENT_REQUEST_CODE1, 
        alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    pendingIntentAlarm.cancel();

    Intent intentAlarmService = new Intent(getApplicationContext(), AlarmService.class); 
    stopService(intentAlarmService); 

    mNtf.cancel(NOTIFICATION_ID1);
    mNtf.cancelAll();
}

Тогда вот как я устанавливаю новый будильник и уведомление:

Intent intentAlarmService2 = new Intent(v.getContext(), AlarmService.class);
startService(intentAlarmService2);

Кстати, мой AlarmService.class наверняка работает.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 11 августа 2010

Во-первых, избавьтесь от getApplicationContext(). Вы почти никогда не нуждаетесь в этом, и это часто - неправильный выбор. Замените его на this, поскольку все, что вы называете getApplicationContext() на , равно a Context.

В коде, который вы перечислили, вы никогда не поднимаете Notification. Следовательно, трудно помочь вам понять, почему вы получаете больше, чем один. Вызов cancelAll() на NotificationManager должен избавить вас от всех ожидающих уведомлений из вашего приложения.

По-моему, onDestroy() не вызывается на вашем сервисе. Это может произойти, если что-то еще хранит службу в памяти (например, у вас есть активное связанное с ней соединение через bindService()). Или, возможно, у вас есть что-то странное в вашем элементе <service> в манифесте (например, ненужный атрибут android:process), который портит операцию NotificationManager cancel().

2 голосов
/ 11 августа 2010

Вы должны убедиться, что вы всегда ссылаетесь на один и тот же экземпляр вашего NotificationManager.Разные экземпляры будут выдавать разные уведомления.Я бы рекомендовал использовать сервис для управления уведомлениями.

http://developer.android.com/guide/topics/fundamentals.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...