Как использовать Notification.deleteIntent
Я пытаюсь определить, когда моё уведомление очищено. Мой вопрос напрямую относится к этому ответу, который описывает, что я должен делать. Вот как я реализую действия:
// 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 ответа
Что вам нужно сделать, это зарегистрировать BroadcastReceiver
(вероятно, в вашем AndroidManifest.xml или альтернативно registerReceiver
в Service
), а затем установить deleteIntent
быть Intent
который будет пойман этим получателем.
Пример кода, который будет вызываться всякий раз, когда пользователь очищает уведомление, надеюсь, он вам поможет.
....
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>
Вы должны использовать метод getBroadcast вместо getService и зарегистрировать получателя для определенного действия.
Явный получатель не требуется. deleteIntent будет вызываться автоматически при нажатии кнопки очистки.