Отключить звук из NotificationChannel
Сегодня я начал настраивать API 26, что заставило меня использовать каналы уведомлений.
Моя проблема заключается в том, что теперь при каждом новом уведомлении (включая обновления) звучит раздражающий звук.
Как отключить этот звук?
- Android: удалить уведомление из панели уведомлений
- PendingIntent работает правильно для первого уведомления, но неправильно для остальных
- Извлечение текста извещных, contentView или contentIntent
- Отсутствие права на уведомление Push Push
- Уведомление о восстановлении задачи, а не конкретной деятельности?
Я попытался заменить этот звук обычным звуком mp3, чтобы затем передать ему mp3 с тишиной в нем (Иисус Христос, Google!), Но это игнорируется.
Я просто добавляю уведомление, которое имеет очень низкий приоритет, в основном предоставляя пользователю возможность выполнять некоторые действия после того, как он взаимодействует с приложением. Нет никаких оснований быть громким, пользователь будет знать, что он может ссылаться на уведомление, потому что он сделал определенную вещь с приложением, которое, как он знает, приведет к появлению уведомления.
Пользователь действительно начнет раздражаться этим звуком.
- Android: Как создать уведомление «Ongoing»?
- getIntent () Дополнительно всегда NULL
- Лучший способ сериализации NSData в hexadeximal string
- Push-уведомления, когда приложение закрыто
- Обновить текст уведомления, а не целое уведомление
- Уведомления с несколькими линиями в Интернете, такие как приложение Gmail
- Как реализовать устаревшие методы уведомления
- Несколько уведомлений о том же действии
Если вы хотите сохранить важность своего канала и просто удалить звуковое notificationChannel.setSound(null, null);
похоже, выполняет эту работу.
Как заявил Daniel F, обязательно удалите и переустановите приложение, чтобы применить новую конфигурацию.
Решение состоит в том, чтобы использовать NotificationManager.IMPORTANCE_LOW
и создать для него новый канал. Как только канал создается, вы не можете изменить значение (ну, вы можете, но новое значение игнорируется). Информация о канале, как представляется, постоянно сохраняется системой, и любой созданный канал удаляется только при удалении приложения.
В то время как предыдущие версии Android не воспроизводили звук по умолчанию, это изменилось с Android O, но только когда вы нацеливаете API 26, то есть используете каналы уведомлений. Это несогласованность, ну, на самом деле, это ошибка:
Причиной этого является то, что при создании канала с NotificationManager.IMPORTANCE_DEFAULT
(по умолчанию он не заслуживает внимания) Android фактически «несколько» зарегистрирует его как NotificationManager.IMPORTANCE_HIGH
(по умолчанию воспроизводит звук).
Вы можете проверить это, перейдя в параметры уведомлений (долго нажимайте на запись уведомления), где вы увидите, что он имеет тип NotificationManager.IMPORTANCE_HIGH
а затем отключите уведомление и затем снова включите его. В этом процессе он получает «понижен» от NotificationManager.IMPORTANCE_HIGH
до не звучащего, фактически зарегистрированного NotificationManager.IMPORTANCE_DEFAULT
.
Ошибка была отправлена на отслеживание проблем Android, поэтому вы можете захотеть ее загладить (помечен Google как «Не исправить (не подлежит)», потому что … испорченный).
Все, что находится под следующей строкой, устарело , но эта ошибка все еще актуальна. Моя ошибка заключалась в том, что NotificationManager.IMPORTANCE_MIN
является следующей нижней из NotificationManager.IMPORTANCE_DEFAULT
, но NotificationManager.IMPORTANCE_LOW
.
Когда вы затем заходите в настройки уведомлений приложения с помощью кнопки long-press-notification и all-channels и переключаете переключатель для этого канала и включаете снова, тогда он фактически устанавливает себя NotificationManager.IMPORTANCE_DEFAULT
и звук не будет воспроизводиться. Я также заметил, что после сбоя он получил сброс в NotificationManager.IMPORTANCE_HIGH
Поэтому в основном обходным путем является использование NotificationManager.IMPORTANCE_MIN
. Но вам нужно создать новый канал, чтобы этот NotificationManager.IMPORTANCE_MIN
действовал, потому что кажется, что вы не можете изменить важность уже существующего канала после его создания .
Обновление. Оказывается, обходной путь с NotificationManager.IMPORTANCE_MIN
имеет недостаток.
Когда вы используете этот уровень важности, ваше уведомление больше не будет отображаться полностью внутри ящика уведомлений, но вставляет себя в новую группу каналов уведомлений, которая по умолчанию сворачивается (и сама рушится каждый раз при каждом вытягивании ящика). Какой облом!
Обновление 2: Копаем немного глубже, оказывается, что он правильно зарегистрировал его как NotificationManager.IMPORTANCE_DEFAULT
, но каким-то образом он волшебным образом получил обновление до NotificationManager.IMPORTANCE_HIGH
, как если бы пользователь явно менял настройку по умолчанию на высокий. После того, как вы отключили уведомление и снова включили его, он также будет сброшен до значения по умолчанию.
NotificationManager.IMPORTANCE_LOW
Он не создает звука при создании уведомлений, так как мне нужно то же самое в моем музыкальном приложении.
И да, если вы уже создали канал уведомлений, либо вам нужно изменить идентификатор канала, либо просто удалить предыдущее приложение и установить его снова.
Сначала вам нужно установить
importance = NotificationManager.IMPORTANCE_LOW;
тогда
Notification n = builder.setPriority(Notification.DEFAULT_ALL).build(); n.defaults = 0; n.defaults |= Notification.DEFAULT_VIBRATE;
ваша проблема. решена?
Я столкнулся с тем же вопросом в 8.1. Сделал следующее изменение. Cahnge – это уведомление о недопустимости уведомления как LOW, и оно отключит звук notificatioin
NotificationManager.IMPORTANCE_LOW
код выглядит так: NotificationChannel chan1 = new NotificationChannel (“default”, “default”, NotificationManager.IMPORTANCE_LOW);