À partir d'Android O (API version 26), l'inscription au «canal de notification» par notification push est requise. En d'autres termes, la cible est lorsque targetSdkVersion est égal ou supérieur à 26.
Le "canal de notification" est équipé d'une fonction qui vous permet d'activer / désactiver les notifications en fonction du contenu de la notification, comme la séparation des "informations sur les bénéfices" et des "notifications de délai de points" ou par catégorie d'actualités.
Même si j'augmente la targetSdkVersion de 25 ou moins à 26 ou plus, aucun avertissement n'est affiché dans Android Studio. Ce n'est pas fait, mais lorsque je le construis et le notifie, une erreur s'affiche comme "Aucun canal" comme indiqué ci-dessous.
E/NotificationService: No Channel found for pkg=com.example.app, channelId=null, id=1234567890, tag=null, opPkg=com.example.app, callingUid=12345, userId=0, incomingUserId=0, notificationUid=12345, notification=Notification(channel=null pri=0 contentView=null vibrate=null sound=content://settings/system/notification_sound defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE)
De plus, bien sûr, les paramètres de notification ne peuvent pas être réécrits du côté de l'application, de sorte que le côté de l'application ne peut pas synchroniser les paramètres avant Android O avec l'écran de configuration du côté de l'application.
Enregistrez la chaîne comme suit.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel(
//ID de chaîne unique
//Il semble bon de le garder constant ici quelque part
"channel_id_sample",
//Nom du canal affiché dans les paramètres
//Il semble bon de spécifier la ressource ici
"Notification push",
//Importance du canal
//L'emplacement d'affichage diffère selon l'importance
NotificationManager.IMPORTANCE_DEFAULT
);
//Activer les lumières sur les notifications
channel.enableLights(true);
//Couleur claire au moment de la notification
channel.setLightColor(Color.WHITE);
//Niveau d'affichage sur l'écran de verrouillage
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
//Abonnez-vous à la chaîne
manager.createNotificationChannel(channel);
}
Le regroupement est également possible en utilisant NotificationChannelGroup
et setGroup
.
Il y a quelques changements ici, spécifiez simplement le canal avec setChannelId
.
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
Resources res = getResources();
int icon = res.getIdentifier("app_icon", "drawable", this.getPackageName());
int titleId = res.getIdentifier("app_name", "string", this.getPackageName());
String applicationName = this.getString(titleId);
String message = "Quelque chose de test";
Notification.Builder mBuilder = new Notification.Builder(this)
.setSmallIcon(icon)
.setLargeIcon(BitmapFactory.decodeResource(this.getResources(), icon))
.setContentTitle(applicationName)
.setContentText(message)
.setContentIntent(pendingIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mBuilder.setChannelId("channel_id_sample");
}
Après août de cette année, les nouvelles applications ne pourront plus s'appliquer au Play Store à moins que la targetSdkVersion soit portée à 26 ou plus. Après novembre de cette année, les applications existantes ne pourront plus s'appliquer au Play Store à moins que la targetSdkVersion ne soit augmentée à 26 ou plus. Par la suite, après 2019, il sera nécessaire d'augmenter la targetSdkVersion dans un délai d'un an à compter de la sortie de la nouvelle version.