Android MediaPlayer 常用方法介绍
来源:互联网 发布:临沂软件开发培训 编辑:程序博客网 时间:2024/06/06 09:03
Android MediaPlayer 常用方法介绍
方法:create(Context context, Uri uri)
解释:静态方法,通过Uri创建一个多媒体播放器。
方法:create(Context context, int resid)
解释:静态方法,通过资源ID创建一个多媒体播放器
方法:create(Context context, Uri uri, SurfaceHolder holder)
解释:静态方法,通过Uri和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器
方法: getCurrentPosition()
解释:返回 Int, 得到当前播放位置
方法: getDuration()
解释:返回 Int,得到文件的时间
方法:getVideoHeight()
解释:返回 Int ,得到视频的高度
方法:getVideoWidth()
解释:返回 Int,得到视频的宽度
方法:isLooping()
解释:返回 boolean ,是否循环播放
方法:isPlaying()
解释:返回 boolean,是否正在播放
方法:pause()
解释:无返回值 ,暂停
方法:prepare()
解释:无返回值,准备同步
方法:prepareAsync()
解释:无返回值,准备异步
方法:release()
解释:无返回值,释放 MediaPlayer 对象
方法:reset()
解释:无返回值,重置 MediaPlayer 对象
方法:seekTo(int msec)
解释:无返回值,指定播放的位置(以毫秒为单位的时间)
方法:setAudioStreamType(int streamtype)
解释:无返回值,指定流媒体的类型
方法:setDataSource(String path)
解释:无返回值,设置多媒体数据来源【根据 路径】
方法:setDataSource(FileDescriptor fd, long offset, long length)
解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】
方法:setDataSource(FileDescriptor fd)
解释:无返回值,设置多媒体数据来源【根据 FileDescriptor】
方法:setDataSource(Context context, Uri uri)
解释:无返回值,设置多媒体数据来源【根据 Uri】
方法:setDisplay(SurfaceHolder sh)
解释:无返回值,设置用 SurfaceHolder 来显示多媒体
方法:setLooping(boolean looping)
解释:无返回值,设置是否循环播放
事件:setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListener listener)
解释:监听事件,网络流媒体的缓冲监听
事件:setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
解释:监听事件,网络流媒体播放结束监听
事件:setOnErrorListener(MediaPlayer.OnErrorListener listener)
解释:监听事件,设置错误信息监听
事件:setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
解释:监听事件,视频尺寸监听
方法:setScreenOnWhilePlaying(boolean screenOn)
解释:无返回值,设置是否使用 SurfaceHolder 显示
方法:setVolume(float leftVolume, float rightVolume)
解释:无返回值,设置音量
方法:start()
解释:无返回值,开始播放
方法:stop()
解释:无返回值,停止播放
MediaPlayer使用技巧
在使用MediaPlayer的使用过程中,有个小技巧需要说明一下:
1、在使用start()播放流媒体之前,需要装载流媒体资源。这里最好使用prepareAsync()用异步的方式装载流媒体资源。因为流媒体资源的装载是会消耗系统资源的,在一些硬件不理想的设备上,如果使用prepare()同步的方式装载资源,可能会造成UI界面的卡顿,这是非常影响用于体验的。因为推荐使用异步装载的方式,为了避免还没有装载完成就调用start()而报错的问题,需要绑定MediaPlayer.setOnPreparedListener()事件,它将在异步装载完成之后回调。异步装载还有一个好处就是避免装载超时引发ANR((Application Not Responding)错误。
01.
1 mediaPlayer = new MediaPlayer();
02.
2 mediaPlayer.setDataSource(path);
03.
3 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
04.
4
05.
5 // 通过异步的方式装载媒体资源
06.
6 mediaPlayer.prepareAsync();
07.
7 mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
08.
8 @Override
09.
9 public void onPrepared(MediaPlayer mp) {
10.
10 // 装载完毕回调
11.
11 mediaPlayer.start();
12.
12 }
13.
13 });
2、使用完MediaPlayer需要回收资源。MediaPlayer是很消耗系统资源的,所以在使用完MediaPlayer,不要等待系统自动回收,最好是主动回收资源。
1.
1
if
(mediaPlayer != null && mediaPlayer.isPlaying()) {
2.
2 mediaPlayer.stop();
3.
3 mediaPlayer.release();
4.
4 mediaPlayer = null;
5.
5 }
3、使用MediaPlayer最好使用一个Service来使用,并且在Service的onDestory()方法中回收MediaPlayer资源,实际上,就算是直接使用Activity承载MediaPlayer,也最好在销毁的时候判断一下MediaPlayer是否被回收,如果未被回收,回收其资源,因为底层调用的native方法,如果不销毁还是会在底层继续播放,而承载的组件已经被销毁了,这个时候就无法获取到这个MediaPlayer进而控制它。
01.
1 @Override
02.
2 protected void onDestroy() {
03.
3
if
(mediaPlayer != null && mediaPlayer.isPlaying()) {
04.
4 mediaPlayer.stop();
05.
5 mediaPlayer.release();
06.
6 mediaPlayer = null;
07.
7 }
08.
8 super.onDestroy();
09.
9 }
4、对于单曲循环之类的操作,除了可以使用setLooping()方法进行设置之外,还可以为MediaPlayer注册回调函数,MediaPlayer.setOnCompletionListener(),它会在MediaPlayer播放完毕被回调。
01.
1 // 设置循环播放
02.
2 // mediaPlayer.setLooping(
true
);
03.
3 mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
04.
4
05.
5 @Override
06.
6 public void onCompletion(MediaPlayer mp) {
07.
7 // 在播放完毕被回调
08.
8 play();
09.
9 }
10.
10 });
5、因为MediaPlayer一直操作的是一个流媒体,所以无可避免的可能一段流媒体资源,前半段可以正常播放,而中间一段因为解析或者源文件错误等问题,造成中间一段无法播放问题,需要我们处理这个错误,否则会影响Ux(用户体验)。可以为MediaPlayer注册回调函数setOnErrorListener()来设置出错之后的解决办法,一般重新播放或者播放下一个流媒体即可。
1.
1 mediaPlayer.setOnErrorListener(new OnErrorListener() {
2.
2
3.
3 @Override
4.
4 public boolean onError(MediaPlayer mp, int what, int extra) {
5.
5 play();
6.
6
return
false
;
7.
7 }
8.
8 });
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍 .
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- Android MediaPlayer 常用方法介绍
- MediaPlayer 常用方法介绍
- MediaPlayer 常用方法介绍
- MediaPlayer 常用方法介绍
- Android中MediaPlayer的常用方法
- android MediaPlayer 架构介绍
- Android Mediaplayer详细介绍
- android Mediaplayer各种属性和方法简单介绍
- 1008. Elevator (20)
- javaWeb 中web.xml详细配置
- Token ,Cookie和Session的区别--学习笔记
- c#中类的学习以及使用方法
- 为什么traceroute显示的路由和route显示的路由信息不一致?
- Android MediaPlayer 常用方法介绍
- 未来 3~5 年内,哪个方向的机器学习人才最紧缺?
- mybatis sql查询条件有时间时查询效率非常慢
- java线程池(三) Executors.newSingleThreadExecutor
- 浅析函数式编程与命令式编程的区别
- 使用babel转换 es6-- 其中一坑
- Java笔记——常用的格式控制符号和常用的忽略符号
- maven打包相关命令
- 数据结构实验之栈与队列一:进制转换