Set Drawable or Bitmap as icon In Notification in Android

If you read the developer documents specific to Notification.Builder you will see that setSmallIcon(int icon) needs a A resource ID in the application's package of the drawable to use.

Downloading an image, converting to a bitmap and then setting it to the setSmallIcon() is still going to give you an error.

Even if you were to convert the Bitmap to a Drawable like this for instance:

Drawable d = new BitmapDrawable(getResources(), bmpFinal);

it is still going to give you an error because that Drawable does not exist in your application package.

The only possible solution is to use a Drawable resource that exists in your package and set it to the setSmallIcon() method. Typical usage:

builder.setSmallIcon(R.drawable.ic_launcher);

Alternatively, the setLargeIcon (Bitmap icon) requires a Bitmap instance. Without having to make any additional changes in your current code (since you already have a Bitmap), you can use that as it is, if it fits your requirement.

If not, you pretty much have to use a Drawable resource that is already present in one of the drawable folders.


you can try using this method

 builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));

http://javatechig.com/android/android-notification-example-using-notificationcompat


Better option get application icon

 Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
 Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();



.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)

There is some points about this question, mainly related with API 23+, if you are only interested in setSmallIcon, go to the 2nd and 3rd topics.

1st :

You can set the LargeIcon from a Drawable (instead of Resource id), like the following

Drawable drawable= ContextCompat.getDrawable(this,R.drawable.your_drawable);

            Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();

            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(context)
                            .setLargeIcon(bitmap)
                            .setContentTitle("hahah")
                            .setContentText("Tap to stop")
                            .setOngoing(true);

2nd :

If you need to set a small icon in API below 23, you will need to set a resource id like R.drawable.your_resource. The NotificationCompat.Builder does not allow you to use Drawables or Bitmaps in setSmallIcon().

3rd :

fortunately , the support has been expanded to Icon type on setSmallIcon() in version 23+, using the Notification.Builder, like following :

 Drawable drawable = ContextCompat.getDrawable(this,R.drawable.your_drawable);

            Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();

            Notification.Builder mBuilder =
                    new Notification.Builder(context)
                            .setSmallIcon(Icon.createWithBitmap(bitmap))
                            .setLargeIcon(bitmap)
                            .setContentTitle("hahah")
                            .setContentText("Tap to stop")
                            .setOngoing(true);