Jak programowo usunąć powiadomienie z paska powiadomień w Androidzie?

Ktoś ma pomysł, jak możemy programowo usunąć powiadomienie z aplikacji, które jest wywoływane za pomocą oczekujących intencji.

Używałem do anulowania powiadomienia za pomocą poniższej metody.

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

Ale problemem jest powiadomienie, które już się uruchomiło, które nie zostało usunięte z paska powiadomień.

Z góry dzięki...

Tutaj wpisz opis obrazka

Author: svarog, 2013-10-09

3 answers

Może spróbuj tego :

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

Lub możesz to zrobić również, aby anulować wszystkie powiadomienia w danym kontekście:

notificationManager.cancelAll();

Zobacz ten link do dokumentacji: NotificationManager

 134
Author: An-droid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 08:03:58

Powiadomienia pozostają widoczne do momentu wystąpienia jednego z następujących zdarzeń:

Użytkownik odrzuca powiadomienie indywidualnie lub za pomocą "Wyczyść wszystko" (jeśli powiadomienie może zostać wyczyszczone). Użytkownik kliknie powiadomienie i wywołał setautocancel () podczas tworzenia powiadomienia. Wywołujesz cancel () dla określonego identyfikatora powiadomienia. Ta metoda usuwa również bieżące powiadomienia. Wywołujesz cancelAll (), która usuwa wszystkie wcześniej wydane powiadomienia. Jeśli ustawisz limit czasu podczas tworzenia powiadomienia za pomocą metody setTimeoutAfter(), system anuluje powiadomienie po upływie określonego czasu. W razie potrzeby można anulować powiadomienie przed upływem określonego limitu czasu public void cancelNotification () {

    String ns = NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) getActivity().getApplicationContext().getSystemService(ns);
    nMgr.cancel(NOTIFICATION_ID);
}
 0
Author: Faxriddin Abdullayev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-19 11:50:31

Wszystkie powiadomienia (nawet inne powiadomienia aplikacji) można usunąć poprzez nasłuchiwanie "NotificationListenerService", jak wspomniano w implementacja NotificationListenerService

W serwisie musisz zadzwonić cancelAllNotifications().

Usługa musi być włączona dla Twojej aplikacji poprzez "aplikacje i powiadomienia" - > "specjalny dostęp do aplikacji" - > "dostęp do powiadomień".

Dodaj do manifestu:

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

Następnie w kodzie;

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

Następnie użyj odbiornika nadawczego do Uruchom Wyczyść wszystko.

 0
Author: Samantha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-17 08:07:39