通知メッセージを作成する方法の多くの例を読みました。私が達成したかったのは、通知がウィジェットによって実行されるため、ユーザーがクリックすると通知がクリックされたときにそれを自動的にクリアするように通知インテントが欲しいのです。戻るアクティビティがありません。私の目的のための通知は、単に何も通知せず、単に通知するだけです。それで、それ自体をクリア/キャンセルするインテントのコードは何でしょうか。以下のコードは、ボタン(ボタンコードは含まれていません)によって起動されるアクティビティで、バックグラウンドサービスによって通知が発生します。
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);
ありがとう
チェックアウト FLAG_AUTO_CANCEL
ユーザーがクリックしたときに通知をキャンセルする必要がある場合に設定する必要があるフラグフィールドにビット単位でORを適用するビット。
EDIT:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Notification.defaultsの代わりにnotification.flagsでフラグを設定します。
例:
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
_NotificationCompat.Builder
_(_Android.support.v4
_の一部)を使用している場合は、そのオブジェクトのメソッドsetAutoCancel
を呼び出すだけです。
_NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
_
一部の人はsetAutoCancel()
がうまく機能しないと報告していたので、この方法も試してみてください
_builder.build().flags |= Notification.FLAG_AUTO_CANCEL;
_
これを行うために私が見ることができる唯一の方法は、あなたのNotification
のIntent
が背景Service
を指すようにすることです。このサービスが起動すると、NotificationManager.cancel(int id)
を使用して、指定されたNotification
をクリアします。その後、Service
はそれ自体を停止します。それは美しくなく、実装も簡単ではありませんが、他の方法で見つけることはできません。
/**
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);
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()」を別のものに置き換えます。