android - teclado - cómo quitar el sonido de me gusta en facebook
Deshabilitar sonido de NotificationChannel (10)
(Actualización 2019-05: empeora con Android Q, incluso recibo un sonido cuando uso
NotificationManager.IMPORTANCE_LOW
, al menos en el emulador ...)
La solución es usar
NotificationManager.IMPORTANCE_LOW
y crear un nuevo canal para ello.
Una vez que se crea un canal, no se puede cambiar la importancia (bueno, se puede, pero se ignora la nueva importancia).
La información del canal parece ser almacenada permanentemente por el sistema y cualquier canal creado solo se elimina cuando desinstala la aplicación.
[
Actualización
: según el comentario de
Ferran Negre
, puede eliminar el canal a través de
nm.deleteNotificationChannel(nChannel.getId());
y recrearlo con
nm.createNotificationChannel(nChannel);
pero aparentemente hay una limitación de que no puede crear un canal con la misma identificación de un canal eliminado y esperar poder aplicar diferentes configuraciones al canal no borrado, vea la respuesta del
acoder
]
Si bien las versiones anteriores de Android no reproducían sonido de forma predeterminada, esto cambió con Android O, pero solo cuando se dirige a la API 26, es decir, utiliza los canales de notificación. Esto es una inconsistencia, bueno, en realidad, es un error:
La razón de esto es que cuando creas un canal con
NotificationManager.IMPORTANCE_DEFAULT
(no es apto para el sonido por defecto) Android en realidad "algo" lo registrará como
NotificationManager.IMPORTANCE_HIGH
(reproduce el sonido por defecto).
Puede verificar esto yendo a las opciones de las notificaciones (mantenga presionada la entrada de notificación), donde podrá leer que es del tipo
NotificationManager.IMPORTANCE_HIGH
y luego deshabilitar la notificación y luego volver a habilitarla.
En este proceso, se "rebaja" de
NotificationManager.IMPORTANCE_HIGH
a
NotificationManager.IMPORTANCE_HIGH
que no suena, realmente registrado.
El error se ha enviado al rastreador de problemas de Android, por lo que es posible que desee destacarlo (marcado por Google como "No se solucionará (inviable)", porque ... estropeado).
Por cierto, los nuevos documentos en https://developer.android.com/training/notify-user/channels afirman que el comportamiento predeterminado solía ser así, que el predeterminado reproducía un sonido anterior a Android 8.0, lo que definitivamente no es cierto . Esta es su lista
User-visible importance level Importance Priority
(Android 8.0 and higher) (Android 7.1 and lower)
Urgent Makes a sound and appears as IMPORTANCE_HIGH PRIORITY_HIGH
a heads-up notification or PRIORITY_MAX
High Makes a sound IMPORTANCE_DEFAULT PRIORITY_DEFAULT
Medium No sound IMPORTANCE_LOW PRIORITY_LOW
Low No sound and does not appear IMPORTANCE_MIN PRIORITY_MIN
in the status bar
Incluso puede ver la falta de coincidencia entre la importancia de visibilidad alta y la importancia de notificación alta ... No sé por qué están haciendo esto. Definitivamente tienen un error en su código.
Todo lo que está debajo de la siguiente línea está obsoleto
, sin embargo, ese error mencionado allí sigue siendo válido.
Mi error fue pensar que
NotificationManager.IMPORTANCE_MIN
es el siguiente más bajo de
NotificationManager.IMPORTANCE_DEFAULT
, pero
NotificationManager.IMPORTANCE_LOW
es.
Cuando ingresa a la configuración de notificaciones de la aplicación a través del botón de notificación larga y de todos los canales y activa y desactiva el interruptor para ese canal, se establece en
NotificationManager.IMPORTANCE_DEFAULT
y no se reproducirá ningún sonido.
También noté que después de un bloqueo, se restableció a
NotificationManager.IMPORTANCE_HIGH
Básicamente, la solución es usar
NotificationManager.IMPORTANCE_MIN
.
Pero debe crear un nuevo canal para que este
NotificationManager.IMPORTANCE_MIN
esté vigente, porque parece que
no puede cambiar la importancia de un canal ya existente una vez que lo haya creado
.
Actualización:
Resulta la solución con
NotificationManager.IMPORTANCE_MIN
tiene un inconveniente.
Cuando usa ese nivel de importancia, su notificación ya no se muestra completamente dentro del cajón de notificaciones, sino que se inserta en un nuevo Grupo de canales de notificación que se contrae de manera predeterminada (y se colapsará nuevamente cada vez que se baje el cajón). ¡Qué fastidio!
Actualización 2:
Excavando un poco más, resulta que es como si lo registrara correctamente como
NotificationManager.IMPORTANCE_DEFAULT
, pero de alguna manera se actualizó mágicamente a
NotificationManager.IMPORTANCE_HIGH
, como lo haría cuando el usuario cambia explícitamente la configuración de predeterminada a alta.
Ese también se restablece a los valores predeterminados después de apagar la notificación y volver a encenderla.
Hoy comencé a apuntar a la API 26, lo que me obligó a usar canales de notificación.
Mi problema es que ahora en cada nueva notificación (incluidas las actualizaciones) se reproduce un sonido molesto.
¿Cómo puedo desactivar este sonido?
Intenté reemplazar este sonido con un sonido mp3 personalizado para luego pasarle un mp3 con silencio, pero esto se ignora.
Solo estoy agregando una notificación que es de muy baja prioridad, básicamente dando al usuario la opción de realizar algunas acciones después de haber interactuado con la aplicación. No hay razón para ser ruidoso, el usuario sabrá que puede consultar la notificación porque ha hecho algo con la aplicación y sabe que hará que aparezca una notificación.
El usuario realmente comenzará a molestarse por ese sonido.
Enfrenté el mismo problema en el 8.1 e hice los siguientes cambios. Cambie la prioridad de la notificación como BAJA y deshabilitará el sonido de la notificación.
NotificationManager.IMPORTANCE_LOW
El código es como sigue:
NotificationChannel chan1 = new NotificationChannel("default", "default", NotificationManager.IMPORTANCE_LOW);
Para mí, la solución fue crear una notificación grupal .
importance = NotificationManager.IMPORTANCE_LOW;
Pero en este caso, si envía una nueva notificación con una nueva ID, se agrupará con las notificaciones anteriores.
Por lo que he visto, desde API 26 (Oreo) no es posible cambiar el sonido de una notificación después de que se creó una vez.
notificationManager.deleteNotificationChannel("channel_id"));
NotificationChannel notificationChannel = new NotificationChannel(
"channel_id", "channel_name",
NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setSound(null, null);
notificationManager.createNotificationChannel(notificationChannel);
Incluso eliminar el canal antes de la creación no ayuda.
La documentación de Google dice:
android.app.NotificationManager public void deleteNotificationChannel(String channelId)
Elimina el canal de notificación dado. Si crea un nuevo canal con esta misma identificación, el canal eliminado se eliminará con la misma configuración que tenía antes de eliminarse.
NotificationChannel#setSound()
estados de documentación
Solo modificable antes de que el canal se
NotificationManager#createNotificationChannel(NotificationChannel)
aNotificationManager#createNotificationChannel(NotificationChannel)
Lástima que
notificationBuilder.setSound(defaultSoundUri)
no funciona tan bien:
Este método fue desaprobado en el nivel 26 de la API. Utilice NotificationChannel # setSound (Uri, AudioAttributes) en su lugar.
También el uso de la biblioteca de soporte no funciona. Por lo tanto, el sonido solo se puede configurar una vez en la aplicación y el cambio por parte del usuario solo es posible en la configuración de la notificación. Para mí, el comentario de Ferran Negre no funcionó. No entiendo por qué Google hizo esta restricción. Demasiado.
Primero necesitas configurar
Notification n = builder.setPriority(Notification.DEFAULT_ALL).build();
n.defaults = 0;
n.defaults |= Notification.DEFAULT_VIBRATE;
entonces
NotificationManager.IMPORTANCE_LOW
Si desea mantener la importancia de su canal y simplemente eliminar la
notificationChannel.setSound(null, null);
sonidoChannel.setSound
notificationChannel.setSound(null, null);
Parece hacer el trabajo.
EDITAR: asegúrese de cambiar el nombre del canal (y eliminar el antiguo) para que se aplique a los usuarios existentes. (Los canales se pueden crear, pero la aplicación nunca puede modificarlos, solo el usuario puede hacerlo).
Si el caso es como el mío, me veo obligado a mostrar una notificación para el servicio en segundo plano y realmente no quiero mostrar ninguna notificación, la solución que funcionó en 8.0 fue:
.setPriority(NotificationManager.IMPORTANCE_NONE)
Con esto no solo no recibí el sonido molesto cada 5 minutos, sino que también minimicé la aparición de la notificación en sí.
En 8.1 no tuve el problema con el sonido con lo siguiente:
.setPriority(NotificationManager.IMPORTANCE_MIN)
NotificationManager.IMPORTANCE_LOW
funcionará seguro
NotificationChannel chan1 = new NotificationChannel("default", "default", NotificationManager.IMPORTANCE_LOW);
Esto funcionará pero también colapsó su notificación.
NotificationManager.IMPORTANCE_LOW
No produce sonido cuando se crea la notificación, ya que necesito lo mismo en mi aplicación de música.
Y sí, si ya ha creado un canal de notificación, entonces necesita cambiar la identificación del canal o simplemente desinstalar la aplicación anterior e instalar nuevamente.