標籤:
Android中的音樂媒體播放 Mediaplayer類,定義如下
final MediaPlayer mpRain = MediaPlayer.create(this,R.raw.rain);
檔案為 res/raw/rain.mp3 //raw在Androidstudio中我自己建立的
我自己在這裡的用法是只有一個按鈕,單擊使用,如果在播放就停止,否則開始播放,附上代碼
1 mpRain.setLooping(true); 2 buttonRain.setOnClickListener(new Button.OnClickListener() { 3 @Override 4 public void onClick(View v) {12 if (isRain == false) {13 try {14 if (mpRain != null) {15 mpRain.stop();16 }18 mpRain.prepare();19 mpRain.start();20 isRain = true;21 Snackbar.make(v, "Rain start", Snackbar.LENGTH_LONG)22 .setAction("Action", null).show();23 } catch (Exception e) {24 Snackbar.make(v, "Rain Exception 1", Snackbar.LENGTH_LONG)25 .setAction("Action", null).show();26 }27 } else {28 try {29 if (mpRain != null) {31 mpRain.stop();34 Snackbar.make(v, "Rain stop", Snackbar.LENGTH_LONG)35 .setAction("Action", null).show();36 }37 } catch (Exception e) {38 Snackbar.make(v, "Rain Exception 2", Snackbar.LENGTH_LONG)39 .setAction("Action", null).show();40 }41 isRain = false;42 }43 }44 });
其中mpRain.start()類似的還有pause(),release()等等,建議一定要去看一下Mediaplayer的文檔,有詳細的解釋,另外還有讓音樂播放進行迴圈的
mpRain.setLooping(true);
另外有需要重寫的方法我這裡不需要就沒有進行重寫
1 /* 當MediaPlayer.OnCompletionLister會啟動並執行Listener 2 mp.setOnCompletionListener( 3 new MediaPlayer.OnCompletionListener() 4 { 5 // @Override 6 /*覆蓋檔案播出完畢事件 7 public void onCompletion(MediaPlayer arg0) 8 { 9 try10 {11 /*解除資源與MediaPlayer的賦值關係12 * 讓資源可以為其它程式利用13 mp.release();14 /*改變TextView為播放結束15 tv.setText("音樂播髮結束!");16 }17 catch (Exception e)18 {19 tv.setText(e.toString());20 e.printStackTrace();21 }22 }23 });24 25 /* 當MediaPlayer.OnErrorListener會啟動並執行Listener26 mp.setOnErrorListener(new MediaPlayer.OnErrorListener()27 {28 @Override29 /*覆蓋錯誤處理事件30 public boolean onError(MediaPlayer arg0, int arg1, int arg2)31 {32 // TODO Auto-generated method stub33 try34 {35 /*發生錯誤時也解除資源與MediaPlayer的賦值36 mp.release();37 tv.setText("播放發生異常!");38 }39 catch (Exception e)40 {41 tv.setText(e.toString());42 e.printStackTrace();43 }44 return false;45 }46 });47
控制盡量部分採用了一個seekbar,根據get到的值設定mp的音量,用到的方法為 mpRain.setVolume(float left,float right)
1 seekbarRain.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() //調音監聽器 2 { 3 public void onProgressChanged(SeekBar arg0, int progress, boolean fromUser) { 4 // 5 //buttonRain.setText(seekbarRain.getProgress()); 6 7 //int tempvol = seekbarRain.getProgress(); 8 //float tempvolF = tempvol/10.0f; 9 mpRain.setVolume(seekbarRain.getProgress()/10.0f, seekbarRain.getProgress()/10.0f);10 //Log.i("seek", "seekbarRain.getProgress()" + tempvolF);11 //mpRain.setVolume(seekbarRain.getProgress()/10,seekbarRain.getProgress()/10);12 13 }14 15 @Override16 public void onStartTrackingTouch(SeekBar seekBar) {17 // TODO Auto-generated method stub18 19 }20 21 @Override22 public void onStopTrackingTouch(SeekBar seekBar) {23 // TODO Auto-generated method stub24 25 26 }27 });
setVolume方法的兩個參數左右暫時還是沒有查到用法與區別,現在實驗得到的結果是設為同一個值可以直接設定音量值
Android|媒體|播放和音量大小|seekbar|mediaplayer