首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android推送通知:图标未在通知中显示,相反显示白色方框

Android推送通知:图标未在通知中显示,相反显示白色方框
EN

Stack Overflow用户
提问于 2015-06-12 04:42:16
回答 21查看 290.8K关注 0票数 244

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

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

我搜索了这个问题,以及生成通知的正确方法,从我所读到的内容来看,我的代码应该是正确的。可悲的是,事情并不像他们应该做的那样。

我的手机是带有Android5.1.1的Nexus 5。这个问题也出现在仿真器上,三星Galaxy 5.0.1的s4和Android5.0.1的摩托罗拉Moto (都是我借来的,现在还没有)。

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

谢谢你们所有人。

代码语言:javascript
运行
复制
@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);
}

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2015-06-12 04:46:43

原因:对于5.0Lolliop,“通知图标必须是完全白色的”.

如果我们通过将目标SDK设置为20来解决白图标问题,我们的应用程序将不会针对Android,这意味着我们不能使用特定于Lollipop的功能。

目标Sdk 21解决方案

如果你想要支持棒棒糖材料图标,然后为棒棒糖和上面的版本制作透明图标。请参阅以下内容:https://design.google.com/icons/

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

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

下面及以上版本的Notification的实现将是:

代码语言:javascript
运行
复制
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中提供,它只影响图标的背景。

它将彻底解决你的问题!!

票数 209
EN

Stack Overflow用户

发布于 2017-12-30 19:34:59

如果您正在使用Google消息传递,那么这个问题将无法通过简单地更改图标来解决。例如,这将不起作用:

代码语言:javascript
运行
复制
 Notification notification  = new Notification.Builder(this)
                .setContentTitle(title)
                .setContentText(text)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentIntent(pIntent)
                .setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
                .setAutoCancel(true)
                .build();

即使 ic_notification是透明的和白色的。还必须在Manifest元数据中定义它,如下所示:

代码语言:javascript
运行
复制
  <meta-data android:name="com.google.firebase.messaging.default_notification_icon"

            android:resource="@drawable/ic_notification" />

元数据在application标签下,以供参考。

票数 94
EN

Stack Overflow用户

发布于 2019-08-29 17:41:21

(AndroidStudio3.5)如果您使用的是最新版本的Android,您可以生成通知图像。右键单击res文件夹 > New >ImageAsset.然后,您将看到配置图像资产,如下图所示。将图标类型更改为通知图标。你的图像必须是白色和透明的。此配置图像资产将强制执行该规则。

重要:如果您希望将图标用于云/推送通知,则必须在应用程序标记下添加元数据才能使用新创建的通知图标。

代码语言:javascript
运行
复制
  <application>
      ...
      <meta-data android:name="com.google.firebase.messaging.default_notification_icon"
          android:resource="@drawable/ic_notification" />
票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30795431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档