淺談Android? MediaPlayer
前言
MediaPlayer是Android中多媒體框架中一個重要的組件,我們通過它可以控制在線或者本地音視頻的播放過程.
MediaPlayer常用方法介紹
1.void setDataSource(String? url)通過一個具體的路徑來設置MediaPlayer的數(shù)據(jù)源,url可以是本地的一個路徑,也可以是一個網(wǎng)絡路徑.
2.void? setDataSource(Context context, Uri uri )通過給定的Uri來設置MediaPlayer的數(shù)據(jù)源,這里的Uri可以是網(wǎng)絡路徑或是一個ContentProvider的Uri.
3.void setDataSource(MediaDataSource dataSource) 通過提供的MediaDataSource來設置數(shù)據(jù)源
4.void setDataSource(FileDescriptor fd) 通過文件描述符FileDescriptor來設置數(shù)據(jù)源
5.getCurrentPosition()獲取當前播放位置
6.getDuration()得到文件時間
7.boolean isLooping()是否循環(huán)播放
8.boolean? isPlaying()是否正在播放
9.void? pause()暫停
10.void stop()停止
11.void start()播放
12.void prepare()同步裝載流媒體文件
13.void? prepareAsync()異步裝載流媒體文件
14.void? reset()重置MeidaPlayer至未初始的狀態(tài)
15.void release()回收流媒體資源
16.void? seekTo(int msec)指定播放位置(毫秒計算)
17.void setAudioStreamType(int streamtype) 指定流媒體類型
18.void setLooping(boolean looping) 設置是否單曲循環(huán)
19.setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener) 網(wǎng)絡流媒體的緩沖變化時回調(diào) **
20.setOnCompletionListener(MediaPlayer.OnCompletionListener listener) 網(wǎng)絡流媒體播放結(jié)束時回調(diào)
21.setOnErrorListener(MediaPlayer.OnErrorListener listener)? 發(fā)生錯誤時回調(diào) **
22.setOnPreparedListener(MediaPlayer.OnPreparedListener listener):當裝載流媒體完畢的時候回調(diào)。
!劃重點
1.在使用start()播放流媒體之前,需要裝載流媒體資源,建議最好使用prepareAsync()異步裝載的方式裝載流媒體資源.這是因為流媒體資源的裝載會消耗系統(tǒng)資源,在一些硬件設備不理想的情況下,可能會造成界面的卡頓.為了避免還沒有裝載完成就調(diào)用start()而報錯的問題,需要綁定MediaPlayer.setOnPreparedListener()事件,它將在異步裝載完成之后回調(diào).
mediaPlayer.reset();
try {
? ? mediaPlayer.setDataSource(url);
? ? mediaPlayer.prepareAsync();
? ? mediaPlayer.setOnPreparedListener(onPreparedListener);
}catch (IOException e) {
? ? e.printStackTrace();
}
public MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() {
? ? @Override
? ? public void onPrepared(MediaPlayer mp) {
? ? ? ? //開始播放
? ? ? ? mp.start();
}
};
2.getCurrentPosition()以及getDuration()方法調(diào)用事件,如果媒體資源未start()之前就調(diào)用這兩個方法,則會觸發(fā)MeidaPlayer.setOnErrorListener()事件,在onError()方法中,我們一般是執(zhí)行next()方法,所以就會導致切歌的現(xiàn)象.
3.播放完畢后的操作,這里就有另一個監(jiān)聽事件了MediaPlayer.setOnCompletionListener(),資源播放完畢一般的處理和onError()一致,都是執(zhí)行next()方法.
4.MeidaPlayer的回收,MediaPlayer是很消耗系統(tǒng)資源的,所以在使用完MediaPlayer,不要等待系統(tǒng)自動回收,最好是主動回收資源。
if (mediaPlayer != null) {
? ? mediaPlayer.reset();
? ? mediaPlayer.release();
? ? mediaPlayer = null;
}