gpt4 book ai didi

android - 自 Oreo/API 26 起允许用户设置通知灯颜色

转载 作者:行者123 更新时间:2023-12-01 03:12:24 25 4
gpt4 key购买 nike

我正在开发一个以前针对 Nougat/API 25 并允许用户更改通知灯颜色的应用程序。这一切都很好,假设他们的设备支持提供的各种颜色,我的手机 - 运行 Oreo 的三星 Galaxy S8 - 支持(所以这不是与设备相关的问题!)。

由于 Oreo/API 26 中的通知发生了一些变化,我正在努力寻找让该功能再次发挥作用的最佳方法。我添加了所需的代码来添加 NotificationChannel 并再次创建通知,并让它使用用户设置的颜色,但仅限于他们创建的第一个通知。之后,即使他们更改了通知灯颜色设置,并且我使用新颜色创建了 NotificationChannel,通知灯仍然使用旧颜色。

因此,例如,如果我在安装应用程序后将灯设置为蓝色并收到通知,它将有蓝色灯。如果我将灯设置为绿色并收到通知,它仍然是蓝色的。

我发现如果我更改 CHANNEL_ID 的值(即创建一个全新的 channel ),那么这会产生重置的效果,所以它会选择新的用户指定的颜色,但它只会执行一次.我知道一旦创建 NotificationChannel 就无法更改它的设置,所以我看到了 similar answers建议您可以删除 NotificationChannel 然后重新创建它,但这似乎对我不起作用。我可以为每种可用的不同颜色设置一个单独的 channel ,但是如果用户想自己管理通知设置,这对用户来说似乎有点矫枉过正和烦人。

有什么想法/建议吗?

如果相关,相关代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

// Create the NotificationChannel
CharSequence channelName = context.getString(R.string.channel_name);
String channelDescription = context.getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, channelName, importance);
channel.setDescription(channelDescription);
channel.enableLights(true);
channel.setLightColor(Helpers.getNotificationLightColor(context));
channel.enableVibration(true);

// register the channel with the system
mNotificationManager.createNotificationChannel(channel);
}

....

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_stat_name)
.setLargeIcon(bitmap)
.setContentTitle(name)
.setContentText(messageText)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setAutoCancel(true)
.setDefaults(NotificationCompat.DEFAULT_VIBRATE | NotificationCompat.DEFAULT_SOUND)
.setLights(Helpers.getNotificationLightColor(context),500,2000)
.setColor(context.getResources().getColor(R.color.color_red))
.extend(wearableExtender);

Helpers.getNotificationLightColor(context) 检索保存为 SharedPreference 的相关颜色 - 这与以前的版本没有变化。

最佳答案

即使您调用 deleteNotificationChannel,我也没有办法做到这一点。

这非常烦人,因为在您可以在 Oreo 上发布任何通知之前,您必须创建 channel 。创建它后,您将无法更改 setLightColor 设置,但是在用户进入设置页面(并因此声明他们的偏好)之前发布通知的几率相当高。更糟糕的是,即使您卸载应用程序 (或清除它的数据)并拒绝设置颜色完全 在原始 channel 创建期间,如果您对同一应用程序使用相同的 channel 名称,它将被保留,您不能在单独发布通知本身期间设置颜色(在构建器中设置它被忽略。)

这太荒谬了,但这是谷歌所做的;我看到了阻止开发人员逃避用户关闭通知但拒绝更改灯光的原因颜色 (尤其是当您无法从系统设置中的应用程序通知页面执行此操作时)有点过分了。

我在奥利奥上没有解决方法,我已经能够弄清楚....

关于android - 自 Oreo/API 26 起允许用户设置通知灯颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com