Позволяет пользователю устанавливать цвет подсветки уведомлений начиная с Oreo / API 26 - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над приложением, которое ранее предназначалось для 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 - он не изменился по сравнению с предыдущей версией.

1 Ответ

0 голосов
/ 01 августа 2018

Я не нашел способа сделать это, даже если вы вызываете deleteNotificationChannel.

Это очень раздражает, поскольку прежде чем вы сможете публиковать какие-либо уведомления на Oreo, вы должны создать канал.После того, как вы его создадите, вы не сможете изменить настройку setLightColor, однако шансы на то, что вы отправите уведомление, прежде чем пользователь перейдет на страницу настроек (и таким образом объявит свои предпочтения), довольно высоки.Хуже того, , даже если вы удалите приложение (или очистите его данные) и не захотите устанавливать цвет на всех во время создания исходного канала, оно будет сохранено, если вы используете то же имя каналадля того же приложения и вы не можете установить цвет во время отдельной публикации самого уведомления (установка его в компоновщике игнорируется.)

Это нелепо, но это то, что Googleсделано;Я вижу причину, по которой разработчик не должен уклоняться от желания пользователя отключить уведомления, но отказывается менять светлый цвет (особенно, если вы не можете сделать это на странице уведомлений приложения в настройках системы).слишком далеко заходит.

У меня нет решения для Oreo, которое я смог выяснить ....

...