web-dev-qa-db-fra.com

Comment supprimer la notification de la barre de notification par programme dans Android?

Tout le monde a une idée de la façon dont nous pouvons supprimer la notification de l'application appelée par programme en utilisant l'intention en attente.

J'ai utilisé pour annuler la notification en utilisant la méthode suivante.

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);

Mais le problème est la notification qui a déjà été déclenchée et qui n'est pas supprimée de la barre de notification.

Merci d'avance...

enter image description here

52
Jayesh Sojitra

Peut-être essayez ceci: 

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

OU, vous pouvez également le faire pour annuler toutes les notifications dans un contexte donné:

notificationManager.cancelAll();

Voir ce lien vers la documentation: NotificationManager

155
An-droid

Les notifications restent visibles jusqu'à ce que l'une des situations suivantes se produise:

L'utilisateur rejette la notification individuellement ou en utilisant "Tout effacer" (si la notification peut être effacée) . L'utilisateur clique sur la notification et vous avez appelé setAutoCancel () lors de la création de la notification . Vous appelez annuler () pour un ID de notification spécifique. Cette méthode supprime également les notifications en cours . Vous appelez cancelAll (), ce qui supprime toutes les notifications émises précédemment . Si vous définissez un délai d’expiration lors de la création d’une notification à l’aide de setTimeoutAfter (), le système annule la durée spécifiée écoulée. Si nécessaire, vous pouvez annuler une notification avant la fin du délai imparti.

public void cancelNotification() {

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

Toutes les notifications (même les autres notifications d'application) peuvent être supprimées en écoutant «NotificationListenerService», comme indiqué dans NotificationListenerService Implementation

Dans le service, vous devez appeler cancelAllNotifications().

Le service doit être activé pour votre application via "Applications et notifications" -> "Accès spécial aux applications" -> "Accès aux notifications".

Ajouter au manifeste:

    <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>

Puis en code;

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"));
}

Après cela, utilisez le récepteur de radiodiffusion pour tout effacer.

0
Samantha