MediaPlayer的使用
2015-12-01 20:52
423 查看
游戏中的背景音乐用到了MediaPlayer。使用MediaPlayer播放背景音乐有2中方法,一种是通过create来创建MediaPlayer对象,一种是通过new来创建对象,通过create创建出来的对象,不需要对音乐进行prepare,通过new创建的则需要进行prepare操作。然后就是,new创建的对象可以随意设置其资源路径,可以在SD卡也可以在其他地方,也可以是网络上的资源,但是,create创建的对象,在创建的时候就需要指出resid(资源ID)。所以,在开发中,具体使用哪种方法还得看具体的需求。
下面看下具体的实现:
通过new来创建:
//这里是回调的实现
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源码:
上面介绍了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状态:
对错误的处理。
下面看下具体的实现:
通过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 在线播放器代码
- 深入Android MediaPlayer的使用方法详解
- Android提高之MediaPlayer播放网络视频的实现方法
- Android开发之MediaPlayer多媒体(音频,视频)播放工具类
- Android提高之MediaPlayer播放网络音频的实现方法
- Android提高之MediaPlayer音视频播放
- 网络播放 MediaPlayer: Prepare failed status 0x1
- MediaPlayer
- 相对完美的后台Service实现播放音乐功能
- 使用Vitamio播放rtsp流媒体并实现动态截图
- android-----简单的音乐播放器
- Android的VideoView如何循环播放
- Android_视频播放的简单使用方法
- android语音聊天
- mediaplayer stop called in state 1
- android app小白试水4-添加mediaplayer
- IOS获取本地音乐
- SurfaceView+MediaPlayer实现视频播放
- Android中软解码和硬解码的优先级
- android mp3进度条