2011-08-14 17 views
11

He intentado configurar la transmisión de audio del reproductor multimedia en mi aplicación utilizando el siguiente código, pero cuando lo hago no escucho ningún sonido en el emulador. Si no configuro la transmisión para el reproductor, el audio se reproduce bien. Estoy seguro de que estoy usando esto mal pero no puedo entrenar cómo, ¿alguna ayuda?Android MediaPlayer - cómo jugar en STREAM_ALARM?

MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.test_audio); 

AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.getStreamVolume(AudioManager.STREAM_ALARM); 
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
player.setAudioStreamType(AudioManager.STREAM_ALARM); 
player.start(); 

Nota: Ya he agregado el permiso MODIFY_AUDIO_SETTINGS a mi manifiesto.

Gracias!

Respuesta

0

intente lo siguiente:

player.setAudioStreamType(AudioManager.STREAM_ALARM); 
player.prepare(); 
player.start(); 

Y por qué estás llamando "audioManager.getStreamVolume (AudioManager.STREAM_ALARM);"? El valor no se almacena en una variable, por lo que es bastante inútil;)

espero que ayudó

+0

Lo probé con player.prepare() pero no hizo ninguna diferencia. Todavía no se reproduce audio. Estaba almacenando el volumen de la secuencia en una variable que se utiliza más adelante en mi aplicación, saqué temporalmente la tarea para ayudar con la depuración. – James

19

No sé por qué esto iba a pasar, sin embargo, el código de abajo obras. Debe configurar la fuente de datos con setDataSource() en lugar de con create().

Este código funciona:

MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setDataSource(this,Uri.parse("android.resource://PACKAGE_NAME/"+R.raw.soundfile)); 
mp.prepare(); 
mp.start(); 

Este código no se trabajo:

MediaPlayer mp = MediaPlayer.create(this, R.raw.soundfile); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.prepare(); 
mp.start(); 
+1

mejor escribir el uri como: 'Uri.parse (" android.resource: // "+ mContext.getPackageName() +"/"+ R.raw.sound)' –

2

1. setAudioStreamType (int streamType)

debe llamar a este método antes de preparar ();

2. MediaPlayer.create (contexto Contexto, int resid)

En caso de éxito, prepare() ya habrá sido llamado y no debe ser llamado de nuevo.

3

El problema es que está usando MediaPlayer.create() para crear su MediaPlayer. La función Create llama a la función prepare() que finaliza sus medios y no le permite cambiar AudioStreamType.

La solución es utilizar setDataSource en lugar de create:

MediaPlayer mp = new MediaPlayer(); 
mp.setAudioStreamType(AudioManager.STREAM_ALARM); 
mp.setLooping(true); 
try { 
    mp.setDataSource(getApplicationContext(), yourAudioUri); 
    mp.prepare(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
mp.start(); 

Ver this link para más información.

Cuestiones relacionadas