Depuis le niveau d'API 16 (Jelly Bean), il est possible d'ajouter des actions à une notification avec
builder.addAction(iconId, title, intent);
Mais lorsque j'ajoute une action à une notification et que l'action est activée, la notification ne sera pas rejetée. Lorsque vous cliquez sur la notification elle-même, elle peut être rejetée avec
notification.flags = Notification.FLAG_AUTO_CANCEL;
ou
builder.setAutoCancel(true);
Mais évidemment, cela n'a rien à voir avec les actions associées à la notification.
Des indices? Ou cela ne fait-il pas encore partie de l'API? J'ai rien trouvé.
la source
J'ai trouvé que c'était un problème lors de l'utilisation de la notification d'affichage tête haute de Lollipop. Voir les directives de conception . Voici le code complet (ish) à implémenter.
Jusqu'à présent, avoir un bouton «Ignorer» était moins important, mais maintenant c'est plus dans votre visage.
Construire la notification
NotificationActivité
AndroidManifest.xml (attributs requis pour empêcher SystemUI de se concentrer sur une pile arrière)
la source
J'ai trouvé que lorsque vous utilisez les boutons d'action dans les notifications étendues, vous devez écrire du code supplémentaire et vous êtes plus contraint.
Vous devez annuler manuellement votre notification lorsque l'utilisateur clique sur un bouton d'action. La notification n'est annulée automatiquement que pour l'action par défaut.
De plus, si vous démarrez un récepteur de diffusion à partir du bouton, le tiroir de notification ne se ferme pas.
J'ai fini par créer une nouvelle NotificationActivity pour résoudre ces problèmes. Cette activité intermédiaire sans interface utilisateur annule la notification, puis démarre l'activité que je voulais vraiment démarrer à partir de la notification.
J'ai publié un exemple de code dans un article connexe. Cliquer sur Actions de notification Android ne ferme pas le tiroir de notification .
la source
Vous pouvez toujours
cancel()
leNotification
de tout ce qui est invoqué par l'action (par exemple, dansonCreate()
de l'activité liée à celle quePendingIntent
vous fournissezaddAction()
).la source
cancel()
prend l'ID duNotification
, que vous avez utilisé lorsque vous avez appelénotify()
. Vous n'avez pas besoin de l'Notification
objet.ACTION_VIEW
et que le type estimage/jpeg
(pour partager une image avec une autre application), comment cette annulation est-elle censée être déclenchée? IMO Android devrait s'annuler automatiquement, je suis perplexe quant à la raison pour laquelle Android ne s'en occupe pas seulement?!Notification
-relatedPendingIntent
, ce n'est pas vraiment la façon dont elle a été conçue pour fonctionner, et vous rencontrerez donc des problèmes comme celui-ci. "IMO Android devrait s'annuler automatiquement" - Je pourrais voir offrir un drapeau pour cela sur l'action, mais cela ne devrait pas être une chose permanente. Si c'était le cas, sauter une piste dans une notification de lecteur de musique fermerait la notification.À mon avis, utiliser un
BroadcastReceiver
est un moyen plus propre d'annuler une notification:Dans AndroidManifest.xml:
Dans le fichier java:
NotificationCancelReceiver
la source
intent.putExtra()
et l'obtenirBroadcastReceiver
Dans les nouvelles API, n'oubliez pas TAG:
et en conséquence
au lieu de:
https://developer.android.com/reference/android/app/NotificationManager
la source
cancel()
fonction ait 2 implémentations; un avec TAG et un sans. Mais nous devons fournir un fichierTAG
. Voici lacancel
fonction de la documentationpublic void cancel(@Nullable String tag, int id)
. Dernière vérification sur Android QMettez simplement cette ligne:
Et le code complet est:
la source
Vous devrez exécuter le code suivant après le déclenchement de votre intention pour supprimer la notification.
NB: notificationId est le même id passé pour exécuter votre notification
la source
builder.setAutoCancel (true);
Testé sur Android 9 également.
la source