Après la mise à niveau de mon projet vers Android O
buildToolsVersion "26.0.1"
Lint dans Android Studio affiche un avertissement obsolète pour la méthode de générateur de notification suivante:
new NotificationCompat.Builder(context)
Le problème est le suivant: les développeurs Android mettent à jour leur documentation décrivant NotificationChannel pour prendre en charge les notifications dans Android O et nous fournissent un extrait de code, mais avec le même avertissement obsolète:
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
Ma question: existe-t-il une autre solution pour créer des notifications et prendre en charge Android O?
Une solution que j'ai trouvée est de transmettre l'ID de canal en tant que paramètre dans le constructeur Notification.Builder. Mais cette solution n'est pas exactement réutilisable.
new Notification.Builder(MainActivity.this, "channel_id")
android
notifications
android-notifications
GuilhermeFGL
la source
la source
notificationBuild.setChannelId("channel_id")
. Dans mon cas, cette dernière solution est plus réutilisable car myNotificationCompat.Builder
est réutilisée dans quelques méthodes, enregistrant des paramètres pour les icônes, les sons et les vibrations.Réponses:
Il est mentionné dans la documentation que la méthode du générateur
NotificationCompat.Builder(Context context)
est obsolète. Et nous devons utiliser le constructeur qui a lechannelId
paramètre:Documentation NotificationCompat.Builder:
Documentation Notification.Builder:
Si vous souhaitez réutiliser les setters de générateur, vous pouvez créer le générateur avec
channelId
, et transmettre ce générateur à une méthode d'assistance et définir vos paramètres préférés dans cette méthode.la source
Notification.Builder(context)
solution dans la session NotificationChannel. Mais bon, au moins vous avez trouvé un message notifiant cette obsolescence =)NotificationCompat.Builder(Context context)
, puis attribuer le canal commebuilder.setChannelId(String channelId)
Voici le code de travail pour toutes les versions d'Android à partir de l' API LEVEL 26+ avec compatibilité descendante.
la source
.setPriority(Notification.PRIORITY_MAX)
sinon utilisez le code mis à jour pour 26 API. `Appelez le constructeur 2-arg: pour la compatibilité avec Android O, appelez support-v4
NotificationCompat.Builder(Context context, String channelId)
. Lors de l'exécution sur Android N ou version antérieure, lechannelId
sera ignoré. Lorsque vous utilisez Android O, créez également unNotificationChannel
avec le mêmechannelId
.Exemple de code obsolète: exemple de code sur plusieurs pages JavaDoc telles que l' appel Notification.Builder
new Notification.Builder(mContext)
est obsolète.Constructeurs obsolètes :
Notification.Builder(Context context)
et v4NotificationCompat.Builder(Context context)
sont obsolètes au profit deNotification[Compat].Builder(Context context, String channelId)
. (Voir Notification.Builder (android.content.Context) et v4 NotificationCompat.Builder (contexte de contexte) .)Classe obsolète : toute la classe v7
NotificationCompat.Builder
est obsolète. (Voir v7 NotificationCompat.Builder .) Auparavant, la v7NotificationCompat.Builder
était nécessaire pour prendre en chargeNotificationCompat.MediaStyle
. Dans Android O, il y a une v4NotificationCompat.MediaStyle
dans la bibliothèque multimédia-compat deandroid.support.v4.media
package. Utilisez celui-ci si vous en avez besoinMediaStyle
.API 14+: dans Support Library à partir de 26.0.0 et versions ultérieures, les packages support-v4 et support-v7 prennent tous deux en charge un niveau d'API minimum de 14. Les noms v # sont historiques.
Voir Révisions récentes de la bibliothèque de support .
la source
Au lieu de vérifier
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
autant de réponses le suggèrent, il existe un moyen un peu plus simple -Ajoutez la ligne suivante à la
application
section du fichier AndroidManifest.xml comme expliqué dans le document Configurer une application client Firebase Cloud Messaging sur Android :Ajoutez ensuite une ligne avec un nom de canal au fichier values / strings.xml :
Après cela, vous pourrez utiliser la nouvelle version du constructeur NotificationCompat.Builder avec 2 paramètres (puisque l'ancien constructeur avec 1 paramètre est obsolète dans Android Oreo):
la source
Voici l'exemple de code, qui fonctionne sous Android Oreo et moins que Oreo.
la source
Échantillon simple
la source
Le bon code sera:
avec la dépendance 26.0.1 et de nouvelles dépendances mises à jour telles que 28.0.0.
Certains utilisateurs utilisent ce code sous la forme de ceci:
Donc, la logique est la méthode que vous déclarerez ou initierez, puis la même méthode du côté droit sera utilisée pour l'allocation. si dans le côté gauche de = vous utiliserez une méthode, la même méthode sera utilisée à droite de = pour l'allocation avec new.
Essayez ce code ... Cela fonctionnera à coup sûr
la source
Ce constructeur était obsolète au niveau d'API 26.1.0. utilisez plutôt NotificationCompat.Builder (Context, String). Toutes les notifications publiées doivent spécifier un identifiant NotificationChannel.
la source
la source