Невозможно программно обновить звук для канала уведомлений на Android Oreo - PullRequest
1 голос
/ 17 апреля 2019

У меня проблемы с обновлением звука уведомлений для канала в Android Oreo.Я знаю, что звук может быть установлен пользователем вручную, открыв экран уведомлений приложения, но я хочу сделать это программно, используя RingtonePreference в задании по умолчанию в настройках (пользователь может получать звук уведомления из действия в моем приложении).

Проблема заключается в том, что первое уведомление, запущенное в приложение, получает значение звука по умолчанию из PreferenceManager.getDefaultSharedPreferences () и после изменения вручную на другой носитель (с помощью экрана RingtonePreference) оно все равно будет воспроизводить звук, который былизначально созданный на этом канале, а не новый, выбранный пользователем.

Я не понимаю, почему звук NotificationChannel не обновляется в соответствии с новым значением звука, так как я делаю что-то подобное NotificationChannel mChannel = new NotificationChannel(id, title, importance); mChannel.setSound(ringtoneUri, audioAttributes);

Ниже приведен полный код:

 public static void sendNotification(Context context, NotificationType notificationType) {
        String id = "channel_1"; // default_channel_id
        String title = "Doppler Channel"; // Default Channel
        Intent intent;
        PendingIntent pendingIntent;
        NotificationCompat.Builder builder;

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        Uri ringtoneUri = Uri.parse(preferences.getString("notifications_new_message_ringtone", "DEFAULT_RINGTONE_URI"));
        boolean isNotificationSticky = !Boolean.parseBoolean(preferences.getAll().get("stickyNotification").toString());

        AudioAttributes audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                .build();

        NotificationManager notifManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

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

            int importance = NotificationManager.IMPORTANCE_DEFAULT;

            NotificationChannel mChannel = notifManager.getNotificationChannel(id);

                mChannel = new NotificationChannel(id, title, importance);
                mChannel.setSound(ringtoneUri, audioAttributes);
                notifManager.createNotificationChannel(mChannel);

            builder = new NotificationCompat.Builder(context, id);
            intent = new Intent(context, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            builder .setSmallIcon(notificationType.getNotificationIcon())
                    .setContentTitle(notificationType.getNotificationContent())
                    .setSubText(notificationType.getNotificationTitle())
                    .setOnlyAlertOnce(true)
                    .setOngoing(isNotificationSticky)
                    .setAutoCancel(true)
                    .setSound(ringtoneUri)
                    .setColor(notificationType.getNotificationColor())
                    .setContentIntent(pendingIntent);
        }
Notification notification = builder.build();
notifManager.notify(1, notification);

}

Единственным способом, которым я смог обновить звук, было присвоение идентификатору канала случайного значения UUID.randomUUID().toString() при каждом срабатывании уведомления, но этовызывает много гарbage, когда пользователь вручную проверяет экран уведомлений приложения.

Намек на это будет очень полезен.

Большое спасибо!

1 Ответ

1 голос
/ 17 апреля 2019

Я не понимаю, почему звук NotificationChannel не обновляется в соответствии с новым значением звука

В большинстве случаев NotificationChannel - это API с однократной записью.Вы не можете изменить большинство его характеристик после создания.

, но я хочу сделать это программно с помощью RingtonePreference в задании по умолчанию для настроек

Я рекомендую удалить эту функциюиз вашего приложения или только предлагая его на устройствах Android 7.1 и более старых.

...