MyException - 我的异常网
当前位置:我的异常网» 多媒体设计 » Android多媒体开发-资源文件播发

Android多媒体开发-资源文件播发

www.MyException.Cn  网友分享于:2013-07-02  浏览:14次
Android多媒体开发--资源文件播放
     播放音频文件。按照音频文件来源不同可以分为:资源文件播放、系统播放文件和网络文件播放。
     资源文件播放是放在“<工程>/res/raw”,然后发布的时候被打成APK包一起安装在手机上。很显然这种方式不适合用于播放娱乐为主的多媒体文件,由于娱乐的多媒体文件是经常更新的,而放置在这个raw下面的文件用户是没有权限更新的,因此这种方式一般用于应用自己的一些音频和视频播放,如按键音、开机启动音、信息提示音等应用使用的声音。
    下面看看播放资源音频文件的代码请参考代码清单12-1,完整代码请参考Chapter12_1工程中AudioPlayer代码部分。
【代码清单12-1】
public class AudioPlayer extends Activity {

	private ImageButton play;
	private ImageButton stop;
	private MediaPlayer mMediaPlayer;
	private int state = IDLE;
	private static final int PLAYING = 0;
	private static final int PAUSE = 1;
	private static final int STOP = 2;
	private static final int IDLE = 3;

	public static final int UPDATE = 2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.audio_player);

		// 初始化播放按钮
		play = (ImageButton) findViewById(R.id.play);
		play.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				if (state == PLAYING) {
					pause();
				} else {
					start();
				}
			}
		});

		// 初始化停止按钮
		stop = (ImageButton) findViewById(R.id.stop);
		stop.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				stop();
			}
		});

		// 开始播放歌曲
		play();
	}

	private void pause() {
		if (mMediaPlayer.isPlaying()) {
			mMediaPlayer.pause();
			state = PAUSE;
		}
		play.setImageResource(R.drawable.play);

	}

	private void start() {
		if (state == STOP) {
			play();
		} else if (state == PAUSE) {
			mMediaPlayer.start();
			state = PLAYING;
		}
		play.setImageResource(R.drawable.pause);
	}

	private void stop() {
		mMediaPlayer.stop();
		state = STOP;
		play.setImageResource(R.drawable.play);
	}

	// MediaPlayer进入prepared状态开始播放
	private OnPreparedListener preListener = new OnPreparedListener() {
		public void onPrepared(MediaPlayer arg0) {
			mMediaPlayer.start();
			state = PLAYING;
		}

	};

	private void play() {
		try {
			if (mMediaPlayer == null || state == STOP) {
				// 创建MediaPlayer对象并设置Listener
				mMediaPlayer = MediaPlayer.create(this, R.raw.ma_mma);
				mMediaPlayer.setOnPreparedListener(preListener);
			} else {
				// 复用MediaPlayer对象
				mMediaPlayer.reset();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面的代码只是实现了播放、暂停、停止功能,下一首、上一首和进度控制条的功能没有实现。文件放在raw目录下面调用play()方法实现了播放功能,mMediaPlayer = MediaPlayer.create(this, R.raw.ma_mma)是创建MediaPlayer,通过mMediaPlayer.setOnPreparedListener(preListener)设置了OnPreparedListener监听器,它是监听文件预处理完成之后事件。
private void play() {
		try {
			if (mMediaPlayer == null || state == STOP) {
				// 创建MediaPlayer对象并设置Listener
				mMediaPlayer = MediaPlayer.create(this, R.raw.ma_mma);
				mMediaPlayer.setOnPreparedListener(preListener);
			} else {
				// 复用MediaPlayer对象
				mMediaPlayer.reset();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

预处理完成之后MediaPlayer进入prepared状态,调用start()方法是播放媒体文件方法,同时把播放标志设置为PLAYING状态。
private OnPreparedListener preListener = new OnPreparedListener() {
		public void onPrepared(MediaPlayer arg0) {
			mMediaPlayer.start();
			state = PLAYING;
		}
	};

播放流程如图12-5所示。



图12-5播放流程

下面是暂停功能播放实现,MediaPlayer的pause()方法实现了媒体暂停,并把标志设定为PAUSE。
private void pause() {
		if (mMediaPlayer.isPlaying()) {
			mMediaPlayer.pause();
			state = PAUSE;
		}
		play.setImageResource(R.drawable.play);

	}

下面是停止功能播放实现,MediaPlayer的stop()方法实现了媒体停止,并把标志设定为STOP。

private void stop() {
		mMediaPlayer.stop();
		state = STOP;
		play.setImageResource(R.drawable.play);
	}

                                  出自《Andorid开发案例驱动教程》

文章评论

初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
一个程序员的时间管理
一个程序员的时间管理
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员应该关注的一些事儿
程序员应该关注的一些事儿
我是如何打败拖延症的
我是如何打败拖延症的
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
Java程序员必看电影
Java程序员必看电影
为什么程序员都是夜猫子
为什么程序员都是夜猫子
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员都该阅读的书
程序员都该阅读的书
老程序员的下场
老程序员的下场
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
鲜为人知的编程真相
鲜为人知的编程真相
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
那些争议最大的编程观点
那些争议最大的编程观点
代码女神横空出世
代码女神横空出世
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
每天工作4小时的程序员
每天工作4小时的程序员
编程语言是女人
编程语言是女人
程序员的鄙视链
程序员的鄙视链
总结2014中国互联网十大段子
总结2014中国互联网十大段子
如何成为一名黑客
如何成为一名黑客
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员和编码员之间的区别
程序员和编码员之间的区别
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
中美印日四国程序员比较
中美印日四国程序员比较
漫画:程序员的工作
漫画:程序员的工作
程序员必看的十大电影
程序员必看的十大电影
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
旅行,写作,编程
旅行,写作,编程
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
10个调试和排错的小建议
10个调试和排错的小建议
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有