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