我正在开发一个应用程序,以前针对Nougat/API 25,并允许用户更改通知灯颜色。这一切都很好地工作,假设他们的设备支持提供的各种颜色,我的手机 - 三星Galaxy S8运行Oreo - 支持(因此这不是与设备相关的问题!)。
由于Oreo/API 26中通知有所改变,我正在努力找出使此功能再次工作的最佳方法。我已经添加了必要的代码来添加NotificationChannel并再次创建通知,并且已经使其使用用户设置的颜色,但仅适用于他们创建的第一条通知。之后,即使他们更改了通知灯颜色设置,并且我使用新颜色创建NotificationChannel,通知灯仍然使用旧颜色。
例如,如果我在安装应用程序后将灯设置为蓝色并收到通知,它将具有蓝色灯。如果我将灯设置为绿色并收到通知,它仍将是蓝色。
我发现如果我更改CHANNEL_ID的值(即创建一个全新的频道),那么这会产生重置效果,因此它将会使用新的用户指定颜色,但是它只会执行一次。我知道在创建NotificationChannel之后无法更改设置,所以我看到有类似答案建议您可以删除NotificationChannel然后重新创建它,但是这对我不起作用。我可以为每种可用的不同颜色单独设置一个通道,但如果用户想要管理通知设置,则这似乎有点过度,并且令人讨厌。
任何想法/建议吗?
如果相关的话,下面是相关代码:
由于Oreo/API 26中通知有所改变,我正在努力找出使此功能再次工作的最佳方法。我已经添加了必要的代码来添加NotificationChannel并再次创建通知,并且已经使其使用用户设置的颜色,但仅适用于他们创建的第一条通知。之后,即使他们更改了通知灯颜色设置,并且我使用新颜色创建NotificationChannel,通知灯仍然使用旧颜色。
例如,如果我在安装应用程序后将灯设置为蓝色并收到通知,它将具有蓝色灯。如果我将灯设置为绿色并收到通知,它仍将是蓝色。
我发现如果我更改CHANNEL_ID的值(即创建一个全新的频道),那么这会产生重置效果,因此它将会使用新的用户指定颜色,但是它只会执行一次。我知道在创建NotificationChannel之后无法更改设置,所以我看到有类似答案建议您可以删除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中的相关颜色,这与之前的版本没有改变。