我的应用程序会生成通知,但我为该通知设置的图标不会显示.相反,我得到了一个白色的正方形.

我try 过调整图标的png大小(尺寸为720x720、66x66、44x44、22x22).奇怪的是,当使用更小的尺寸时,白色正方形更小.

我已经在谷歌上搜索了这个问题,以及生成通知的正确方法,从我读到的代码应该是正确的.可悲的是,事情并不像他们应该的那样.

我的手机是带有安卓5.1.1的Nexus 5.这个问题也出现在模拟器上,一款搭载安卓5.0.1的三星Galaxy s4和一款搭载安卓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);
}

without opening the notification notifications opened

推荐答案

Cause: For 5.0 Lollipop "Notification icons must be entirely white".

如果我们通过将target SDK设置为20来解决白色图标问题,我们的应用程序

Solution for target Sdk 21

如果你想支持棒棒糖material 图标,那么为棒棒糖和以上版本制作透明图标.请参考以下内容:

请看http://developer.android.com/design/style/iconography.html,我们将看到白色样式是如何在Android棒棒糖中显示通知的.

在棒棒糖中,谷歌还建议我们使用白色通知图标后面显示的 colored颜色 .参考链接:https://developer.android.com/about/versions/android-5.0-changes.html

我们想要添加 colored颜色 的任何地方 https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)

Implementation of Notification Builder for below and above Lollipop OS version would be:

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

Note: setColor is only available in Lollipop and it only affects the background of the icon.

It will solve your problem completely!!

Android相关问答推荐

Jetpack编写:通过viewModels()vs viewModel View ModernName()'

Android深度链接配置中的URL片段匹配'

懒惰的垂直网格中盒子的重量-Jetpack组合

Jetpack编写使用自定义主题覆盖库中主题部分

MAP函数返回单位列表而不是字符列表

Modifer.Align()不适用于行/列/框中的文本.未解决的作用域实例错误

学习Kotlin问题.无法理解Modifier参数

仅当先前输入为 yes 时,Android 才会要求下一个输入

在 kotlin 协同 routine 中,如何将数据范围限定为请求路径(以 MDC 为例)?

Android Jetpack Compose全宽度抽屉优化

如何在 Android Studio 中为带有 Room 的 SQLite 编写需要参数的查询?

Jetpack Compose 如何使一个项目相对于另一个项目垂直居中

如何在 Delphi 和 Android 上避免 Indy Socket Error #13 Access denied 异常?

在 Kotlin 中设置 startActivity() 时类型不匹配

JCenter 是否永久关闭(10 月 31 日)?

如何使用底页,启用和展开父交互

JetPack Compose - 卡片行中的权重()不起作用

Kotlin Compose 全局页脚视图

可扩展性 Qt 5.15 Android

更新应用程序是否会取消对应用程序特定文件的权限?