Set Drawable or Bitmap as icon In Notification in Android

User42590 picture User42590 · Apr 17, 2013 · Viewed 57k times · Source

I download a image from server as bitmap and convert it to drawable now i want to use this drawable as notification icon. But i am unable to do that. here is my code:

    Notification notification = new NotificationCompat.Builder(context)

    .setContentTitle(title)

    .setContentText(message)

    .setContentIntent(intent)

    .setSmallIcon(bitmap)

    .setWhen(when)

    .build(); 

but icon is a Resources int value so when i used it it gives error. Any help

Edit:

Now i update my code and now i am doing like that :

          Notification notification = new NotificationCompat.Builder(context)

        .setContentTitle(title)

        .setContentText(message)

        .setContentIntent(intent)

        .setSmallIcon(icon)

        .setLargeIcon(bitmap)

        .setWhen(when)

        .build();

but it gives large icon on left side and small icon on right side. I don't want this so for this i remove setSmallIcon line and run my code but it not showing me the notifications

Answer

Siddharth Lele picture Siddharth Lele · Apr 17, 2013

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.