Android NotificationCompat.Builder setLargeIcon()不工作?
当我添加代码Android NotificationCompat.Builder setLargeIcon()不工作?,android,android-support-library,android-notifications,Android,Android Support Library,Android Notifications,当我添加代码mNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource)时( getResources(),R.drawable.ic_large_icon))到我的通知,它停止工作,没有错误或警告。这只发生在棒棒糖前,在棒棒糖上和以后,效果都很好。“工作”的意思是通知显示出来了 我的示例代码: NotificationCompat.Builder mBuilder = new NotificationCompat.Builder
mNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource)时(
getResources(),R.drawable.ic_large_icon))代码>到我的通知,它停止工作,没有错误或警告。这只发生在棒棒糖前,在棒棒糖上和以后,效果都很好。“工作”的意思是通知显示出来了
我的示例代码:
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.icon);
mBuilder.setContentTitle("Content Title");
mBuilder.setContentText("Content Text");
mBuilder.setLargeIcon(BitmapFactory.decodeResource( getResources(), R.drawable.ic_large_icon));
startForeground(1, mBuilder.build());
我尝试过以不同的方式加载位图,但一直失败。。。
图标是128x128,所以它的大小应该不是问题
我也尝试了不同的id,但都没有解决问题
我会非常感激任何建议,请告诉我,在正确的方向上的任何推动对我来说都意味着整个世界
编辑1#
此通知由服务发出。服务处于活动状态,日志打印告诉我“startForeground()”之后的代码正在运行。您必须先设置大图标,然后再设置小图标
在我的情况下,此代码正在工作:
mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_message));
mBuilder.setSmallIcon(R.mipmap.ic_message);
mBuilder.setContentTitle("Inbox");
mBuilder.setContentText("New message received");
在Lolipop之前,没有用于通知的大图标。小图标应为64x64,创建时请记住,它将以两种颜色呈现:白色和透明
NotificationCompat.Builder mBuilder;
if (SystemTools.isAndroidApiVersionBeforeLollipop()) {
mBuilder =
new NotificationCompat.Builder(context)
.setContentIntent(pendingIntent)
.setSmallIcon(iconRid)
.setColor(ContextCompat.getColor(context, R.color.transparent))
.setContentTitle(caption)
.setContentText(text)
.setOngoing(true)
.setWhen(0)
.setPriority(NotificationCompat.PRIORITY_LOW)
;
} else {
mBuilder =
new NotificationCompat.Builder(context)
.setContentIntent(pendingIntent)
.setSmallIcon(iconRid)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), bigIconRid))
.setColor(ContextCompat.getColor(context, R.color.transparent))
.setContentTitle(caption)
.setContentText(text)
.setOngoing(true)
.setWhen(0)
.setPriority(NotificationCompat.PRIORITY_LOW)
;
}您也可以使用:
.setLargeIcon(Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon128), 128, 128, false))
“图标是128x128,所以它的大小应该不会有问题?”--您在哪个目录(或多个目录)中有这个图标?Res/drawable,还尝试使用Android Asset Studio(由Roman提供)制作多个分辨率以放入不同的子目录。但这也没用。它放在哪里有可能很重要吗?我们将尝试使用常规NotificationManager类而不是“startForeground()”,但如果这是问题的原因,那将很奇怪。res/drawable/
几乎从来都不是正确的答案。这是res/drawable mdpi/
的同义词,因此您的图像将在更高密度的设备上放大。因此,在真正高密度的设备上,从128x128开始的映像可能会上升到512x512,此时您将突破1MB IPC事务大小限制。您可能想查看从decodesource()
返回的位图
。我会的,谢谢!事情办完后我会再打给你的。可惜我帮不上忙。还有其他想法吗?@vgarzom你找到解决办法了吗?这对我不起作用,但这对我不起作用,而且在生成器模式中,序列一点都不重要!为我工作,minSdkVersion设置为21(棒棒糖)。谢谢不,在Android 10上没有解决这个问题