Android: ¿puedo silenciar las aplicaciones de audio que se están reproduciendo actualmente?

Hola soy nuevo en esto. Mi proyecto de auto-enseñanza es una pequeña aplicación que reproduce un flujo de noticias de audio. Para ser eficaz, la aplicación realmente necesita interrumpir a cualquier reproductor multimedia en reproducción (por ejemplo: Last FM, Imeem, reproductor de música, Spotify, etc.).

No sé qué va a estar jugando o qué aplicación va a jugar, pero quiero pedirles a todos a hacer una pausa hasta que he hecho. Suena bastante audaz, lo sé, pero debe ser posible, porque cuando hay una llamada entrante, eso es básicamente lo que sucede.

¿Puedo enviar un mensaje a todos los reproductores de audio pidiéndoles que se detengan por un momento? ¿Puedo falsificar una llamada entrante, sólo por el tiempo que toma?

Gracias.

El manejo de audio en Android va a ser bastante horrible por un tiempo. Las API son bastante extrañas, mal documentadas, y siguen cambiando / desaprobando / rompiendo entre versiones. Incluso el código de AudioManager tiene FIXMEs en él.

De todos modos, hay varios tipos de secuencias en Android (música, notificaciones, llamadas telefónicas, etc.) y las aplicaciones están destinadas a elegir la adecuada para la reproducción. Me imagino que la mayoría de las aplicaciones de Android deben usar el tipo de música / medios ( STREAM_TYPE_MUSIC ). Establece esto en su MediaPlayer utilizando el método setAudioStreamType .

El SDK le permite establecer un tipo de secuencia única como solo, lo que hace que todos los demás flujos se silencien, pero no creo que pueda identificar el audio que se está reproduciendo por aplicaciones concretas y, de alguna manera, pausar / no pausar. Las aplicaciones de música en general utilizarán PhoneStateListener para hacer una pausa cuando llegue una llamada.

Por lo tanto, en su caso, podría "pedir prestado" el flujo de llamadas telefónicas para su MediaPlayer y utilizar la llamada de método AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) cuando se inicia la reproducción, hecho.

Puedo decirte que esto funciona, pero no puedo recordar de improviso si también necesitas ajustar el modo de audio a MODE_IN_CALL cuando usas el flujo de llamadas de voz (como esto: AudioManager.setMode(AudioManager.MODE_IN_CALL) ). Si usted encuentra que es necesario, entonces usted necesita para asegurarse de que devuelve el modo a MODE_NORMAL una vez que la reproducción se completa, de lo contrario cada vez que presione las teclas de volumen duro, va a decir "volumen de llamada"! Sin embargo, si y cuando desea cambiar de nuevo a MODE_NORMAL , debe comprobar que una llamada telefónica genuina no está ocurriendo en ese momento …

Tal vez usted podría utilizar otro tipo de flujo en lugar de la llamada de voz, pero estoy hablando de la experiencia de trabajo en una aplicación que podría utilizar el altavoz o el auricular para la reproducción de audio, que requiere el uso de la corriente de llamadas de voz.

Como he dicho, el manejo de audio no es particularmente divertido …;)

Ha sido 2 años. Pero espero que esto podría ayudar a alguien:

 AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); am.setStreamMute(AudioManager.STREAM_MUSIC, true); 

Nota: si llama a setStreamMute (int, boolean) para silenciar la secuencia n veces, debe llamarla nuevamente nuevamente para activar el sonido (use false ).

Puede probar el método AudioManager.adjustVolume :

 AudioManager audioMan = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioMan.adjustVolume(AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
  • Reproducir archivo de audio desde el directorio de activos
  • Transmisión de un archivo de audio en android a través de RTP
  • Extraño problema en Combinar archivos de audio y reproducir en diferentes versiones de API
  • Reproducir un sonido de res / raw
  • Android> 4.0: Ideas para grabar / capturar audio interno (por ejemplo, STREAM_MUSIC)?
  • AudioManager.isWiredHeadsetOn () no funciona en android
  • Usar AudioTrack de Android para combinar bytes de muestras de sonido produce ruido
  • Formato de audio para iOS y Android
  • Jugar dos sonidos Simutaneosly
  • ¿Por qué toma tanto tiempo para que MediaPlayer de Android prepare algunas secuencias en vivo para su reproducción?
  • Android reproduce sonidos después del retardo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.