it-swarm.com.ru

Как удалить уведомление из панели уведомлений в 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

52
Jayesh Sojitra

Может быть, попробуйте это: 

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

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

notificationManager.cancelAll();

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

155
An-droid

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

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

public void cancelNotification() {

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

Все уведомления (даже уведомления других приложений) могут быть удалены путем прослушивания 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"));
}

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

0
Samantha