专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 多媒体设计

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

发布时间:2011-06-27 19:08:24 文章来源:www.iduyao.cn 采编人员:星星草
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开发案例驱动教程》
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • 3DMAX建模,该如何解决

    3DMAX建模 有哪问朋友可以做一个3DMAX的建模? 要求:熟悉3DMAX建模、可以到现场封闭1个月左右 地点:北京 费用:面谈 有意请与我联系:qyn...

  • 小弟我是新手,怎么做建筑动漫

    我是新手,如何做建筑动漫 请问一下动漫高手,我是动漫方面的新手,从那儿着手开始做建筑动漫,得学习哪些工具 ------解决方案---------...

  • 初学AE遇到的一个小疑点

    初学AE遇到的一个小问题! 图中的两个斜线怎么让它消失?就算是预览的时候都在!!!上面的字是Demo mode:Press "Options" to register....

  • 请教一下,纯3D的FLASH,需要什么软件做的

    请问一下,纯3D的FLASH,需要什么软件做的? 满有兴趣的,不知道需要哪些软件才能做, 有人讲直接在三D里面做,再用flash 来接起来的.?听说3D...

  • 问问opengl 和 3Dmax 还有maya的关系,该如何处理

    问问opengl 和 3Dmax 还有maya的关系 想问问 是不是 3D max 和maya 会取代opengl? 因为画三维图形, maya和 3dmax比 opengl 方便...

  • 能从.X文件中读取场景中物体信息么,该怎么处理

    能从.X文件中读取场景中物体信息么 比如说物体的名字,高度,类型,每个物体的贴图名字等等 ------解决方案-------------------- 物...

  • 动画制作,该怎么解决

    动画制作 要制作一个固体物理中的晶体形成的动画,求教,简单的动画 ------解决方案-------------------- 你是要教程还是要实例?...

  • 请问:3D人物动画有关问题

    请教:3D人物动画问题 我用poser7.0做了模型和几个动作比如微笑,摆手,点头等,我要在程序中使用这个模型和动作,模型保存的是3ds格式,动作...

  • 求名词解释 DirectX OpenGL 3Dmax Maya,该如何处理

    求名词解释 DirectX OpenGL 3Dmax Maya DirectX OpenGL 3Dmax Maya 求名词解释 这些软件之间有什么联系?什么区别? ------解决方...

  • 请问 怎么学好3ds max

    请教 如何学好3ds max 我是大二的学生,因为要做三维地图,要学习3ds max, 学习的主要是3ds max在建筑物建模的方面,求问有什么 好的方...

热门推荐: