NotificationCompat.Builder setLargeIcon() 不起作用?

问题描述 投票:0回答:4

当我将代码

mNotificationBuilder.setLargeIcon(BitmapFactory.decodeResource(
getResources(), R.drawable.ic_large_icon));
添加到我的通知时,它会停止工作,没有错误或警告。这只发生在 Lollipop 之前,在 Lollipop 及之后版本效果很好。对于“有效”,我的意思是通知显示。

我的示例代码:

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()”之后的代码已运行。

android android-support-library android-notifications
4个回答
32
投票

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

就我而言,这段代码正在运行:

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

4
投票

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

}


4
投票

您也可以使用:

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

0
投票

MonnkiFjjdkhshoop*[

巴姆克克克

自由开火🔥 强文字 蒂克*

  • 强调文字

]1* 4663周五

© www.soinside.com 2019 - 2024. All rights reserved.