NotificationCompat.Builder setLargeIcon()不起作用?

时间:2016-03-04 15:17:48

标签: android android-support-library android-notifications

当我将代码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());

我试图以不同的方式加载Bitmap但它仍然失败... 图标是128x128,所以它的大小应该不是问题吗?

我也尝试了不同的ID,但没有一个可以解决问题。

如果有任何建议,我会非常感激,请朝正确的方向努力,对我来说意味着世界。

编辑1#

此通知是从服务发出的。该服务还活着,Log打印告诉我" startForeground()"之后的代码。跑了。

3 个答案:

答案 0 :(得分:20)

您必须首先设置大图标,然后设置小图标。

在我的情况下,此代码正在运行:

    mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_message));
    mBuilder.setSmallIcon(R.mipmap.ic_message);
    mBuilder.setContentTitle("Inbox");
    mBuilder.setContentText("New message received");

答案 1 :(得分:3)

在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)
                ;

}

答案 2 :(得分:0)

您也可以使用:

.setLargeIcon(Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon128), 128, 128, false))