Как использовать намерение удаления, чтобы выполнить какое-либо действие по очистке уведомления?

Я хочу сбросить переменную моего сервиса, когда пользователь очищает мое уведомление:все!

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

void onClearPressed(){
   aVariable = 0;
}

как получить этот результат?

Ответы на вопрос(1)

Решение Вопроса

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

Единственная возможность в вашем случае - предоставитьPendingIntent который просто оборачивается вокруг обычного Намерения и будет запущен от имени вашего приложения, когда уведомление будет очищено. Вам нужно использоватьPendingIntent для отправки трансляции или запуска службы, а затем делать то, что вы хотите, в приемнике вещания или в службе. Что именно использовать, зависит от того, из какого компонента приложения вы показываете уведомления.

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

public class NotificationHelper {
    private static final String NOTIFICATION_DELETED_ACTION = "NOTIFICATION_DELETED";

    private final BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            aVariable = 0; // Do what you want here
            unregisterReceiver(this);
        }
    };

    public void showNotification(Context ctx, String text) {
        Intent intent = new Intent(NOTIFICATION_DELETED_ACTION);
        PendingIntent pendintIntent = PendingIntent.getBroadcast(ctx, 0, intent, 0);
        registerReceiver(receiver, new IntentFilter(NOTIFICATION_DELETED_ACTION));
        Notification n = new Notification.Builder(mContext).
          setContentText(text).
          setDeleteIntent(pendintIntent).
          build();
        NotificationManager.notify(0, n);
    }
}
 Yasir27 нояб. 2014 г., 21:31
Я пытаюсь это с помощью intentService. Получение исключения намерения получателя утечка. "Вы пропустили вызов unregisterReceiver? " Кто-нибудь может пролить свет на это?
 smora02 янв. 2015 г., 21:06
Зарегистрировать и отменить регистрацию Receiver следует вызывать из нереферентного контекста, поэтому использование getApplicationContext () в вашем in intentService должно решить вашу проблему.
 pepyakin17 апр. 2015 г., 13:08
d рекомендуем зарегистрировать статический получатель (например, зарегистрированный в AndroidManifest), поскольку приложение может быть уничтожено в момент, когда пользователь отклонил уведомление. Статический приемник гарантирует, что код будет выполнен, даже если приложение уже не работает.
 Rule18 авг. 2015 г., 11:54
Это'Статический приемник вещания возможен только в том случае, если оноткрытый класс или статический вложенный класс. Итак, вы нене может иметь контекст для переменной, которую выпытаемся изменить

Ваш ответ на вопрос