2010-01-03 9 views
10

Hola, soy nuevo en esto. Mi proyecto de autoaprendizaje es una pequeña aplicación que reproduce un flujo de noticias de audio. Para ser efectiva, la aplicación realmente necesita interrumpir los reproductores de medios actualmente en reproducción (por ej .: Última FM, Imeem, reproductor de música, Spotify, etc.).Android: ¿puedo silenciar las aplicaciones de audio que se están reproduciendo actualmente?

No sé qué se reproducirá o qué aplicación lo reproducirá, pero quiero pedirles a todos que hagan una pausa hasta que lo haya hecho. Suena bastante atrevido, 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 pause por un momento? ¿Podría parodiar una llamada entrante, solo por el tiempo que lleva?

Gracias.

Respuesta

18

la manipulación de audio en Android va a ser bastante horrible por un tiempo. Las API son bastante extrañas, están mal documentadas y siguen cambiando/desaprobando/rompiendo entre versiones. Incluso el código 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 deberían usar el tipo de música/medios (STREAM_TYPE_MUSIC). Usted configura esto en su MediaPlayer usando el método setAudioStreamType.

El SDK no le permiten establecer un único flujo tipo como solista — haciendo que todos los otros flujos que se silenciarán — pero no creo que pueda identificar el audio reproducido por aplicaciones particulares y de alguna manera hacer una pausa/Reanudar eso. aplicaciones de música en general utilizarán el PhoneStateListener para hacer una pausa sí mismos cuando entra una llamada.

Así, en su caso, usted podría "tomar prestada" la corriente llamada telefónica para su MediaPlayer y utilizar el método llamado AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true) cuando comience la reproducción, entonces la ONU -solo la secuencia con false cuando la reproducción o su Activity está hecho.

te puedo decir que esto funciona, pero no puedo recordar la ligera si es necesario configurar también el modo de audioa MODE_IN_CALL cuando se utiliza el flujo de llamada de voz (como este: AudioManager.setMode(AudioManager.MODE_IN_CALL)). Si considera que es necesario, debe asegurarse de regresar al modo MODE_NORMAL una vez que finalice la reproducción; de lo contrario, cada vez que presione las teclas de acceso rápido de volumen, aparecerá el mensaje "Volumen durante la llamada". Sin embargo, si desea volver a cambiar al MODE_NORMAL, debe verificar que no haya una llamada de teléfono genuina en ese momento ...

Quizás podría usar otro tipo de transmisión en lugar de la llamada de voz, pero estoy hablando por experiencia trabajando en una aplicación que podría usar el altavoz o el auricular para la reproducción de audio, que requiere el uso de la transmisión de llamadas de voz.

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

+0

Gracias Christopher, su consejo era perfecto. De hecho, he secuestrado, el STREAM_ALARM, que se adapta a mi propósito, lo configuré en solo y esto tiene el efecto deseado. Gracias de nuevo. –

+0

Vaya, no es una buena idea, al menos no con auriculares. Volver a VOICE_CALL. No parece necesitar MODE_IN_CALL, al menos no hasta ahora. –

0

Usted puede intentar AudioManager.adjustVolume método:

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
audioMan.adjustVolume(AudioManager.ADJUST_LOWER, 
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
6

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

+0

funciona bien gracias :) – Ramz

2
+0

El único problema con esto es si otras aplicaciones no cumplen con la solicitud de enfoque de audio. – StackOverflowed

+1

cierto, aunque si utiliza los indicadores TRANSITORIOS, la mayoría lo hará. ¡Todos deberíamos esforzarnos para ser buenos ciudadanos de audio focus! – yano

Cuestiones relacionadas