Set Drawable or Bitmap as icon In Notification in Android

后端 未结 4 1794
春和景丽
春和景丽 2020-12-06 04:58

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:

<
相关标签:
4条回答
  • 2020-12-06 05:33

    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);
    
    0 讨论(0)
  • 2020-12-06 05:34

    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.

    0 讨论(0)
  • 2020-12-06 05:43

    you can try using this method

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

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

    0 讨论(0)
  • 2020-12-06 05:44

    Better option get application icon

     Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
     Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
    
    
    
    .setSmallIcon(getApplicationInfo().icon)
    .setLargeIcon(bitmap)
    
    0 讨论(0)
提交回复
热议问题