Search code examples
androidparse-platformnotificationspush-notification

Android Notification is not showing Colour Icon in Marshmallow


I am Making application is which i am getting data fromParse and transfering that data to Notification to generate and show it to user.

But for Some Reason I am unable to show correct Coloured Icon in Marshmallow

In every other Android Version its working totally fine, but in Marshmallow its creepy white icon not actual which i select.

Here is my Code of Notification.

 Intent cIntent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                cIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentText(data)
                .setContentTitle("Notification from Parse")
                .setContentIntent(pendingIntent);

        Notification notification = builder.build();
        NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        nm.notify(100, notification);

Please Help me with this, or tell me any other way how to get rid of this problem.


Solution

  • First : Its not from Marshmallow, Notification icon started turning out WHITE from Lollipop itself.

    Checkout http://developer.android.com/design/style/iconography.html you will see that the white style is how notifications are meant to be displayed in Android Lollipop.

    In Android Lollipop, Google also suggests you to use a color that will be displayed behind the (white) notification icon - https://developer.android.com/about/versions/lollipop/android-5.0-changes

    Second : Solution to this is setting LargeIcon to Notification Builder

    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
    
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setLargeIcon(largeIcon)
                    .setContentText(data)
                    .setContentTitle("Notification from Parse")
                    .setContentIntent(pendingIntent);
    

    then, your Notification will look something like this :

    setLargeIcon

    You can also set the color to background of Notification Icon by using .setColor().