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