поймать салфетки, чтобы отклонить событие

Я использую уведомление Android для предупреждения пользователя после завершения службы (успех или сбой), и я хочу удалить локальные файлы, как только процесс будет завершен.

Моя проблема в том, что в случае сбоя – я хочу дать пользователю возможность повторить попытку. и если он решит не повторять попытку и отклонить уведомление, я хочу удалить локальные файлы, сохраненные для целей процесса (изображения …).

Есть ли способ поймать событие «Свидание-отмена уведомления»?

    DeleteIntent : DeleteIntent – объект PendingIntent, который может быть связан с уведомлением и уволен, когда уведомление удаляется, эфир:

    • Пользовательское действие
    • Пользователь Удалить все уведомления.

    Вы можете настроить Ожидающее намерение на широковещательный приемник, а затем выполнить любое действие, которое вы хотите.

    Intent intent = new Intent(this, MyBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, 0); Builder builder = new Notification.Builder(this): ..... code for your notification builder.setDeleteIntent(pendingIntent); 

    MyBroadcastReceiver

     public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { .... code to handle cancel } } 

    Полностью погасший ответ (спасибо г-ну Мэй за ответ):

    1) Создайте приемник для обработки события «Сдвинуть-отменить»:

     public class NotificationDismissedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int notificationId = intent.getExtras().getInt("com.my.app.notificationId"); /* Your code to handle the event here */ } } 

    2) Добавьте запись в манифест:

       

    3) Создайте ожидающее намерение с использованием уникального идентификатора для ожидающего намерения (здесь используется идентификатор уведомления), так как без этого одни и те же дополнительные функции будут повторно использоваться для каждого события увольнения:

     private PendingIntent createOnDismissedIntent(Context context, int notificationId) { Intent intent = new Intent(context, NotificationDismissedReceiver.class); intent.putExtra("com.my.app.notificationId", notificationId); PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), notificationId, intent, 0); return pendingIntent; } 

    4) Создайте свое уведомление:

     Notification notification = new NotificationCompat.Builder(context) .setContentTitle("My App") .setContentText("hello world") .setWhen(notificationTime) .setDeleteIntent(createOnDismissedIntent(context, notificationId)) .build(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(notificationId, notification); 

    Другая идея:

    если вы обычно создаете уведомление, вам также нужны действия один, два или три из них. Я создал «NotifyManager», он создает все уведомления, которые мне нужны, а также получает все вызовы Intent. Поэтому я могу управлять всеми действиями, а также улавливать событие увольнения в ОДНОМ месте.

     public class NotifyPerformService extends IntentService { @Inject NotificationManager notificationManager; public NotifyPerformService() { super("NotifyService"); ...//some Dagger stuff } @Override public void onHandleIntent(Intent intent) { notificationManager.performNotifyCall(intent); } 

    для создания deleteIntent используйте это (в NotificationManager):

     private PendingIntent createOnDismissedIntent(Context context) { Intent intent = new Intent(context, NotifyPerformMailService.class).setAction("ACTION_NOTIFY_DELETED"); PendingIntent pendingIntent = PendingIntent.getService(context, SOME_NOTIFY_DELETED_ID, intent, 0); return pendingIntent; } 

    и THAT я использую, чтобы установить намерение удаления как это (в NotificationManager):

     private NotificationCompat.Builder setNotificationStandardValues(Context context, long when){ String subText = "some string"; NotificationCompat.Builder builder = new NotificationCompat.Builder(context.getApplicationContext()); builder .setLights(ContextUtils.getResourceColor(R.color.primary) , 1800, 3500) //Set the argb value that you would like the LED on the device to blink, as well as the rate .setAutoCancel(true) //Setting this flag will make it so the notification is automatically canceled when the user clicks it in the panel. .setWhen(when) //Set the time that the event occurred. Notifications in the panel are sorted by this time. .setVibrate(new long[]{1000, 1000}) //Set the vibration pattern to use. .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher)) .setSmallIcon(R.drawable.ic_white_24dp) .setGroup(NOTIFY_GROUP) .setContentInfo(subText) .setDeleteIntent(createOnDismissedIntent(context)) ; return builder; } 

    и, наконец, в том же NotificationManager есть функция выполнения:

     public void performNotifyCall(Intent intent) { String action = intent.getAction(); boolean success = false; if(action.equals(ACTION_DELETE)) { success = delete(...); } if(action.equals(ACTION_SHOW)) { success = showDetails(...); } if(action.equals("ACTION_NOTIFY_DELETED")) { success = true; } if(success == false){ return; } //some cleaning stuff } 
    Interesting Posts

    Сколько разницы между тонерами разных принтеров

    Собственное использование приложения делегата приложения iPhone

    Как я могу установить значение моего подключения eth0 при запуске?

    C # Image.Clone Out of Memory Exception

    Реализация круговой прокрутки в PagerAdapter

    Clipboard.GetText возвращает null (пустая строка)

    Невозможно избавиться от высокопроизводительного процессора Win 10 'и сжатой памяти', любого предложения?

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

    Как получить панель инструментов из fragmentа?

    Восстановление файлов из форматированного раздела HFS +

    Нет типа данных для узла: org.hibernate.hql.internal.ast.tree.IdentNode HQL

    Как я могу выборочно отключить блокаторы пасты

    Использование матрицы для поочередного поворота прямоугольников

    Это приложение не может быть активировано, когда UAC отключен

    Как анализировать дату в Date?

    Давайте будем гением компьютера.