MediaPlayer具有非常强大的功能,对音视频的播放均提供了支持,为了保证播放期间系统的正常工作,需要设置"android.permission.WAKE_LOCK"权限。
在MediaPlayer中,根据数据源为元数据、音频文件、音频流的不同情况,有着相应的处理过程。基本的过程如下:
1)播放元数据
如果元数据位于Android工程的“res/raw”文件夹下。播放元数据的过程为:
MediaPlayer mp=MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
2)播放音频文件
如果音频文件的路径为PATH_TO_FILE,播放音频文件的过程为:
MediaPlayer mp=new MediaPlayer();
mp.setDataSource(PATH_TO_FILE); //设置数据源
mp.prepare();
mp.start();
3)播放音频流
如果音频文件的URL地址为URL_ADRESS,播放音频流的过程为:
MediaPlayer mp=new MediaPlayer();
mp.setDataSource(URL_ADRESS); //设置数据源
mp.prepare();
mp.start();
下面是Android中的一个实例,介绍了Android的MediaPlayer播放器音频文件的播放、暂停、回复、停止等操作的处理流程。需要注意的是,为了获得更好的用户体验,在暂停和恢复播放时,必须对静音模式和独放模式进行处理。
代码 静音模式和独放模式的处理
public class AudioManagerStub extends Activity
{
private final int MP3_TO_PLAY=R.raw.testmp3;
private MediaPlayer mMediaPlayer;
private AudioManager mAudioManager;
private static CTSResult mCTSResult;
…
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//获取音频服务
mAudioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE);
mMediaPlayer=MediaPlayer.create (this, MP3_TO_PLAY); //设置音频源
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置流类型
mMediaPlayer.setLooping(false); //设置是否循环播放
mMediaPlayer.start(); //开始播放
}
@Override
protected void onPause()
{
super.onPause();
try
{
for (int i=0; i < AudioSystem.getNumStreamTypes(); i++)
{
mAudioManager.setStreamMute(i, false); //取消其他音频应用的静音
mAudioManager.setStreamSolo(i, false); //设置为非独放模式
}
}
catch (Exception e)
{
mCTSResult.setResult(CTSResult.RESULT_FAIL);
finish();
}
}
@Override
protected void onResume()
{
super.onResume();
try
{
for (int i=0; i< AudioSystem.getNumStreamTypes(); i++)
{
mAudioManager.setStreamMute(i, true); //设置其他音频应用静音
mAudioManager.setStreamSolo(i, true); //设置为独放模式
}
}
catch (Exception e)
{
mCTSResult.setResult(CTSResult.RESULT_FAIL);
finish();
return;
}
Intent intent=new Intent();
intent.setClass(this, AudioManagerStubHelper.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
mMediaPlayer.stop(); //停止播放
mMediaPlayer.release(); //释放资源
mCTSResult.setResult(CTSResult.RESULT_OK);
finish();
}
}