Я работаю над приложением, которое ранее предназначалось для Nougat / API 25 и позволяло пользователю изменять цвет подсветки уведомлений.Все это работало нормально, если предположить, что их устройство поддерживает различные предлагаемые цвета, что делает мой телефон - Samsung Galaxy S8 под управлением Oreo (так что это не проблема, связанная с устройством!).
Поскольку уведомления имеютНесколько изменившись в 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 - он не изменился по сравнению с предыдущей версией.