Android 通知图标在某些设备上为空白
Posted
技术标签:
【中文标题】Android 通知图标在某些设备上为空白【英文标题】:Android notification icon is blank on some devices 【发布时间】:2021-02-21 08:39:22 【问题描述】:我在某些 android 设备(Pixel 2 XL 和 Pixel 5 - 均为 Android 11)上收到空白/灰色通知图标,但在我测试过的其他 Android 设备(华为 P20 和 P30 - 均为 Android)上显示正常10)。有没有其他人遇到过这种异常情况?
这是我尝试过的:
我已使用Android Asset Studio 确保所有图标大小都遵循defined bitmap densities。
我还将.setColorized()
方法添加到
Notification.Builder 对象,因为它以前在
代码,但这根本没有区别。我已经包括了我的
通知代码如下:
private fun sendNotification(title: String?, message: String?, intent: Intent)
val pendingIntent = PendingIntent.getActivity(
this,
0 /* Request code */,
intent,
PendingIntent.FLAG_ONE_SHOT
)
// With the default notification channel id the heads up notification wasn't displayed
val channelId = getString(R.string.heads_up_notification_channel_id)
val notificationBuilder =
NotificationCompat.Builder(this, channelId).setSmallIcon(R.mipmap.ic_stat_ic_notification)
.setAutoCancel(true)
.setColorized(true)
.setColor(ContextCompat.getColor(this, R.color.color_orange))
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(pendingIntent)
if (title != null)
notificationBuilder.setContentTitle(title)
if (message != null)
notificationBuilder.setContentText(message).setStyle(
NotificationCompat.BigTextStyle()
.bigText(message)
)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
val channel = NotificationChannel(
channelId,
"Test",
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel)
notificationManager.notify(Random.nextInt()/* ID of notification */, notificationBuilder.build())
【问题讨论】:
R.mipmap.ic_stat_ic_notification 是图像还是矢量?您能否尝试仅使用 png 并删除所有矢量参考,看看是否能解决问题 我也面临同样的问题。在我的情况下,我使用“cordova-plugin-fcm-with-dependecy-updated”插件,通知图标映射到“@mipmap/ic_launcher”。你找到解决办法了吗? 【参考方案1】:我之前也遇到过类似的问题。就我而言,问题是我尝试使用的图标。我为通知的图标使用了非 PNG 文件。当我将其切换为 PNG 格式时,该通知对我测试的所有设备都正常工作。
如果你没有使用Png格式的图标,你可以试试这种方式。
另外,问题可能出在android reference website 中的图标大小,据说
设置小图标以在通知布局中使用。不同类别的设备可能返回不同的尺寸。
另请参阅 this guiadeline 了解关键线形状
【讨论】:
【参考方案2】:我在 android 9、10、11 上进行了测试。它工作正常。 在android studio中,选择图片资产->点击图标类型->点击类似notification icon creation in android studio的通知图标或创建矢量资产。两者都有效。
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_scrolling)
sendNotification("Hello","thinking of refering friend?",intent);
private fun sendNotification(title: String?, message: String?, intent: Intent)
val pendingIntent = PendingIntent.getActivity(
this,
0 /* Request code */,
intent,
PendingIntent.FLAG_ONE_SHOT
)
// With the default notification channel id the heads up notification wasn't displayed
val channelId = getString(R.string.heads_up_notification_channel_id)
val notificationBuilder =
NotificationCompat.Builder(this, channelId).setSmallIcon(R.drawable.abcd)
.setAutoCancel(true)
.setColorized(true)
.setColor(ContextCompat.getColor(this, R.color.color_orange))
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_MAX)
.setContentIntent(pendingIntent)
if (title != null)
notificationBuilder.setContentTitle(title)
if (message != null)
notificationBuilder.setContentText(message).setStyle(
NotificationCompat.BigTextStyle()
.bigText(message)
)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
val channel = NotificationChannel(
channelId,
"Test",
NotificationManager.IMPORTANCE_HIGH
)
notificationManager.createNotificationChannel(channel)
notificationManager.notify(Random.nextInt()/* ID of notification */, notificationBuilder.build())
告诉我。
【讨论】:
以上是关于Android 通知图标在某些设备上为空白的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript (PWA) 在 Android 设备上为 FCM 创建 channel_ID?
通知图标,在某些设备上是全白的,在其他设备上是彩色的。为啥?
使用 MediaRecorder.AudioSource.VOICE_COMMUNICATION 录制的音频在某些搭载 Android 10 的设备上为空