关于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> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值