Можно ли проверить, видно или отменено уведомление?

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

Проблема в том, что я не хочу поднять новый, если оригинал отменен. Есть ли способ узнать, видно или отменено уведомление? Или способ обновления уведомления только в том случае, если он существует?

Solutions Collecting From Web of "Можно ли проверить, видно или отменено уведомление?"

Вот как я это решил:

private boolean isNotificationVisible() { Intent notificationIntent = new Intent(context, MainActivity.class); PendingIntent test = PendingIntent.getActivity(context, MY_ID, notificationIntent, PendingIntent.FLAG_NO_CREATE); return test != null; } 

Вот как я генерирую уведомление:

  /** * Issues a notification to inform the user that server has sent a message. */ private void generateNotification(String text) { int icon = R.drawable.notifiaction_icon; long when = System.currentTimeMillis(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, text, when); String title = context.getString(R.string.app_name); Intent notificationIntent = new Intent(context, MainActivity.class); // set intent so it does not start a new activity //notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, MY_ID, notificationIntent, 0); notification.setLatestEventInfo(context, title, text, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; //PendingIntent.FLAG_ONE_SHOT notificationManager.notify(MY_ID, notification); } 

Сала. Если вы используете API >= 23 можете использовать этот метод для получения активного уведомления:

 StatusBarNotification[] notifications = mNotificationManager.getActiveNotifications(); for (StatusBarNotification notification : notifications) { if (notification.getId() == 100) { // Do something. } } 

Я думаю, вы можете использовать класс deleteIntent of Notification .

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

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

В принципе, вы создаете намерение с уведомлением, которое запускает IntentService (или любую другую услугу), а в onHandleIntent вы можете установить флаг, указывающий, является ли уведомление активным.
Вы можете установить это намерение, когда пользователь удаляет уведомление ( contentIntent ) и / или когда пользователь удаляет его из списка ( deleteIntent ).

Чтобы проиллюстрировать это, вот что я делаю в своем приложении. При создании уведомления я установил

 Intent intent = new Intent(this, CleanupIntentService.class); Notification n = NotificationCompat.Builder(context).setContentIntent( PendingIntent.getActivity(this, 0, intent, 0)).build(); 

При прослушивании CleanupIntentService запускается моя CleanupIntentService , устанавливая флаг (в службе, которая создала уведомление):

 @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onCreate(); // If removed, onHandleIntent is not called return super.onStartCommand(intent, flags, startId); } @Override protected void onHandleIntent(Intent intent) { OtherService.setNotificationFlag(false); }