Android使用MediaPlayer播放音樂檔案
阿新 • • 發佈:2019-01-05
這裡主要介紹的是SeekBar拖動條和MediaPlayer播放器;
最近專案新增一個音樂播放頁面,讓使用者可以試聽警報聲,所以實現單曲播放,但是隻要單曲可以實現,多曲也非常簡單;
首先看下佈局檔案,在這隻複製SeekBar:(其他的佈局檔案太簡單了,如果想看可以下載demo)
SeekBar的背景圖片需要自己建立,在drawable資料夾下建立po_seekbar.xml檔案:<!-- android:max="100" 設定最大進度 android:progress="0" 設定當前進度 android:secondaryProgress="":設定第二進度 android:thumb="": 設定滑動按鈕的圖片 android:progressDrawable="":進度條背景圖片 --> <SeekBar android:id="@+id/seekbar" android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_weight="1" android:max="100" android:padding="10dp" android:progress="0" android:progressDrawable="@drawable/po_seekbar" android:thumb="@mipmap/img_point_seekbar" />
當用戶點選報警鈴聲跳轉此頁面,會直接播放音樂;<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!--進度條北京--> <item android:id="@android:id/background"> <shape> <solid android:color="#c3c9d4" /> </shape> </item> <!--緩衝背景顏色,沒有用到(如果網路載入視訊檔案可以用到)--> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <solid android:color="#ff0000" /> </shape> </clip> </item> <!--已載入的背景顏色--> <item android:id="@android:id/progress"> <clip> <shape> <solid android:color="#34b282" /> </shape> </clip> </item> </layer-list>
播放音樂非常簡單,按照官方要求初始化MediaPlayer即可:
MediaPlayer mediaPlayer = new MediaPlayer(); //音樂播放完成的監聽 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { //真實專案中可根據需求更改 } });
//第一步:重置
mediaPlayer.reset();
//第二步:設定資料來源(這裡播放的是本地檔案,可播放其他檔案)
mediaPlayer.setDataSource(activity, musicUri);
//第三步:準備
mediaPlayer.prepare();
//第四步:播放
mediaPlayer.start();
開始播放以後我們根據MediaPlayer不停的獲取音樂總時長和當前進度設定在指定view上:// 獲取當前播放的音樂的總時長,當前進度
int duration = mediaPlayer.getDuration();
int currentPosition = mediaPlayer.getCurrentPosition();
正在播放的時候如果使用者點選開關需要暫停播放音樂://暫停
private void pause() {
if (mediaPlayer != null && mediaPlayer.isPlaying())
//暫停
mediaPlayer.pause();
//停止timer
if (timer != null) {
timer.cancel();
timer = null;
}
}
使用者再次點選開關需要繼續播放音樂: //繼續播放
private void continuePlay() {
if (mediaPlayer != null)
// start();播放、繼續播放
mediaPlayer.start();
//繼續播放,重新開啟timer
getProgressByTimer();
}
再次點選暫停;
實現拖拽播放:
首先給SeekBar設定拖拽監聽:
//設定進度改變監聽
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//進度改變回調
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
//開始拖拽回撥
public void onStartTrackingTouch(SeekBar seekBar) {}
//停止拖拽回撥
public void onStopTrackingTouch(SeekBar seekBar) {
//獲取當前拖拽的位置
int dragedProgress = seekBar.getProgress();
//記錄拖拽的位置
Constants.CURRENT_PROGRESS=dragedProgress;
musicUtils.start();
}
});
當停止拖拽時記錄拖拽的位置,MediaPlayer可根據拖拽位置播放; //拖拽
private void dragPlay() {
if (mediaPlayer != null) {
//播放指定位置
mediaPlayer.seekTo(Constants.CURRENT_PROGRESS);
}
}
我們這裡只是為了讓使用者試聽報警音樂,所以並沒有過多的邏輯,但是MediaPlayer主要的功能方法都用到了;