web-dev-qa-db-ja.com

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

63

たぶんこれを試してください:

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

または、これを実行して、特定のコンテキストですべての通知をキャンセルすることもできます。

notificationManager.cancelAll();

ドキュメントへのこのリンクを参照してください: NotificationManager

172
An-droid

通知は、次のいずれかが発生するまで表示され続けます。

ユーザーは、個別に、または「すべてクリア」を使用して通知を破棄します(通知をクリアできる場合)。ユーザーが通知をクリックし、通知の作成時にsetAutoCancel()を呼び出しました。特定の通知IDに対してcancel()を呼び出します。このメソッドは、進行中の通知も削除します。 cancelAll()を呼び出すと、以前に発行したすべての通知が削除されます。 setTimeoutAfter()を使用して通知を作成するときにタイムアウトを設定すると、指定された期間が経過した後、システムは通知をキャンセルします。必要に応じて、指定されたタイムアウト期間が経過する前に通知をキャンセルできます

public void cancelNotification() {

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

NotificationListenerService Implementation で説明されているように、「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"));
}

その後、放送受信機を使用して、すべてクリアをトリガーします。

ブロードキャストの使用をトリガーする上記のコードに従って。

getContext().sendBroadcast(new Intent("com.test.app"));
1
Samantha