Android MediaPlayer - how to play in the STREAM_ALARM?

James picture James · Aug 14, 2011 · Viewed 9.4k times · Source

I've tried settings the audio stream of the media player in my application using the following code but when I do this I hear no sound in the emulator. If I don't set the stream for the player then the audio plays fine. I'm sure I'm using this wrong but cannot workout how, any help?

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();

Note: I've added the MODIFY_AUDIO_SETTINGS permission to my manifest already.

Thanks!

Answer

Yuki Awano picture Yuki Awano · Nov 30, 2011

I don't know why this would happen, however the code below works. You should set the data source with setDataSource() instead of with create().

This code works:

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();

This code doesn't work:

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