安卓5.1推送通知图标空白

15
当使用Parse进行推送通知时,我们的应用程序总是显示应用程序的启动器图标。在最新的Android 5.1版本中,图标似乎为空白(一个白色的方块)。我尝试在元数据中设置图标:
<meta-data android:name="com.parse.push.notification_icon" android:resource="@drawable/noti_icon"/>

根据这里的问题

但似乎什么都不起作用。 有什么想法吗?


3
在Lollipop系统中,图标上的实心像素会被涂成白色。使用带有“空洞”的图标来表达对比。 - Eugen Pechanec
如果你的图标是白色的,它会被擦除。 - thepoosh
请点击以下链接:https://dev59.com/wl4c5IYBdhLWcg3wCGf2 - Nilabja
4个回答

12

在Android Lollipop 5.0或更高版本下,您必须使用透明和白色图标。 您可以扩展ParsePushBroadcastReceiver类并覆盖两个方法以使通知图标与这些Android API兼容。

    @Override
protected int getSmallIconId(Context context, Intent intent) {
    return R.drawable.your_notifiation_icon;
}

@Override
protected Bitmap getLargeIcon(Context context, Intent intent) {
    return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon);
}

记得定制您的代码以支持Lollipop和之前的API。

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
        return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon_lollipop);
    }
    else{
        return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_notifiation_icon);
    }

我已经实现了getSmallIconId方法,它按照你的解释工作正常。 - Shahal Hazan
1
非常感谢您的回答@Pelanes。所以要扩展它,基本上您必须创建一个类,例如MyPushBroadcastReceiver,扩展ParsePushBroadcastReceiver并覆盖getSmallIconId(...)和getLargeIcon(...)。不要忘记在清单中指定接收器。在棒棒糖上,将使用小图标和大图标。在模拟器2.3.7(我测试过)上只有小图标。 - Vito Valov

2

没错,但这只适用于通知栏图标 - 通知上的图标仍然是彩色的。 - Fenix Voltres
当将SDK定位到20以上时,它不仅会在状态栏上显示白色图标,还会在通知中心中显示。 - Shahal Hazan

0

试试这段代码。

Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.ic_launcher)
                .setLargeIcon(largeIcon)
                .setContentText(data)
                .setContentTitle("Notification from Parse")
                .setContentIntent(pendingIntent);

0

虽然@Pelanes给出了正确的答案(应该被接受),但这是我所做的。请注意,Parse docs for getSmallIconId中指出:

检索用于通知的小图标。默认实现使用在AndroidManifest.xml中由com.parse.push.notification_icon元数据指定的图标,并回退到此包的启动器图标。为符合Android样式指南,强烈建议开发人员指定显式推送图标。

因此,不完全需要覆盖getSmallIconId()和getLargeIcon()方法。

我解决问题的方法是,我只是复制了我的图标,在图标上打了透明的“孔”,并将我的清单中的com.parse.push.notification_icon元数据设置为指向这个新图标。

对于Android 5.0,您的通知图标必须是白色和透明的,正如其他人所提到的那样。因此,创建单独的图标是必要的。清单中的一行和一个新的可绘制文件就足够了。


你确定我们不需要定义不同操作系统版本如何处理通知图标吗?我按照你的建议进行了操作,看起来在Android 4.4和5.1中都使用了com.parse.push.notification_icon设置的通知图标。 - Alex
我测试了5.1和4.4.2。5.1使用新图标,4.4.2使用普通应用程序图标...不确定为什么我会出现这种情况,而你没有。也许为了保险起见,你需要区分一下。我会编辑我的答案。 - h_k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接