Pregunta

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

No sé lo que va a estar jugando o lo que la aplicación estará jugando, pero yo quiero pedir a todos ellos para hacer una pausa hasta que haya hecho. Sonidos bastante audaz, lo sé, pero debe ser posible, porque cuando hay una llamada entrante, que es básicamente lo que sucede.

¿Puedo enviar un mensaje a todos los reproductores de audio para pedirles que hacer una pausa por un momento? ¿Podría simular una llamada entrante, sólo por el tiempo que se tarda?

Gracias.

¿Fue útil?

Solución

manejar audio en Android va a ser bastante horrible por un tiempo. Las API son bastante raro, poco documentadas, y van cambiando / desaprobación / ruptura entre las versiones. Incluso el código AudioManager tiene ARREGLAMEs en ella.

De todos modos, hay varios tipos de trenes en Android (música, notificaciones, llamadas telefónicas, etc.) y las aplicaciones están destinadas a elegir el adecuado para la reproducción. Me imagino que la mayoría de las aplicaciones de Android se debe utilizar el tipo de música / medios (STREAM_TYPE_MUSIC). Se establece esta en su MediaPlayer utilizando el método setAudioStreamType.

El SDK hace le permiten establecer un único flujo type como solista - haciendo que todos los otros flujos que se debe silenciar - pero no creo que pueda identificar el ser de audio reproducida por determinadas aplicaciones y de alguna manera interrumpir / retomar la misma. aplicaciones de música en general utilizarán el PhoneStateListener para hacer una pausa sí mismos cuando entra una llamada.

Así pues, en su caso, usted podría "tomar prestada" la corriente llamada telefónica para su MediaPlayer y utilizar el AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) llamada al método cuando se inicia la reproducción, a continuación, un-solo de la corriente con false cuando se realiza la reproducción o su Activity.

te puedo decir que esto funciona, pero no puedo recordar la ligera si es necesario configurar también el audio modo a MODE_IN_CALL cuando se utiliza el flujo de llamada de voz (como este: AudioManager.setMode(AudioManager.MODE_IN_CALL)). Si encuentra que se requiere, entonces usted necesita para asegurarse de que regrese al modo de MODE_NORMAL una vez finalice la reproducción, de lo contrario cada vez que se pulsa las teclas físicas de volumen, que va a decir "Dentro de la llamada de volumen"! Sin embargo, siempre y cuando no desea volver a MODE_NORMAL cambio, debe comprobar que una llamada telefónica genuina no está sucediendo en ese momento ...

Tal vez usted podría utilizar otro tipo de flujo en lugar de la llamada de voz, pero sólo estoy hablando de experiencia trabajando 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 llamada de voz.

Como he dicho, la manipulación de audio no es muy divertido ...;)

Otros consejos

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 se llama setStreamMute (int, boolean) para silenciar el flujo de n veces, debe llamar n los tiempos de nuevo para activar el sonido (uso false).

Puede intentar método AudioManager.adjustVolume :

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioMan.adjustVolume(AudioManager.ADJUST_LOWER,
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top