Cómo configurar el volumen de sonido de notificación mediante programación?
Tengo este método en mi actividad principal
private void beep() { AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND); Uri notification = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); r.play(); }
Según entiendo, el volumen de sonido de la notificación debe ser regulado por STREAM_NOTIFICATION. Pero la notificación siempre se reproduce con el mismo volumen a pesar de ese número de volumen en el método setStreamVolume. ¿Porqué es eso?
- Android: notificación incorrecta publicada sólo en Android 2.3
- El icono de la barra de notificaciones se vuelve blanco en Android L
- Creación de la notificación de InstrumentationTestCase
- En Android, ¿cómo puedo saber el ID de notificación actual para borrar la notificación
- Gestionar notificaciones múltiples / apilar notificaciones desde GCM
- Barra de notificaciones muestra iconos grandes y pequeños
- Notificación de Android Estilo de imagen grande y estilo de texto grande
- Biblioteca cliente C # para suscribir / publicar MQTT (Realmente Small Message Broker)
- Ayuda del Administrador de notificaciones de Android
- Colapso de notificaciones nuevas de Jelly Bean por defecto
- Evitar la cancelación de la notificación al eliminar la aplicación de la lista de aplicaciones recientes
- ¿Es posible cancelar todas las notificaciones que tienen una etiqueta determinada?
- Saber si la aplicación recibió la notificación desde el lado del servidor
Fui por otro camino. No es exactamente la respuesta a mi pregunta, pero apropiado. Cuando toco la notificación en STREAM_MUSIC todo está bien. Así que la notificación juega exactamente con el volumen que paso como parámetro a la función
private void beep(int volume) { AudioManager manager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); manager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0); Uri notification = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); MediaPlayer player = MediaPlayer.create(getApplicationContext(), notification); player.start(); }
En primer lugar, espero que te das cuenta de que estás tratando de jugar dos notificaciones justo después del otro, por lo que podría haber un conflicto sobre eso. AudioManager.FLAG_PLAY_SOUND
y r.play()
intentarán reproducir el sonido. Por lo general, es suficiente dar al usuario un tipo de información, ya sea por interfaz de usuario o por reproducir el pitido con nuevo volumen. Le sugiero que elimine una de las banderas. Si no lo necesitas, solo dale 0.
En cuanto a la pregunta principal, no estoy seguro de si puede establecer el nivel de volumen a 0. Intenta poner 1, como
manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 1, AudioManager.FLAG_SHOW_UI);
Si desea silenciar la notificación, pruebe a utilizar setStreamMute , lo que equivale a establecer el volumen en 0.
Escribir una función como sigue, o copiar y pegar lo siguiente,
public void ringtone() { try { Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); r.play(); } catch (Exception e) {} }
Y el ringtone()
cuando desee hacer una notificación de pitido.