带有远程视图的 Android 10 上的黑暗通知

Posted

技术标签:

【中文标题】带有远程视图的 Android 10 上的黑暗通知【英文标题】:Dark notification on Android 10 with Remote View 【发布时间】:2020-06-15 22:55:15 【问题描述】:

当我在 android 10 中将显示模式更改为深色时,根据此处显示的图像获取深色(黑色)通知。我尝试更改文本颜色,但它没有重新调整。我正在使用远程视图来创建自定义通知。如何为深色模式和浅色模式更改不同的远程内容视图文本颜色?这是我的代码:

        val contentViewBig = RemoteViews(context.applicationContext.packageName, R.layout.design_custom_notification)
        contentViewBig.setTextViewText(R.id.tvNotificationTitle, notificationTitle)
        contentViewBig.setTextViewText(R.id.tvNotificationBody, notificationBody)

        val nId = Random().nextInt()

        val pendingIntent = PendingIntent.getActivity(context,
                nId /* Request code */, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        val channelId = context.getString(R.string.default_notification_channel_id)
        val defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

        val notificationBuilder = NotificationCompat.Builder(context, channelId)
                .setSmallIcon(R.drawable.ic_notification)
                .setAutoCancel(true)
                .setCustomContentView(contentViewBig)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setLights(Color.WHITE, 2000, 3000)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent)


        // Since android Oreo notification channel is needed.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 

            val channel = NotificationChannel(channelId,
                    context.resources.getString(R.string.app_name), NotificationManager.IMPORTANCE_HIGH)
            channel.description = context.resources.getString(R.string.app_name)
            channel.setShowBadge(true)
            channel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
            notificationManager?.createNotificationChannel(channel)
        

        if (notificationManager != null) 
            notificationManager.notify(nId, notificationBuilder.build())
            wakeLockScreen(context)
        

【问题讨论】:

【参考方案1】:

我通过创建 values-night 文件夹解决了问题。我在 values-night 文件夹中添加了 colors.xml,并覆盖了我在普通 values - colors.xml 中使用的颜色,并在远程视图设计文件中应用了文本颜色。

参考。 https://medium.cobeisfresh.com/how-to-implement-day-night-mode-in-your-android-app-2f21907f9b0a

更新:

防止最新的Xiaomi devices 在您处于黑暗模式时强制黑暗应用程序设计的另一件事。

theme.xml 中的以下参数应用于您的主题风格。

<item name="android:forceDarkAllowed" tools:targetApi="q">false</item>

【讨论】:

是的,我们可以将 txt 颜色从完整的背景颜色更改为不会得到反映。我仍然得到白色背景。

以上是关于带有远程视图的 Android 10 上的黑暗通知的主要内容,如果未能解决你的问题,请参考以下文章

Android 小部件 - 使用带有远程视图的 setOnClickPendingIntent 未收到 Intent

如何处理视图控制器上的远程通知(而不是 AppDelegate)[关闭]

带有波纹和双击的 Android 锁屏通知自定义视图

iOS 10 带图片的远程通知

android 适配器数据更改为通知主机活动

使用 php 向 ios 设备发送带有 fcm 令牌的远程通知