MediaPlayer具有非常強(qiáng)大的功能,對(duì)音視頻的播放均提供了支持,為了保證播放期間系統(tǒng)的正常工作,需要設(shè)置"android.permission.WAKE_LOCK"權(quán)限。
在MediaPlayer中,根據(jù)數(shù)據(jù)源為元數(shù)據(jù)、音頻文件、音頻流的不同情況,有著相應(yīng)的處理過(guò)程。基本的過(guò)程如下:
1)播放元數(shù)據(jù)
如果元數(shù)據(jù)位于Android工程的“res/raw”文件夾下。播放元數(shù)據(jù)的過(guò)程為:
MediaPlayer mp=MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
2)播放音頻文件
如果音頻文件的路徑為PATH_TO_FILE,播放音頻文件的過(guò)程為:
MediaPlayer mp=new MediaPlayer();
mp.setDataSource(PATH_TO_FILE); //設(shè)置數(shù)據(jù)源
mp.prepare();
mp.start();
3)播放音頻流
如果音頻文件的URL地址為URL_ADRESS,播放音頻流的過(guò)程為:
MediaPlayer mp=new MediaPlayer();
mp.setDataSource(URL_ADRESS); //設(shè)置數(shù)據(jù)源
mp.prepare();
mp.start();
下面是Android中的一個(gè)實(shí)例,介紹了Android的MediaPlayer播放器音頻文件的播放、暫停、回復(fù)、停止等操作的處理流程。需要注意的是,為了獲得更好的用戶體驗(yàn),在暫停和恢復(fù)播放時(shí),必須對(duì)靜音模式和獨(dú)放模式進(jìn)行處理。
代碼 靜音模式和獨(dú)放模式的處理
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);
//獲取音頻服務(wù)
mAudioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE);
mMediaPlayer=MediaPlayer.create (this, MP3_TO_PLAY); //設(shè)置音頻源
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//設(shè)置流類型
mMediaPlayer.setLooping(false); //設(shè)置是否循環(huán)播放
mMediaPlayer.start(); //開始播放
}
@Override
protected void onPause()
{
super.onPause();
try
{
for (int i=0; i < AudioSystem.getNumStreamTypes(); i++)
{
mAudioManager.setStreamMute(i, false); //取消其他音頻應(yīng)用的靜音
mAudioManager.setStreamSolo(i, false); //設(shè)置為非獨(dú)放模式
}
}
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); //設(shè)置其他音頻應(yīng)用靜音
mAudioManager.setStreamSolo(i, true); //設(shè)置為獨(dú)放模式
}
}
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();
}
}