欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

Android开发实现的简单媒体播放器功能示例

时间:2021-01-21 10:52:20|栏目:Android代码|点击:

本文实例讲述了Android开发实现的简单媒体播放器功能。分享给大家供大家参考,具体如下:

一、概述:

因为播放视频需要很大的内存,所以必须使用surfaceview ,

surfaceview 里实现了双缓冲的功能,

二、全部代码:

/**
 * @描述     使用surfaceview 创建视频
 * @项目名称   App_Basic
 * @包名     com.example.basic.media
 * @类名     MediaPlayerActivity
 * @author   chenlin
 * @date    2013-3-25 上午7:36:32
 * @version   1.0
 */
public class MediaPlayerActivity extends BaseActivity {
  private MediaPlayer mPlayer;
  private Button mBtnPlay;
  private Button mBtnPause;
  private SurfaceView mSurfaceView;
  private int mCurrentPosition;
  private SeekBar seekBar;
  private boolean isPlaying;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSurfaceView = new SurfaceView(this);
    seekBar = new SeekBar(this);
    seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
      @Override
      public void onStopTrackingTouch(SeekBar seekBar) {
        int progress = seekBar.getProgress();
        if (mPlayer != null && isPlaying) {
          mPlayer.seekTo(progress);
        }
      }
      @Override
      public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
      }
      @Override
      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        // TODO Auto-generated method stub
      }
    });
    mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    mSurfaceView.getHolder().addCallback(new Callback() {
      @Override
      public void surfaceDestroyed(SurfaceHolder holder) {
        if (mPlayer!= null && mPlayer.isPlaying()) {
          mCurrentPosition = mPlayer.getCurrentPosition();
          stop();
        }
      }
      @Override
      public void surfaceCreated(SurfaceHolder holder) {
        if (mCurrentPosition > 0) {
          play(mCurrentPosition);
        }
      }
      @Override
      public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // TODO Auto-generated method stub
      }
    });
  }
  public void play(final int currentPosition){
    try {
      mPlayer = new MediaPlayer();
      mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
      Uri myUri = Uri.fromFile(new File("sdcard/mp3/1.mp3"));
      mPlayer.setDataSource(getApplicationContext(), myUri);
      mPlayer.setLooping(true);
      mPlayer.setDisplay(mSurfaceView.getHolder());
      mPlayer.prepareAsync();
      //mPlayer.prepare();
      mBtnPlay.setEnabled(false);
      mPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
          mBtnPlay.setEnabled(true);
          mPlayer.release();
        }
      });
      mPlayer.setOnErrorListener(new OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
          mBtnPlay.setEnabled(true);
          mPlayer.release();
          isPlaying = false;
          return false;
        }
      });
      mPlayer.setOnPreparedListener(new OnPreparedListener() {
        public void onPrepared(MediaPlayer mp) {
          mPlayer.start();
          mPlayer.seekTo(currentPosition);
          seekBar.setMax(mPlayer.getDuration());
          new Thread(new Runnable() {
            @Override
            public void run() {
              isPlaying = true;
              while(isPlaying){
                seekBar.setProgress(mPlayer.getCurrentPosition());
                SystemClock.sleep(500);
              }
            }
          });
        }
      });
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void pause(){
    if ("接续".equals(mBtnPause.getText().toString())) {
      mBtnPause.setText("暂停");
      mPlayer.start();
      return;
    }
    if (mPlayer != null && mPlayer.isPlaying()) {
      mPlayer.pause();
      mBtnPause.setText("继续");
      return;
    }
  }
  public void reset(){
    if (mPlayer != null && mPlayer.isPlaying()) {
      mPlayer.seekTo(0);
      return;
    }
    play(0);
  }
  public void stop(){
    if (mPlayer != null && mPlayer.isPlaying()) {
      mPlayer.stop();
      mPlayer.release();
      mPlayer = null;
      mBtnPlay.setEnabled(true);
      isPlaying = false;
    }
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

上一篇:Android空心圆及层叠效果实现代码

栏    目:Android代码

下一篇:Android RecyclerView实现水平、垂直方向分割线

本文标题:Android开发实现的简单媒体播放器功能示例

本文地址:http://www.codeinn.net/misctech/48702.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有