Как использовать Notification.deleteIntent - PullRequest
17 голосов
/ 19 сентября 2011

Я пытаюсь определить, когда моё уведомление очищено.Мой вопрос напрямую относится к этому ответу , в котором описывается, что я должен делать.Вот как я реализую действия:

// usual Notification initialization here
notification.deleteIntent = PendingIntent.getService(context, 0, new Intent(context, CleanUpIntent.class), 0);
notificationManager.notify(123, notification)

Это класс CleanUpIntent:

class CleanUpIntent extends IntentService {
    public CleanUpIntent() {
        super("CleanUpIntent");
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
        // clean up code
    }
}

После этого я просто запускаю уведомление, как обычно, но когда я иду впроверить его (нажав «Очистить все уведомления») ничего не происходит.Я вставил строку кода, которая распечатывает что-то в LogCat при запуске IntentService, но ничего не запускалось.Это как я должен использовать Notification.deleteIntent?

Ответы [ 4 ]

46 голосов
/ 06 февраля 2013

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

 ....
 notificationBuilder.setDeleteIntent(getDeleteIntent());
 ....


protected PendingIntent getDeleteIntent()
 {
    Intent intent = new Intent(mContext, NotificationBroadcastReceiver.class);
    intent.setAction("notification_cancelled");
    return PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}

NotificationBroadcastReceiver.java

@Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();
        if(action.equals("notification_cancelled"))
        {
            // your code
        }
    }

AndroidManifiest.xml

 <receiver android:name=".NotificationBroadcastReceiver">
                <intent-filter>
                    <action android:name="notification_cancelled"/>
                </intent-filter>
            </receiver>
3 голосов
/ 19 сентября 2011

Что вам нужно сделать, это зарегистрировать BroadcastReceiver (возможно, в вашем AndroidManifest.xml или, альтернативно, использовать registerReceiver в Service), а затем установить deleteIntent на Intent, который будет перехвачен этот приемник.

0 голосов
/ 24 мая 2013

Явный получатель не требуется.deleteIntent будет вызываться автоматически при нажатии кнопки clear .

0 голосов
/ 19 июля 2012

Вы должны использовать метод getBroadcast вместо getService и зарегистрировать получателя для определенного действия.

...