2012-07-02 9 views
5

que tienen este método en mi actividad principal¿Cómo configurar volumen de sonido de notificación mediante programación?

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 tengo entendido, el volumen de sonido de notificación debe ser regulada 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?

Respuesta

5

Fui de otra manera. No es exactamente la respuesta a mi pregunta, sino la apropiada. Cuando reproduzco la notificación en STREAM_MUSIC todo está bien. Así notificación juega exactamente con el volumen que pase 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(); 
} 
+0

El sonido aún se reproduce cuando la notificación está desactivada desde la configuración del dispositivo. ¿Alguien está enfrentando este problema usando el código anterior? Nota: estoy usando la última biblioteca de GCM. –

2

Antes que nada, espero que te des cuenta de que estás intentando jugar dos notificaciones una detrás de otra, por lo que podría haber un conflicto al respecto. AudioManager.FLAG_PLAY_SOUND y r.play() intentarán reproducir el sonido. Por lo general, es suficiente para darle al usuario un tipo de información, ya sea mediante la interfaz de usuario o al tocar el sonido con un nuevo volumen. Te sugiero que elimines uno de los indicadores. Si usted no necesita ninguna, sólo le dan 0.

Llegando a la cuestión principal, no estoy seguro de si se puede establecer el nivel de volumen a 0. trate de poner 1, como

manager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 1, AudioManager.FLAG_SHOW_UI); 

si desea silenciar la notificación, intente utilizar setStreamMute, que es equivalente a establecer el volumen en 0.

+0

No ayuda. Quité ambas banderas, pero la notificación todavía se reproduce con el mismo volumen cuando puse ** 1 ** o ** 7 ** –

+0

¿Agregó el permiso MODIFY_AUDIO_SETTINGS en su archivo de manifiesto? – Erol

+0

No. Nada cambió después de agregar esta sección en manifiesto -

-1

Escribir una función de la siguiente manera, o copiar y pegar el siguiente,

public void ringtone() { 
    try { 
     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
     r.play(); 
    } catch (Exception e) {} 
} 

y llamar ringtone() cuando se quiere hacer un pitido notificación.

+0

funcionó perfectamente para mí ... Espero que te ayude a la gente ... – Ragu

Cuestiones relacionadas