我正在开发一个以前针对Nougat / API 25并允许用户更改通知灯颜色的应用程序。假设他们的设备支持所提供的各种颜色,那么这一切都很好,我的手机(运行Oreo的三星Galaxy S8)可以做到(因此,这与设备无关!)。
由于Oreo / API 26中的通知已进行了一些更改,因此我正在努力寻找使此功能再次正常工作的最佳方法。我添加了所需的代码以添加NotificationChannel并再次创建通知,并使其使用用户设置的颜色,但仅用于他们创建的第一个通知。之后,即使他们更改了通知灯颜色设置,并且我使用新颜色创建了NotificationChannel,通知灯仍然使用旧颜色。
例如,如果我在安装该应用程序后将灯设置为蓝色,并收到通知,则该灯将为蓝色。如果我将灯设置为绿色并收到通知,它仍将是蓝色。
我发现,如果我更改CHANNEL_ID的值(即创建一个全新的频道),则具有重置功能的效果,因此它将使用新的用户指定的颜色,但同样会做一次。我知道一旦创建了NotificationChannel,便无法更改其设置,因此我看到similar answers建议您可以删除NotificationChannel然后重新创建它,但这对我来说似乎不起作用。我可以为每种可用的颜色提供一个单独的通道,但是如果用户想自己管理通知设置,对于用户来说这似乎有点过头和烦人。
有什么想法/建议吗?
如果相关,则相关代码如下:
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的相关颜色-与以前的版本相同。
答案 0 :(得分:2)
即使您调用deleteNotificationChannel,我也找不到做到这一点的方法。
这非常烦人,因为您必须先创建频道,然后才能在Oreo上发布任何通知。创建它之后,您将无法更改setLightColor设置,但是在用户进入设置页面(从而声明其偏好)之前发布通知的几率很高。更糟糕的是,即使您卸载了该应用程序(或清除了它的数据)并拒绝在原始频道创建过程中完全设置颜色 ,如果您使用相同的颜色,该设置也会保留相同应用程序的频道名称,和,您不能在单独发布通知本身的过程中设置颜色(忽略在构建器中进行设置)。
这太荒谬了,但这是Google所做的;我看到了防止开发人员逃避用户关闭通知但拒绝更改灯光颜色的原因(尤其是当您无法通过系统设置中的应用程序的通知页面进行操作时) )的距离太远了。
我无法在Oreo上解决该问题,...
答案 1 :(得分:0)
在不删除频道的情况下,无法通过编程方式更改频道颜色通知。完整答案在这里https://stackoverflow.com/a/53288303/4649644