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

Как программно удалить уведомление из панели уведомлений в android?

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

Я использовал для отмены уведомления, используя следующий метод.

AlarmManager am=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(Display.this, TwoAlarmService.class);
PendingIntent pi = PendingIntent.getBroadcast(Display.this, AlarmNumber, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(pi);

Но проблема - это уведомление, которое уже запущено, которые не удаляются из панели уведомлений.

Спасибо заранее...

enter image description here

4b9b3361

Ответ 1

Возможно, попробуйте следующее:

NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

ИЛИ, вы также можете сделать это, чтобы отменить все уведомления в заданном контексте:

notificationManager.cancelAll();

См. ссылку на документацию: NotificationManager

Ответ 2

Уведомления остаются видимыми, пока не произойдет одно из следующих действий:

Пользователь отклоняет уведомление либо по отдельности, либо с помощью "Очистить все" (если уведомление можно очистить). Пользователь щелкает уведомление, и вы вызывали setAutoCancel() при создании уведомления. Вы вызываете метод отмены() для получения определенного идентификатора уведомления. Этот метод также удаляет текущие уведомления. Вы вызываете cancelAll(), который удаляет все ранее отправленные уведомления. Если вы устанавливаете тайм-аут при создании уведомления с помощью setTimeoutAfter(), система отменяет уведомление по истечении заданной продолжительности. При необходимости вы можете отменить уведомление до истечения указанного времени ожидания

public void cancelNotification() {

    String ns = NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) getActivity().getApplicationContext().getSystemService(ns);
    nMgr.cancel(NOTIFICATION_ID);
}

Ответ 3

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

В сервисе вы должны позвонить на cancelAllNotifications().

Служба должна быть включена для вашего приложения через "Приложения и уведомления ->" Доступ к специальному приложению → "Доступ к уведомлениям.

Добавить в манифест:

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:label="Test App" android:name="com.test.NotificationListenerEx" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>

Затем в коде;

public class NotificationListenerEx extends NotificationListenerService {


public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationListenerEx.this.cancelAllNotifications();
    }
};


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

@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
    super.onNotificationRemoved(sbn);
}

@Override
public IBinder onBind(Intent intent) {
    return super.onBind(intent);
}

@Override
public void onDestroy() {
    unregisterReceiver(broadcastReceiver);
    super.onDestroy();
}

@Override
public void onCreate() {
    super.onCreate();
    registerReceiver(broadcastReceiver, new IntentFilter("com.test.app"));
}

После этого используйте широковещательный приемник для запуска очистки всех.