Android多媒体-MediaPlayer使用方式

先不多说,直接上代码

public class SimpleMediaPlayerActivity extends Activity {

	//private static final Uri mMusicUri = Uri.fromFile(new File("/sdcard/sound_file_1.mp3"));
	private static final Uri mMusicUri = Uri.parse("http://czanxi.azone.artron.net/users_info/88/czanxi/2009121322260351292.mp3");
	private MediaPlayer mMediaPlayer = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		playMusic1();
	}

	/**
	 * 第一种方式,通过create创建
	 */
	private void playMusic1() {
		stopCurrentMediaPlayer();
		mMediaPlayer = MediaPlayer.create(this, mMusicUri);  //prepared
		mMediaPlayer.start(); // no need to call prepare(); create() does that for you
	}

	/**
	 * 第二种方式,通过new MediaPlayer()创建,通过prepare
	 */
	private void playMusic2() {
		stopCurrentMediaPlayer();
		mMediaPlayer = new MediaPlayer();  //idle
		mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
		try {
			mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri);
			mMediaPlayer.prepare();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		mMediaPlayer.start();
	}

	/**
	 * 第三种方式,通过new MediaPlayer()创建,通过prepareAsync
	 */
	private void playMusic3() {
		mMediaPlayer = new MediaPlayer()  ;
		mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)  ;
		mMediaPlayer.setOnPreparedListener(new OnPreparedListener()
		{
			@Override
			public void onPrepared(MediaPlayer mediaPlayer) {
				mediaPlayer.start()  ;
			}

		}) ;
		try {
			mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri);
			mMediaPlayer.prepareAsync()  ;//异步加载
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void onDestroy() {
		stopCurrentMediaPlayer();
		super.onDestroy();
	}

	private void stopCurrentMediaPlayer() {
		if (mMediaPlayer != null) {
			mMediaPlayer.stop();
			mMediaPlayer.release();
			mMediaPlayer = null;
		}
	}

}

第一种方式和二、三中的区别是:

new 之后是idle状态 ,create之后是 prepared状态。这也是为何我们在调用create之后不需要再手动调用prepare()方法去更改状态。

第一种、第二种和第三种的区别是:

前两种为同步方式,因为涉及到识别及解码等IO耗时操作,容易引起主线程堵塞。第三种为异步方式,不会引发此问题,推荐此方式。

Android多媒体-MediaPlayer使用方式

时间: 2024-10-11 11:48:15

Android多媒体-MediaPlayer使用方式的相关文章

Android多媒体-MediaPlayer唤醒锁及音频焦点

MediaPlayer的唤醒锁 一般使用MediaPlayer播放音频流,推荐使用一个Service来承载MediaPlayer,而不是直接在Activity里使用.可是Android系统的功耗设计里,为了节约电池消耗,假设设备处于睡眠状态.系统将试图减少或者关闭一些没设备必须的特性.包含CUP和Wifi硬件.然后,假设是一个后台播放音乐的应用,减少CUP可能导致在后台执行的时候干扰音频的正常播放.关闭Wifi将可能导致网络音频流的获取出现错误. 为了确保MediaPlayer的承载的服务在系统

【Android 多媒体开发】 MediaPlayer 网络视频播放器

作者 : 万境绝尘 ([email protected]) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38895143 一. 相关模块解析 1. 播放载体 SurfaceView 简介 (1) SurfaceView 与 Surface SurfaceView 与 Surface 简介 : SurfaceView 中嵌入了一个 Surface, SurfaceView 可以操控 Surface 的 位置, 大小尺寸等;

Android入门笔记 - 多媒体 - MediaPlayer

今天我们来写一个超级超级简单的播放器,使用到的是android自带的音乐播放器类MediaPlayer,先上一张效果图: 里面只实现了播放器额基本功能,界面就不做了,因为不是重点哈. 代码: 1. layout/ activty_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/

Android多媒体开发介绍(转)

Android多媒体开发介绍 转自:http://blog.csdn.net/reiliu/article/details/9060557 一.       多媒体架构 基于第三方PacketVideo公司的OpenCORE来实现,支持所有通用的音频/视频/静态图像格式,包括:MPEG4.H.264.MP3.AAC.AMR.JPG.PNG.GIF等.从功能上分为两部分,一是音/视频的回放(PlayBack),二是音视频的纪录(Recorder). CODEC(编解码器)使用OpenMAX 1L

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

Android多媒体-MediaRecorder 录制音视频

不多说,直接上代码,有详细注释 MyAudioRecord.java import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaRecorder

Android多媒体框架图

Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 Video Overlay框架图 Camera HAL演化图

Android多媒体整体架构图

Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 Video Overlay框架图 Camera HAL演化图

Android多媒体-播放多媒体时的前台服务

众所周知,一般我们将播放的逻辑都放入service当中,这样就能实现在后台继续播放音乐的功能.后台service被系统回收的概率相对来说比较低,但是这种情况也确实存在. 前台服务是那些被认为用户知道的并且在内存低的时候不允许系统杀死的服务.前台服务必须给状态栏提供一个通知,他被放到了"正在进行中(Ongoing)"标题之下,这就意味着直到这个服务被终止或从前台删除通知才能被解除. 例如,一个播放音乐的音乐播放器服务应该被设置在前台运行,因为用户明确的知道它们的操作.状态栏中的通知可能指