¿Cómo puedo administrar los volúmenes de audio de forma sana en mi aplicación de Android?

Tengo una aplicación que reproduce sonidos intermitentes mientras su actividad está abierta, y el usuario siempre espera que haga estos ruidos, pero desafortunadamente está restringido por el volumen de la transmisión de música. Las opciones que he descubierto son así:

  1. Ajuste el volumen del flujo de música, posiblemente ensordeciendo al usuario si es que están reproduciendo música en ese momento.
  2. Llame a MediaPlayer.setVolume () que no es efectivo si el volumen de la transmisión de música es 0.
  3. El botón de manejo de volumen me presiona, lo que presenta dos problemas: presionar el botón de volumen ajusta el volumen del timbre a menos que se reproduzca mi audio, y hasta ahora no he podido capturar el evento onKey para presionar un botón de volumen usando mi OnKeyListener. Si hubiera alguna manera de forzar el ajuste para que se aplique a la transmisión de música mientras mi actividad tiene enfoque, o simplemente presionar el botón, esto me funcionará.
  4. Reproduzca una secuencia de audio en bucle silencioso en el fondo para mantener la secuencia de música en contexto para ajustes de volumen.

Creo que la tercera opción es probablemente la mejor, ya que cede el control del volumen al usuario, pero si hubiera alguna manera de anular el volumen del sistema en una sola instancia del reproductor de medios que también funcionaría.

Recibí otra sugerencia a través de Grupos de Google que es la solución integrada de plataforma que estaba buscando y funciona bien:

No maneje las teclas de volumen usted mismo; es casi imposible garantizar que no se romperá el comportamiento de las teclas de volumen.

Llame a esta API en su onCreate ():

setVolumeControlStream (AudioManager.STREAM_MUSIC);

Esto le dice al AudioManager que cuando su aplicación tenga foco, las teclas de volumen deberían ajustar el volumen de la música.

Es útil de esta API: setVolumeControlStream (AudioManager.STREAM_MUSIC);

A menos que esto pase más tiempo para corregir ese error de volumen.

Si está utilizando el método ‘OnKeyDown’, puede solucionar este problema haciendo lo siguiente:

public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { setVolumeControlStream(AudioManager.STREAM_MUSIC);}} 

Esto no lo ayudará si ha reemplazado el método KeyDown (int keycode, KeyEvent event) de una actividad.