MediaPlayer的使用

来源:互联网 发布:经传软件吧 编辑:程序博客网 时间:2024/06/05 21:15

游戏中的背景音乐用到了MediaPlayer。使用MediaPlayer播放背景音乐有2中方法,一种是通过create来创建MediaPlayer对象,一种是通过new来创建对象,通过create创建出来的对象,不需要对音乐进行prepare,通过new创建的则需要进行prepare操作。然后就是,new创建的对象可以随意设置其资源路径,可以在SD卡也可以在其他地方,也可以是网络上的资源,但是,create创建的对象,在创建的时候就需要指出resid(资源ID)。所以,在开发中,具体使用哪种方法还得看具体的需求。

下面看下具体的实现:

通过new来创建:

MediaPlayer  mpMediaPlayer = new MedaiPlayer();try {mpMediaPlayer.setDataSource("/sdcard/gsls.mp3");mpMediaPlayer.setOnPreparedListener(preparedListener);mpMediaPlayer.prepareAsync();//prepare也有两种方法,这里用的是添加了异步回调的方法,////mpMediaPlayer.setOnPreparedListener(preparedListener);//上面的代码设置了回调函数//当然也可以直接prepare,不调用回调方法//mpMediaPlayer.prepare();} catch (IllegalStateException e) {// TODO: handle exception//Log.e("load_music", "加载音乐失败");e.printStackTrace();}catch (IOException e) {// TODO: handle exceptione.printStackTrace();}

//这里是回调的实现OnPreparedListener preparedListener = new OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {// TODO Auto-generated method stubToast.makeText(getBaseContext(), "音乐加载完毕", Toast.LENGTH_SHORT).show();}};

create方法创建

mpMediaPlayer =MediaPlayer.create(this, R.raw.gsls);

只调用者一句话就行了,

就是这么简单,但是,其实看create的源码可以发现,实际上create只是对new进行了一层封装,所以,更灵活的使用还是应该使用new的方法创建对象。

create源码:

public static MediaPlayer create(Context context, int resid) {        try {            AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);            if (afd == null) return null;//这里还是使用了new的方法            MediaPlayer mp = new MediaPlayer();            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());            afd.close();            mp.prepare();            return mp;        } catch (IOException ex) {            Log.d(TAG, "create failed:", ex);            // fall through        } catch (IllegalArgumentException ex) {            Log.d(TAG, "create failed:", ex);           // fall through        } catch (SecurityException ex) {            Log.d(TAG, "create failed:", ex);            // fall through        }        return null;    }

 

上面介绍了MediaPlayer的创建,下面说下MediaPlayer的使用。

1.十种状态:

a.Idle:当我们newMediaPlayer对象的时候,这个对象就处于idle状态,或者,当我们调用reset方法的时候,对象也会回到这个状态。这个状态其实是,资源还未加载的状态,如果,我们想要播放音乐,那么,我们还需要对对象进行初始(Initialized)和资源的准备(Prepared)

2.End状态:

这种状态下,我们的MediaPlayer对象也就没用了,在这种状态下,我们不能对这个对象进行任何操作了。关于这个对象的一切都结束了。通过release方法可以是独享进入这个状态,当我们对象没有用的时候,我们应该及时的调用release,清除其所占的内存空间。

3.Initialized状态:

初始化状态,这个状态对应的方法是setDataSource,我们在调用这个方法的时候,也就进入了这个状态,从这个状态可以到prepare状态,调用prepare方法就OK了。prepare有两种方法,一种就是prepare,另一种是prepareAsyc,第二种对应的是另外一种状态,preparing

4.Prepared状态:

资源准备完毕,可以随时进入start状态了。

5.Preparing状态:

异步加载,需要添加回调,完成后进入prepared状态,-

6.Started状态:

播放状态,进行了创建,初始化,准备资源,这个时候我们就能播放音乐了,这也是我们的主要目的。直接用对象调用start方法就好了。

7.Pause状态:

这个状态不用多少,暂停状态,只有started状态能转到Pause状态,调用pause方法就OK了。

8.Stop状态:

停止播放状态,prepared后才能进入stop状态,同样,在stop状态要想重新播放音乐,也需要重新回到prepare状态。

9.PlaybackCompleted状态:

音乐播放完毕,当音乐播放完毕,而且没有设定循环的话,则进入这个状态。

10.Error状态:

对错误的处理。


0 0
原创粉丝点击