今天我的通知图标出现了一个奇怪的问题。
我做了什么坏事吗?
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.icon_notification)
.setContentTitle(this.getString(R.string.notification_title))
.setContentText(this.getString(R.string.notification_text))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
这是我的图标图片(刚刚从这里下载https://material.io/icons/#ic_photo): http://image.noelshack.com/fichiers/2016/44/1478185219-icon-notification.png
我错过了什么吗?
为了记录,我使用的是SDK 24,现在只创建了hdpi
资源文件夹。
修改#1:我已添加了ldpi
,mdpi
和xhdpi
图标,没有任何变化......
编辑#2:为了更加精确,我尝试从服务创建此通知... FCM消息传递服务...
答案 0 :(得分:3)
如果您的compileSDKversion大于20,则通知图标应为白色透明背景图像。否则,图像将呈现为白色图像。
请仔细阅读以下链接,了解创建图标的指南
https://www.google.com/design/spec/patterns/notifications.html
以及通知图标生成器。
答案 1 :(得分:2)
您必须使用没有背景的通知图标。 Android会添加圈子背景。
您可以使用
设置背景颜色 .setColor(context.getResources().getColor(R.color.colorPrimary))
匹配您的应用程序缩进。
里面的图标将保持白色,圆圈将获得您定义的颜色。
答案 2 :(得分:2)
这似乎是编译期间缓存的问题...我使用的第一个图像很糟糕(完全着色),所以我认为我的编译器在文件名上创建了一些缓存。
我在Windows上工作并执行此操作:从手机中卸载应用程序,从Android sudio =>中取消所有缓存无效在重新编译时,图标没问题。
答案 3 :(得分:0)
注意: - 如果设备的Android版本高于20,则必须生成具有透明背景的图标,并在生成通知时使用此代码段
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.LOLLIPOP){
currentapiVersion=R.mipmap.ic_notification_lolipop;
} else{
currentapiVersion=R.mipmap.ic_launcher;
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(currentapiVersion)......
答案 4 :(得分:0)
你需要生成单独的图标,这将是你的启动器图标的白色版本。您可以使用以下链接生成此类图标。
注意:您需要上传具有透明背景的启动器图标的PNG图像。
对于设置图标,您可以使用这样的方法
private int getSmallIconForNotification(){
return (Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP)? R.mipmap.ic_stat_launcher : R.mipmap.ic_launcher;
}
代码用法:
private NotificationCompat.Builder createNotificationBuilder(){
return new NotificationCompat.Builder(this)
.setSmallIcon(getSmallIconForNotification())
.setContentTitle("New Message")
.setContentText("Hi there.....")
.setAutoCancel(true);
}
答案 5 :(得分:0)
我在应用关闭时遇到了同样的问题,this helped me
不幸的是,这是 SDK 9.0.0-9.6.1 中 Firebase 通知的限制。当应用处于后台时,启动器图标会从清单(带有必要的 Android 着色)用于从控制台发送的消息。
但是,使用 SDK 9.8.0,您可以覆盖默认值!在您的 AndroidManifest.xml 中,您可以设置以下字段来自定义图标和颜色:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon" />
<meta-data android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/google_blue" />