web-dev-qa-db-ja.com

Android自己消去するための通知意図

通知メッセージを作成する方法の多くの例を読みました。私が達成したかったのは、通知がウィジェットによって実行されるため、ユーザーがクリックすると通知がクリックされたときにそれを自動的にクリアするように通知インテントが欲しいのです。戻るアクティビティがありません。私の目的のための通知は、単に何も通知せず、単に通知するだけです。それで、それ自体をクリア/キャンセルするインテントのコードは何でしょうか。以下のコードは、ボタン(ボタンコードは含まれていません)によって起動されるアクティビティで、バックグラウンドサービスによって通知が発生します。

CharSequence title = "Hello";
CharSequence message = "Hello, Android!";
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
final Notification notification = new Notification(R.drawable.icon,"A New Message!",System.currentTimeMillis());

notification.defaults=Notification.FLAG_ONLY_ALERT_ONCE+Notification.FLAG_AUTO_CANCEL;
Intent notificationIntent = new Intent(this, AndroidNotifications.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,notificationIntent, 0);

notification.setLatestEventInfo(AndroidNotifications.this, title,message, pendingIntent);
notificationManager.notify(NOTIFICATION_ID, notification);

ありがとう

29
John

チェックアウト FLAG_AUTO_CANCEL

ユーザーがクリックしたときに通知をキャンセルする必要がある場合に設定する必要があるフラグフィールドにビット単位でORを適用するビット。

EDIT:

notification.flags |= Notification.FLAG_AUTO_CANCEL;
74
Pentium10

Notification.defaultsの代わりにnotification.flagsでフラグを設定します。

例:

notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
19
Proxy32

_NotificationCompat.Builder_(_Android.support.v4_の一部)を使用している場合は、そのオブジェクトのメソッドsetAutoCancelを呼び出すだけです。

_NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
_

一部の人はsetAutoCancel()がうまく機能しないと報告していたので、この方法も試してみてください

_builder.build().flags |= Notification.FLAG_AUTO_CANCEL;
_
10
sandalone

これを行うために私が見ることができる唯一の方法は、あなたのNotificationIntentが背景Serviceを指すようにすることです。このサービスが起動すると、NotificationManager.cancel(int id)を使用して、指定されたNotificationをクリアします。その後、Serviceはそれ自体を停止します。それは美しくなく、実装も簡単ではありませんが、他の方法で見つけることはできません。

1
iandisme
 /** 
      Post a notification to be shown in the status bar. 
      Obs.: You must save this values somewhere or even pass it as an extra through Intent to use it later
 */
 notificationManager.notify(NOTIFICATION_ID, notification);

 /** 
      Cancel a previously shown notification given the notification id you've saved before
 */
 notificationmanager.cancel(NOTIFICATION_ID);
1
swathi

SetContentIntentを使用すると、問題が解決します。

.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));

例えば:

NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("title")
        .setAutoCancel(true)
        .setContentText("content")
        .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));
NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, mBuilder.build());

多くの場合、ユーザーを適切なコンテンツに誘導したい場合があるため、「new Intent()」を別のものに置き換えます。

1
Amal Dev S I