58 votes

NotificationCompat avec l'API 26

Je ne vois aucune information sur la façon d'utiliser NotificationCompat avec Android O. Notification Channels

Je vois un nouveau Constructeur qui prend un channelId mais comment prendre une notification Compat et l'utiliser dans un NotificationChannel car createNotificationChannel prend un NotificationChannel objet

0 votes

134voto

stankocken Points 1476

Créer le NotificationChannel seulement 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");

Ainsi, vos notifications fonctionnent à la fois avec l'API 26 (avec le canal) et ci-dessous (sans).

0 votes

Alors, faut-il régler le son/les lumières/les vibrations dans le canal ou faut-il encore le faire dans le compat builder ?

1 votes

Vous n'êtes pas obligé de régler les sons/lumières/vibrations, vous POUVEZ le faire. Je ne sais pas ce qui se passera si vous avez un canal avec des sons/lumières/vibration personnalisés et une notification de vibration personnalisée, par exemple. Avec l'API 26, car en dessous, le canal est simplement ignoré.

0 votes

@user5195185 Essayez d'utiliser le support Android compat 26.0.2 ( compile 'com.android.support:support-compat:26.0.2' dans build.gradle)

19voto

Ragavendra M Points 322

Déclarer le gestionnaire de notification :

   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";

Créateur de notifications

        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 notifier à l'utilisateur :

            mNotific.notify(ncode, n);

1voto

IrshadKumail Points 352

NotificationChannel regroupe en fait plusieurs notifications dans des canaux. En fait, il permet à l'utilisateur de mieux contrôler le comportement des notifications. Pour en savoir plus sur le canal de notification et sa mise en œuvre, consultez le site suivant Travailler avec le Canal de Notification | Avec Exemple

Le canal de notification n'est applicable que 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 du canal passé au constructeur agit comme un identifiant 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 à ce canal, il suffit de passer l'ID du canal 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());

0 votes

L'ajout de l'id du canal au constructeur échoue pour moi : error : constructor Builder in class Builder cannot be applied to given types ; new NotificationCompat.Builder(mContext, "my_channel_01") ^ required : Contexte trouvé : Context,String raison : les listes d'arguments réels et formels diffèrent en longueur

0voto

lionscribe Points 1903

Je sais que cette réponse est tardive, mais mieux vaut tard que jamais !
Je viens de publier le canal de notification-compat qui fournit un support pour les canaux de notification depuis OS 4.0. Puisque les développeurs doivent de toute façon concevoir pour les canaux, ils peuvent maintenant utiliser les avantages des canaux pour tous les appareils, et ils n'ont pas à concevoir séparément pour les anciens appareils.
La bibliothèque utilise les classes de canaux intégrées pour les appareils OS 8.0+, et les imite pour les appareils plus anciens. Tout ce qu'il faut, c'est utiliser notre NotificationChannelCompat , NotificationChannelGroupCompat y NotificationChannelManagerHelper et en ajoutant une ligne de code. Vous pouvez en voir plus à github . Veuillez le tester et me faire part de toute questions .
Merci,
Lionscribe

0voto

Iman Marashi Points 2465

Faites attention si vous avez fait tout le travail et que vous n'avez obtenu aucun résultat. Sur certains appareils, vous devez régler la notification priorité .

   final NotificationCompat.Builder mBuilder = new 
    NotificationCompat.Builder(mContext, "default")
    .setPriority(Notification.PRIORITY_MAX);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X