在Android平台下開發多媒體軟體MediaPlayer

來源:互聯網
上載者:User

在前文中我們介紹了在Ubuntu下建立Eclipse的Android開發環境,我們現在將介紹一下在Android平台下如何開發多媒體軟體MediaPlayer。MediaPlayer可以用來播放視頻和音頻、流媒體。MediaPlayer的生命週期如:

 

從MediaPlayer的生命週期圖,可以看出使用MediaPlayer不是很複雜。

最簡單的流程:初始化->resrt()->setDataSource()->prepare()->start()->……只要簡單的幾步,就可以播放音頻檔案了。

來看看一個播放音訊例子吧,看代碼和注釋吧……

1: private Handler handler = new Handler() {
   2:  
   3:         public void handleMessage(Message msg) {
   4:             //更新進度條
   5:             progressBar.setProgress(progressState);
   6:         };
   7:     };
   8:  
   9: /**
  10:      * 播放
  11:      * 
  12:      * @param filePath
  13:      *            檔案路徑
  14:      */
  15:     private void playMusic(String filePath) {
  16:         try {
  17:             progressState = 0;
  18:             progressBar.setProgress(0);
  19:             // 重設
  20:             mediaPlayer.reset();
  21:             // 設定資料來源
  22:             mediaPlayer.setDataSource(filePath);
  23:             // 準備播放
  24:             mediaPlayer.prepare();
  25:             // 擷取播放時間長度
  26:             length = mediaPlayer.getDuration();
  27:             progressBar.setMax(length / 1000);
  28:             // 播放
  29:             mediaPlayer.start();
  30:             new Thread(new ProcessBarRefresh()).start();
  31:             // 設定播放完畢監聽
  32:             mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
  33:                 @Override
  34:                 public void onCompletion(MediaPlayer mp) {
  35:                     nextMusic();
  36:                 }
  37:             });
  38:  
  39:         } catch (Exception e) {
  40:             displayToast(e.getMessage());
  41:         }
  42:     }
  43:     
  44:     /**
  45:      * 更新進度條
  46:      * @author 張漢國
  47:      */
  48:     class ProcessBarRefresh implements Runnable{
  49:  
  50:         @Override
  51:         public void run() {
  52:             while(isPlaying){
  53:                 progressState = mediaPlayer.getCurrentPosition()/1000;
  54:                 handler.sendMessage(handler.obtainMessage());
  55:             }
  56:         }
  57:         
  58:     }

 

 

以上只是一個簡單的執行個體,要開發一個播放器除了UI需要下功夫外,還得注意不少細節東西。

Android中音樂播放是一個後台進程,以上代碼當調用 onStop()->onCreate() 的時候會重複載入播放清單,造成列表重複。這就需要用到 onSaveIntanceState(),這樣子在onCreate()裡面初始化播放清單的時候先判斷 Bundle 是否為空白,是否能拿到播放清單,如果拿不到在重新初始化。

再者Android自身也提供一個MediaStore這樣一個Provider的屬性對象供我們開發利用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.