J'ai lu de nombreux exemples de création de messages de notification. Ce que je voulais réaliser, c'est parce que la notification sera exécutée par un widget, je voudrais que l'intention de notification lorsque vous cliquez dessus pour la supprimer automatiquement lorsque l'utilisateur clique dessus.Je n'ai pas d'activité à laquelle revenir. La notification à mes fins ne fera que notifier clairement, rien d'autre. Alors, quel serait le code d'une intention qui s'efface/s'annule. Le code ci-dessous est une activité lancée par un bouton (code bouton non inclus) la notification sera déclenchée par un service en arrière-plan.
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);
Merci
Découvrez FLAG_AUTO_CANCEL
Bit à bit par bit dans le champ des indicateurs qui doit être défini si la notification doit être annulée lorsque l'utilisateur clique dessus.
MODIFIER:
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Définissez les indicateurs dans notification.flags au lieu de notification.defaults.
Exemple:
notification.flags |= Notification.FLAG_ONLY_ALERT_ONCE | Notification.FLAG_AUTO_CANCEL;
Si vous utilisez NotificationCompat.Builder
(Une partie de Android.support.v4
), Appelez simplement la méthode de son objet setAutoCancel
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);
Certains gars signalaient que setAutoCancel()
ne fonctionnait pas pour eux, vous pouvez donc essayer de cette façon également
builder.build().flags |= Notification.FLAG_AUTO_CANCEL;
La seule façon dont je peux voir cela est d'avoir votre Notification
Intent
pointer vers un fond Service
. Lorsque ce service est lancé, il effacerait le Notification
donné en utilisant NotificationManager.cancel(int id)
. Le Service
s'arrêterait alors lui-même. Ce n'est pas joli et ce ne serait pas facile à mettre en œuvre, mais je ne trouve pas d'autre moyen de le faire.
/**
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);
L'utilisation de setContentIntent devrait résoudre votre problème:
.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(), 0));
Par exemple:
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());
Souvent, vous souhaiterez peut-être rediriger l'utilisateur vers le contenu pertinent et remplacer ainsi "new Intent ()" par autre chose.