android MediaPlayer 简记
2015-06-10 08:03
549 查看
基本用法
1.开一个线程完成耗时操作
new Thread(){ public void run(){ initPlayer(i); } }.start();
开启MediaPlayer的时候,由于需要调用底层native方法做硬件初始化,所以直接把初始化方法放到线程中
2.开启操作
* 注意holder的创建,需要底层native函数反应,是异步事件
* player本身准备也要调用native函数,是异步事件
异步事件必须等待处理完毕后再使用相关方法,否则容易出现播不出来(黑屏)的现象
private void initPlayer(int i){ isTimeOut = false; //最好延时一下 try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } if(i >= videoPath.length){ return ; } if(TextUtils.isEmpty(videoPath[i])){ return; } try { //由于这个方法需要反复调用,每次reset复位 player.reset(); //设置要播放的资源 player.setDataSource(videoPath[i]); //准备播放 player.prepareAsync(); //获取一个holder, 内部应该是个异步事件,不能当下获取holder final SurfaceHolder holder = sfv.getHolder(); holder.addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); //******创建holder完延时一下 SystemClock.sleep(40); //此处如果直接设置holder,可能会导致异常,结果是没有办法载入画面 //player.setDisplay(holder); //等待底层工作完毕后 开始播放 player.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { if(isTimeOut == false){ //******硬件初始化完毕后******* //******最后再设置holder****** player.setDisplay(holder); //******开始播放********* player.start(); currentPosition = 0; //重置播放位置 ThreadUtils.runUIThread(new Runnable(){ @Override public void run() { pb_wait.setVisibility(View.GONE); //加载完毕后让View消失 } }); } } }); } catch (Exception e) { e.printStackTrace(); } }
3.暂停&继续
暂停
//计算当前进度条所在位置 currentPosition = player.getCurrentPosition(); int totle = player.getDuration(); sb_prograss.setProgress((int)((((float)currentPosition)/totle)*100)); //将当前进度赋值给进度条 //System.out.println("**********stop********"+currentPosition+"*********************"); player.pause();
继续
player.seekTo(currentPosition); player.start();
4.释放资源
player.stop(); player.release(); player = null; //最好把player置位为null
相关文章推荐
- android中调用支付宝
- [Android] Android开发优化之——使用软引用和弱引用
- Android注入框架你应该知道的一切------打造自己的注入框架
- Android 模拟器测试远程服务器成功,但是到真机上测试一点反应没有的解决办法
- android屏幕适配
- android 实践问题记录- 2015/06/09
- android:imeOptions属性
- android activity生命周期
- Android开源项目分类汇总
- Android之SQLiteOpenHelper
- 拒绝ndk-build (Android Native Development Kit)
- Android 编程下设置 Activity 切换动画
- Android 高仿 QQ5.0 侧滑菜单效果 HorizontalScrollView
- Android Activity活动1
- Android获取文件夹路径
- Android 属性动画(Property Animation) 完全解析 (上)
- Android 属性动画(Property Animation) 完全解析 (下)
- Android设备data目录下的文件在DDMS下的File Explorer读不到
- Android中定时执行任务的三种实现方法
- Android Studio编码问题