在前文中我們介紹了在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的屬性對象供我們開發利用。