Подтвердить что ты не робот

Удалить уведомление из панели уведомлений из других приложений

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

Почему я хочу это сделать?

У меня есть приложение, которое читает и отправляет SMS через веб-страницу, и я хочу, чтобы это приложение совместно выходило с существующими приложениями SMS, такими как Handcent SMS. Способ, которым я хочу работать, заключается в том, что при чтении недавно полученных SMS через веб-страницу я хочу отменить новое SMS-уведомление, показанное Handcent SMS, потому что теперь новое SMS-сообщение читается. Я отмечаю SMS как прочитанное, и Handcent SMS распознает его как прочитанное после того, как я открою Handcent SMS, но уведомление все еще существует, пока я не нажму на фактическое SMS.

Есть два сенария; номер 1:

  • Устройство android получает SMS.
  • Уведомление отображается с помощью Handcent SMS.
  • Пользователь читает SMS на устройстве.
  • Handcent SMS удаляет уведомление и маркирует SMS как прочитанное.

Сенарио 2:

  • Устройство android получает SMS.
  • Уведомление отображается с помощью Handcent SMS.
  • Пользователь считывает SMS через веб-интерфейс.
  • Мое приложение очистит новое SMS-уведомление, показанное Handcent SMS, и помечает SMS как прочитанное.

Возможно ли это?

4b9b3361

Ответ 1

Начиная с Android 4.3, вы можете отменить уведомления из любых приложений.

Вам нужно зарегистрировать свое приложение как NotificationListenerService, а затем вызвать NotificationListenerService.cancelNotification(String pkg, String tag, int id), чтобы отменить одно уведомление.

Ответ 2

Вы можете отменить свои собственные уведомления, используя NotificationManager.
Но вы не можете отменить уведомления других приложений, что невозможно.

Ответ 3

Вы можете закрыть любое использование уведомлений NotificationListenerService:

public class NotificationListener extends NotificationListenerService {

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
      cancelNotification(sbn.getKey());
    }
}

Ваше приложение должно иметь разрешение BIND_NOTIFICATION_LISTENER_SERVICE. https://developer.android.com/reference/android/service/notification/NotificationListenerService.html