Je ne vois aucune information sur la façon d'utiliser NotificationCompat avec Android O's Notification Channels
Je vois un nouveau constructeur qui prend un channelId
mais comment prendre une notification Compat et l'utiliser dans un NotificationChannel puisque createNotificationChannel
prend un objet NotificationChannel
Créez la NotificationChannel
uniquement si API> = 26
public void initChannels(Context context) {
if (Build.VERSION.SDK_INT < 26) {
return;
}
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel channel = new NotificationChannel("default",
"Channel name",
NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription("Channel description");
notificationManager.createNotificationChannel(channel);
}
Et puis juste utiliser:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "default");
Vos notifications fonctionnent donc à la fois avec l'API 26 (avec canal) et en dessous (sans).
Déclarer Notification Manager:
final NotificationManager mNotific=
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence name="Ragav";
String desc="this is notific";
int imp=NotificationManager.IMPORTANCE_HIGH;
final String ChannelID="my_channel_01";
Canal de notification
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationChannel mChannel = new NotificationChannel(ChannelID, name,
imp);
mChannel.setDescription(desc);
mChannel.setLightColor(Color.CYAN);
mChannel.canShowBadge();
mChannel.setShowBadge(true);
mNotific.createNotificationChannel(mChannel);
}
final int ncode=101;
String Body="This is testing notific";
Notification Builder
Notification n= new Notification.Builder(this,ChannelID)
.setContentTitle(getPackageName())
.setContentText(Body)
.setBadgeIconType(R.mipmap.ic_launcher)
.setNumber(5)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setAutoCancel(true)
.build();
NotificationManager informe l'utilisateur:
mNotific.notify(ncode, n);
NotificationChannel regroupe en réalité plusieurs notifications en canaux. En gros, cela donne plus de contrôle sur le comportement de notification à l'utilisateur. Pour en savoir plus sur Notification Channel et son implémentation, consultez tilisation de Notification Channel | With Example
Notification Channel est uniquement applicable pour Android Oreo.
//Notification channel should only be created for devices running Android 26
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel("unique_channel_id","channel_name",NotificationManager.IMPORTANCE_DEFAULT);
//Boolean value to set if lights are enabled for Notifications from this Channel
notificationChannel.enableLights(true);
//Boolean value to set if vibration is enabled for Notifications from this Channel
notificationChannel.enableVibration(true);
//Sets the color of Notification Light
notificationChannel.setLightColor(Color.GREEN);
//Set the vibration pattern for notifications. Pattern is in milliseconds with the format {delay,play,sleep,play,sleep...}
notificationChannel.setVibrationPattern(new long[]{500,500,500,500,500});
//Sets whether notifications from these Channel should be visible on Lockscreen or not
notificationChannel.setLockscreenVisibility( Notification.VISIBILITY_PUBLIC);
}
Notez que l'ID de canal transmis au constructeur sert d'identificateur unique pour ce canal de notification. Maintenant, créez la notification comme indiqué ci-dessous
// Creating the Channel
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(notificationChannel);
Pour ajouter une notification à cette chaîne, transmettez simplement l'ID de la chaîne, comme indiqué ci-dessous.
//We pass the unique channel id as the second parameter in the constructor
NotificationCompat.Builder notificationCompatBuilder=new NotificationCompat.Builder(this,NOTIFICATION_CHANNEL_ID);
//Title for your notification
notificationCompatBuilder.setContentTitle("This is title");
//Subtext for your notification
notificationCompatBuilder.setContentText("This is subtext");
//Small Icon for your notificatiom
notificationCompatBuilder.setSmallIcon(R.id.icon);
//Large Icon for your notification
notificationCompatBuilder.setLargeIcon( BitmapFactory.decodeResource(getResources(),R.id.icon));
notificationManager.notify( NOTIFICATION_ID,notificationCompatBuilder.build());
Je sais que cette réponse est tardive, mais mieux vaut tard que jamais!
Je viens de publier la bibliothèque notification-channel-compat qui fournit la prise en charge de Notification Channel depuis OS 4.0. Étant donné que les développeurs doivent de toute façon concevoir des canaux, ils peuvent désormais utiliser les avantages de ces canaux pour tous les périphériques, sans avoir à concevoir séparément les périphériques plus anciens.
La bibliothèque utilise les classes de canaux intégrées pour les périphériques OS 8.0+ et les imite pour les périphériques plus anciens. Tout ce qu'il faut, c'est utiliser nos classes NotificationChannelCompat
, NotificationChannelGroupCompat
et NotificationChannelManagerHelper
et ajouter une ligne de code. Vous pouvez voir plus à github . S'il vous plaît testez-le et laissez-moi savoir de tout questions .
Je vous remercie,
Lionscribe
S'il vous plaît soyez prudent si vous avez fait tout le travail et vous n'avez pas obtenu de résultats. Sur certains appareils, vous devez définir la notification priorité.
final NotificationCompat.Builder mBuilder = new
NotificationCompat.Builder(mContext, "default")
.setPriority(Notification.PRIORITY_MAX);