web-dev-qa-db-fra.com

Android Notification l'intention de l'effacer automatiquement

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

29
John

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;
74
Pentium10

Définissez les indicateurs dans notification.flags au lieu de notification.defaults.

Exemple:

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

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;
10
sandalone

La seule façon dont je peux voir cela est d'avoir votre NotificationIntent 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.

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

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.

1
Amal Dev S I