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上没有解决这个问题