Ответ 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);
}
}