Android推送通知:通知中未显示图标,而是显示白色方块

新手上路,请多包涵

我的应用程序生成通知,但我为该通知设置的图标没有显示。相反,我得到一个白色方块。

我尝试调整图标的 png 大小(尺寸 720x720、66x66、44x44、22x22)。奇怪的是,当使用较小的尺寸时,白色方块会更小。

我已经用谷歌搜索了这个问题,以及生成通知的正确方法,从我读过的内容来看,我的代码应该是正确的。可悲的是,事情并非如此。

我的手机是装有 Android 5.1.1 的 Nexus 5。这个问题也出现在模拟器上,一个带有 Android 5.0.1 的三星 Galaxy s4 和一个带有 Android 5.0.1 的摩托罗拉 Moto G(我都借了,现在没有)

通知代码如下,以及两个屏幕截图。如果您需要更多信息,请随时询问。

谢谢你们。

 @SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
    resultIntent.putExtras(bundle);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
    Notification notification;
    Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
    notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.lg_logo)
                .setContentTitle(title)
                .setStyle(new Notification.BigTextStyle().bigText(msg))
                .setAutoCancel(true)
                .setContentText(msg)
                .setContentIntent(contentIntent)
                .setSound(sound)
                .build();
    notificationManager.notify(0, notification);
}

不打开通知打开的通知

原文由 Blueriver 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

原因:对于 5.0 Lollipop,“通知图标必须全白”。

如果我们通过将 target SDK 设置为 20 来解决白色图标问题,我们的应用将不会以 Android Lollipop 为目标,这意味着我们无法使用 Lollipop 特定的功能。

目标 SDK 21 的解决方案

如果要支持 Lollipop Material Icons,请为 Lollipop 及以上版本制作透明图标。请参考以下内容: https ://design.google.com/icons/

请查看 http://developer.android.com/design/style/iconography.html ,我们将看到白色样式是通知在 Android Lollipop 中的显示方式。

在 Lollipop 中,Google 还建议我们使用一种将显示在白色通知图标后面的颜色。参考链接: https ://developer.android.com/about/versions/android-5.0-changes.html

无论我们想在哪里添加颜色 https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)

低于和高于 Lollipop OS 版本的 Notification Builder 的实现将是:

 Notification notification = new NotificationCompat.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    notification.setSmallIcon(R.drawable.icon_transperent);
    notification.setColor(getResources().getColor(R.color.notification_color));
} else {
    notification.setSmallIcon(R.drawable.icon);
}

注意: setColor 仅在 Lollipop 中可用,它只影响图标的背景。

彻底解决你的问题!!

原文由 Garima Mathur 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用任何网站删除图标的背景,建议一个是 https://www.remove.bg/ 然后只需在下载后使用该图像即可解决您的问题。

原文由 M Nasir Baloch 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏