關於mediaPlayer的正確使用

package com.android.test;

import java.io.File;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

public class ShenMediaPlayerDemo extends Activity {
	private Button mb1, mb2, mb3;
	private TextView tv;
	private MediaPlayer mp; // 聲明一個變量判斷是否爲暫停,默認爲false
	private boolean isPaused = false;
	private String sdFile;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 通過findViewById找到資源
		mb1 = (Button) findViewById(R.id.myButton1);
		mb2 = (Button) findViewById(R.id.myButton2);
		mb3 = (Button) findViewById(R.id.myButton3);
		tv = (TextView) findViewById(R.id.myTextView1);
		// 創建MediaPlayer對象,將raw文件夾下的test_cbr.mp3
		// mp = MediaPlayer.create(this, R.raw.test_cbr);
		// 如果直接讀取資源raw之中,則無需
		// mp.setDataSource(sdFile + File.separator+ "music/test.mp3");
        // mp.prepare();

		// mp3等音樂放在SDCard中  sdcard文件夾之中
		sdFile = getSDPath();//
		this.mp = new MediaPlayer();
  
		// 增加播放音樂按鈕的事件
		mb1.setOnClickListener(new ImageButton.OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					if (mp != null && mp.isPlaying()) {//正在播放,則start無效,不會重新開始
						return;
					}
					mp.reset();
					mp.setDataSource(sdFile + File.separator
							+ "sdcard/test.mp3");

					mp.prepare();
					mp.start();
					tv.setText("音樂播放中...");
				} catch (Exception e) {
					tv.setText("播放MP3異常");
					e.printStackTrace();
				}
			}
		});
		mb2.setOnClickListener(new ImageButton.OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					if (mp != null&&mp.isPlaying()) {//正在播放,則stop有效,並且可以繼續start
						mp.stop();
						tv.setText("音樂停止播放...");
					}
				} catch (Exception e) {
					tv.setText("停止異常");
					e.printStackTrace();
				}
			}
		});
		mb3.setOnClickListener(new ImageButton.OnClickListener() {
			@Override
			public void onClick(View v) {
				try {
					if (mp != null) {
						if (isPaused == false&&mp.isPlaying()) {
							mp.pause();
							isPaused = true;
							tv.setText("暫停播放!");
						} else if (isPaused == true&&!mp.isPlaying()) {
							mp.start();
							isPaused = false;
							tv.setText("重新播發!");
						}
					}
				} catch (Exception e) {
					tv.setText("暫停異常");
					e.printStackTrace();
				}
			}
		});
		/* 當MediaPlayer.OnCompletionLister會運行的Listener */
		mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
			// @Override /*覆蓋文件播出完畢事件*/
			public void onCompletion(MediaPlayer arg0) {
				try {
					/*
					 * 解除資源與MediaPlayer的賦值關係 * 讓資源可以爲其它程序利用
					 */
					mp.release();
					/* 改變TextView爲播放結束 */
					tv.setText("音樂播發結束!");
				} catch (Exception e) {
					tv.setText("onCompletion" + e.toString());
					e.printStackTrace();

				}
			}
		});
		/* 當MediaPlayer.OnErrorListener會運行的Listener */
		mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
			@Override
			/* 覆蓋錯誤處理事件 */
			public boolean onError(MediaPlayer arg0, int arg1, int arg2) { // TODO
				try {
					/* 發生錯誤時也解除資源與MediaPlayer的賦值 */
					mp.release();
					tv.setText("播放過程中出現異常!");
				} catch (Exception e) {
					e.printStackTrace();
				}
				return false;
			}
		});
	}
	
    /**
     * back按鍵,音樂停止,釋放對象
     */
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			mp.stop();
			mp.release();
			this.finish();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
	
	
	/**
	 * 獲取SD卡路徑,不建議寫死路徑
	 * 
	 * @return eg:"/mnt/sdcard"
	 */
	public String getSDPath() {
		File sdDir = null;
		boolean sdCardExist = Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED); // 判斷sd卡是否存在
		if (sdCardExist) {
			sdDir = Environment.getExternalStorageDirectory();// 獲取跟目錄
			return sdDir.toString();
		} else {
			return null;
		}

	}
}

 main.xml
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent"
  android:orientation="vertical">  
     <TextView     
    android:id="@+id/myTextView1"     
    android:layout_width="wrap_content"     
    android:layout_height="wrap_content"    
    android:text="@string/hello" />  
       <Button    
       android:id="@+id/myButton1"    
       android:layout_width="wrap_content"   
       android:layout_height="wrap_content"    
       android:text="start" />  
       <Button     
       android:id="@+id/myButton3"    
       android:layout_width="wrap_content"    
       android:layout_height="wrap_content"   
       android:text="pause"  />  
       <Button
       android:id="@+id/myButton2"    
       android:layout_width="wrap_content"   
       android:layout_height="wrap_content"  
       android:text="stop"/>
</LinearLayout> 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章