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

 更新时间:2017年10月17日 08:55:10   作者:CharlinGod  
这篇文章主要介绍了Android开发实现的简单媒体播放器功能,结合实例形式分析了Android基于surfaceview实现多媒体视频及音频播放的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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实现文件下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Android Intent实现页面跳转的两种方法

    Android Intent实现页面跳转的两种方法

    这篇文章主要介绍了Android Intent实现页面跳转的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • gradle中的properties文件详解

    gradle中的properties文件详解

    这篇文章主要介绍了gradle中的properties文件详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Android实现列表时间轴

    Android实现列表时间轴

    这篇文章主要为大家详细介绍了Android实现列表时间轴效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android MediaPlayer 音频倍速播放 调整播放速度问题

    Android MediaPlayer 音频倍速播放 调整播放速度问题

    这篇文章主要介绍了Android MediaPlayer 音频倍速播放,调整播放速度,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • Android实战教程第五篇之一键锁屏应用

    Android实战教程第五篇之一键锁屏应用

    这篇文章主要为大家详细介绍了Android实战教程第五篇之一键锁屏应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android Application类的详细介绍

    Android Application类的详细介绍

    这篇文章主要介绍了Android Application类的详细介绍的相关资料,这里对Android Application的概念、作用、优点及其他注意事项进行了一一介绍,需要的朋友可以参考下
    2016-11-11
  • Android实现动态添加标签及其点击事件

    Android实现动态添加标签及其点击事件

    这篇文章主要为大家详细介绍了Android实现动态添加标签及其点击事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android Popupwindow弹出窗口的简单使用方法

    Android Popupwindow弹出窗口的简单使用方法

    这篇文章主要为大家详细介绍了Android Popupwindow弹出窗口的简单使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android SQLite数据库进行查询优化的方法

    Android SQLite数据库进行查询优化的方法

    这篇文章主要给大家介绍了关于Android SQLite数据库进行查询优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11

最新评论