プログラムで通知をクリアすることは可能ですか?
私はそれを試しましたNotificationManager
が、機能しません。他に方法はありますか?
プログラムで通知をクリアすることは可能ですか?
私はそれを試しましたNotificationManager
が、機能しません。他に方法はありますか?
回答:
次のコードを使用して、通知をキャンセルします。
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
このコードでは、通知に使用される同じIDが常にあります。キャンセルする必要のあるさまざまな通知がある場合は、通知の作成に使用したIDを保存する必要があります。
setContentText
、優先度を2に設定しても、後続のすべての通知に通知メッセージテキスト(を使用して設定)が表示されません。
送信元:http : //developer.android.com/guide/topics/ui/notifiers/notifications.html
ユーザーが[通知]ウィンドウからステータスバー通知を選択したときにそれをクリアするには、 "FLAG_AUTO_CANCEL"フラグを通知オブジェクトに追加します。また、cancel(int)で手動でクリアして通知IDを渡すか、cancelAll()ですべての通知をクリアすることもできます。
しかし、Donalは正解です。作成した通知のみをクリアできます。
誰もこれに対するコード回答を投稿していないので:
notification.flags = Notification.FLAG_AUTO_CANCEL;
..すでにフラグがある場合は、次のようにOR FLAG_AUTO_CANCELできます。
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManagerに提供されているデフォルトのメソッドを試してください。
NotificationManager.cancelAll()
すべての通知を削除します。
NotificationManager.cancel(notificationId)
特定の通知を削除します。
cancel
メソッドを持たないNotificationManagerで行き詰まっている場合、cancel
メソッドは静的ではないため、次のNotificationManager
ようなインスタンスが必要になります。その回答で参照されているRohit SutharのようにNotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
呼び出すことができますnotificationManager.cancel(notificationId);
。notificationId
単に渡したIDですnotificationManager.notify(notificationId, mNotification)
APIレベル18(Jellybean MR2)以降、NotificationListenerServiceを介して、自分以外の通知をキャンセルできます。
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}
...
private void clearNotificationExample(StatusBarNotification sbn) {
myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
を使用してフォアグラウンドで開始されたサービスから通知を生成する場合
startForeground(NOTIFICATION_ID, notificationBuilder.build());
次に発行
notificationManager.cancel(NOTIFICATION_ID);
通知がキャンセルされることはなく、通知は引き続きステータスバーに表示されます。この特定のケースでは、発行する必要があります
stopForeground( true );
サービス内からバックグラウンドモードに戻し、同時に通知をキャンセルします。または、通知をキャンセルせずにバックグラウンドにプッシュしてから、通知をキャンセルすることもできます。
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
NotificationCompat.Builder
(の一部android.support.v4
)を使用している場合は、そのオブジェクトのメソッドを呼び出すだけですsetAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
一部の人はsetAutoCancel()
彼らのためにうまくいかなかったと報告していたので、あなたもこのように試すことができます
builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;
このメソッドgetNotification()
は廃止されていることに注意してください!!!
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
これは、通知ビルダーを使用している場合に機能します...
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
詳細については、こちらをクリックしてくださいhttp://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
実際、APIレベル18で始める前に回答したように、NotificationListenerServiceを使用して、独自のアプリとは異なる他のアプリによって投稿された通知をキャンセルできますが、そのアプローチはLollipopでは機能しなくなります。LillipopAPIも対象とする通知を削除する方法は次のとおりです。
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
。
NotificationListenerServiceの実装で説明したように、「NotificationListenerService」をリッスンすることで、すべての通知(他のアプリの通知も含む)を削除できます
サービスではあなたが呼び出す必要がありますcancelAllNotifications()
。
次の方法で、アプリケーションに対してサービスを有効にする必要があります。
「アプリと通知」->「特別なアプリアクセス」->「通知アクセス」。
このコードは私のために働きました:
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}