NotificationCompat with API 26

前端 未结 5 516
滥情空心
滥情空心 2020-11-27 03:38

I dont see any information about how to use NotificationCompat with Android O\'s Notification Channels

I do see a new Constructor that takes a cha

相关标签:
5条回答
  • 2020-11-27 03:48

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

    Notification Channel

        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 notify to User:

                mNotific.notify(ncode, n);
    
    0 讨论(0)
  • 2020-11-27 03:49

    Please be careful if you did all the work and you did not get any results. On some devices, you must set the notification priority.

       final NotificationCompat.Builder mBuilder = new 
        NotificationCompat.Builder(mContext, "default")
        .setPriority(Notification.PRIORITY_MAX);
    
    0 讨论(0)
  • 2020-11-27 03:52

    I know this answer is late, but better late then never!
    I have just released the notification-channel-compat library which provides Notification Channel support going back to OS 4.0. Since developers anyways have to design for Channels, they can now use the benefits of Channels for all devices, and they don't have to design separately for older devices.
    The library uses the built-in channel classes for OS 8.0+ devices, and mimics it for older devices. All it takes, is using our NotificationChannelCompat, NotificationChannelGroupCompat and NotificationChannelManagerHelper classes, and adding one line of code. You can see more at github. Please test it and let me know of any issues.
    Thank you,
    Lionscribe

    0 讨论(0)
  • 2020-11-27 03:59

    NotificationChannel actually groups multiple notifications into channels. It basically gives more control of the notification behavior to the user. You can read more about Notification Channel and its implementation at Working with Notification Channel | With Example

    Notification Channel is only applicable for 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);
    }  
    

    Note that Channel ID passed to the constructor acts as the unique identifier for that Notification Channel. Now create the Notification as shown below

    // Creating the Channel
    NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    notificationManager.createNotificationChannel(notificationChannel);
    

    To add any Notification to this Channel just pass the Channel ID as shown below

    //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 讨论(0)
  • 2020-11-27 04:06

    Create the NotificationChannel only if 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);
    }
    

    And then just use:

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "default");
    

    So your notifications are working with both API 26 (with channel) and below (without).

    0 讨论(0)
提交回复
热议问题