您的位置:首页 > 其它

MediaPlayer的使用

2015-12-01 20:52 423 查看
游戏中的背景音乐用到了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 exception
e.printStackTrace();
}

//这里是回调的实现
OnPreparedListener preparedListener = new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
Toast.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:当我们new出MediaPlayer对象的时候,这个对象就处于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状态:
对错误的处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mediaplayer