Search code examples
androidandroid-notificationsandroid-notification-barandroid-statusbar

Oreo Notification Bar Round Icon


I want to know that how can I change the notification bar small icon in android Oreo (API 26). It has round white icon showing in the notification bar. How can I change it? Manifest file default notification icon set as below.

<meta-data
     android:name="com.google.firebase.messaging.default_notification_icon"
     android:resource="@drawable/ic_status" />

See the image below

Screenshot


Solution

    1. Remove <meta-data> tag from AndroidManifest.xml.
    2. Notification Builder has .setSmallIcon(int icon, int level) which accepts icon as a compulsory argument & level parameter as an optional argument.

    NOTE: .setSmallIcon accepts drawables & DOES NOT accept mipmaps.

    This is how it should be according to Android 8.0 Oreo Notification Channels & behaviour changes:

    public class MainActivity extends AppCompatActivity {
    
        private CharSequence name;
        private int notifyId;
        private int importance;
        private String id;
        private String description;
    
        private Notification mNotification;
        private NotificationManager mNotificationManager;
        private NotificationChannel mChannel;
        private PendingIntent mPendingIntent;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
            binding.btnNotification.setOnClickListener(v -> notification());
        }
    
        private void notification() {
    
            mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notifyId = 1;
            description = "Hello World, welcome to Android Oreo!";
    
            Intent intent = new Intent(this, MainActivity.class);
            mPendingIntent = PendingIntent.getActivity(this, notifyId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
            if (SDK_INT >= O) {
                id = "id";
                name = "a";
                importance = NotificationManager.IMPORTANCE_HIGH;
    
                mChannel = new NotificationChannel(id, name, importance);
                mChannel.setDescription(description);
                mChannel.enableLights(true);
                mChannel.setLightColor(Color.WHITE);
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[] {100, 300, 200, 300});
                mNotificationManager.createNotificationChannel(mChannel);
    
                mNotification = new Notification.Builder(MainActivity.this, id)
                    .setContentTitle(id)
                    .setContentText(description)
                    .setContentIntent(mPendingIntent)
                    .setSmallIcon(R.drawable.ic_launcher_foreground)
                    .build();
            } else {
                mNotification = new Notification.Builder(MainActivity.this)
                    .setContentTitle(id)
                    .setContentText(description)
                    .setContentIntent(mPendingIntent)
                    .setSmallIcon(R.drawable.ic_launcher_foreground)
                    .setLights(Color.WHITE, Color.RED, Color.GREEN)
                    .setVibrate(new long[] {100, 300, 200, 300})
                    .build();
            }
                mNotificationManager.notify(notifyId, mNotification);
        }
    }