我从服务器下载图像作为位图并将其转换为drawable现在我想将此drawable用作通知图标。但我无法做到这一点。这是我的代码:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(bitmap)
.setWhen(when)
.build();
但是icon是一个Resources int值,所以当我使用它时会出错。任何帮助
编辑:
现在我更新我的代码,现在我这样做:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(intent)
.setSmallIcon(icon)
.setLargeIcon(bitmap)
.setWhen(when)
.build();
但它左侧有大图标,右侧有小图标。我不希望这样,为此我删除setSmallIcon行并运行我的代码,但它没有显示通知
答案 0 :(得分:23)
如果您阅读特定于Notification.Builder
的开发人员文档,您会看到setSmallIcon(int icon)
需要在应用程序的drawable包中使用 A资源ID 。
下载图片,转换为位图,然后将其设置为setSmallIcon()
仍然会给您一个错误。
即使您要将Bitmap
转换为Drawable
,例如:
Drawable d = new BitmapDrawable(getResources(), bmpFinal);
它仍然会给您一个错误,因为您的应用包中Drawable
不存在。
唯一可行的解决方案是使用Drawable
中存在的package
资源,并将其设置为setSmallIcon()
方法。典型用法:
builder.setSmallIcon(R.drawable.ic_launcher);
或者,setLargeIcon (Bitmap icon)
需要一个Bitmap实例。无需在当前代码中进行任何其他更改(因为您已经拥有Bitmap
),如果符合您的要求,您可以按原样使用它。
如果没有,您几乎必须使用其中一个Drawable
文件夹中已存在的drawable
资源。
答案 1 :(得分:16)
您可以尝试使用此方法
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));
http://javatechig.com/android/android-notification-example-using-notificationcompat
答案 2 :(得分:11)
关于这个问题有一些观点,主要与API 23+有关,如果你只对setSmallIcon感兴趣,请转到第2和第3个主题。
第一名:
您可以从Drawable(而不是资源ID)设置LargeIcon,如下所示
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);
第二名:
如果您需要在API中设置一个小于23的小图标,则需要设置资源ID R.drawable.your_resource
。
NotificationCompat.Builder
不允许您在setSmallIcon()
中使用Drawables或Bitmaps。
第3名:
幸运的是,使用Notification.Builder,版本23+中的支持已扩展为Icon
setSmallIcon()
,如下所示:
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);
答案 3 :(得分:3)
更好的选择获取应用程序图标
Drawable drawable=getApplicationInfo().loadIcon(getPackageManager());
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
.setSmallIcon(getApplicationInfo().icon)
.setLargeIcon(bitmap)