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.
- Reproductor de medios Android Reiniciar audio después de llamar a Stop
- Reproducción de varios sonidos con SoundManager
- Android AudioRecord artefacto
- ¿Cómo ralentizar y estirar el audio en Android?
- Necesita un ejemplo sencillo para la grabación de audio
¿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.
- ¿Cómo puedo obtener información de latencia de la clase AudioTrack de Android?
- Android WebView reproducir audio con javascript
- Android AudioRecord y AudioTrack codec opciones?
- ¿Cómo enviar streaming de audio en vivo sobre RTSP en dispositivos Android?
- Ndk-build no logra construir la biblioteca de audio Superpowered después de la reciente actualización de NDK
- Cómo subir un archivo de audio a Parse.com - Android
- Android 2.2 MediaPlayer está funcionando bien con una URL de SHOUTcast, pero no con la otra
- Límites de efectos de audio de Android a 5 bandas
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
).
La forma apropiada es usar el método AudioManager.requestAudioFocus(...)
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);