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控件系列之Toast使用介绍

    Android控件系列之Toast使用介绍

    Toast可以说是最常用也是最简单的Android控件之一,其自动关闭的功能大大简化了代码量,不失为用户提示的最佳选择
    2012-11-11
  • Android+Flutter实现彩虹图案的绘制

    Android+Flutter实现彩虹图案的绘制

    彩虹,是气象中的一种光学现象,当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱。接下来,我们就自己手动绘制一下彩虹图案吧
    2022-11-11
  • Android游戏开发学习②焰火绽放效果实现方法

    Android游戏开发学习②焰火绽放效果实现方法

    这篇文章主要介绍了Android游戏开发学习②焰火绽放效果实现方法,以实例形式详细分析了Android中粒子对象类Particle类和粒子集合类ParticleSet类及物理引擎ParticleThread类 的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android中Retrofit 2.0直接使用JSON进行数据交互

    Android中Retrofit 2.0直接使用JSON进行数据交互

    本篇文章主要介绍了Android中Retrofit 2.0直接使用JSON进行数据交互,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • Android studio 下JNI编程实例并生成so库的实现代码

    Android studio 下JNI编程实例并生成so库的实现代码

    这篇文章主要介绍了Android studio 下JNI编程实例并生成so库,需要的朋友可以参考下
    2017-09-09
  • Android实现短信加密功能(发送加密短信、解密本地短信)

    Android实现短信加密功能(发送加密短信、解密本地短信)

    这篇文章主要介绍了android实现短信加密功能的相关资料,功能包括发送加密短信、解密本地短信,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • android 多线程技术应用

    android 多线程技术应用

    能够在屏幕上“实时地显示”时间的流逝,单线程程序是无法实现的,必须要多线程程序才可以实现,即便有些计算机语言可以通过封装好的类实现这一功能,但从本质上讲这些封装好的类就是封装了一个线程,具体祥看本文
    2012-12-12
  • Android 自定义View步骤

    Android 自定义View步骤

    这篇文章主要介绍了Android 自定义View步骤 的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android 使用Vitamio打造自己的万能播放器(8)——细节优化

    Android 使用Vitamio打造自己的万能播放器(8)——细节优化

    本文主要介绍Android Vitamio开发播放器,这里给大家提供了一些小的细节优化,更加完善播放器的功能,希望能帮助有需要的小伙伴
    2016-07-07
  • Android学习之文件存储读取

    Android学习之文件存储读取

    本节给大家介绍的是Android数据存储与访问方式中的一个——文件存储与读写,当然除了这种方式外,我们可以存到SharedPreference,数据库, 或者ContentProvider中,当然这些后面都会讲,嗯,开始本文内容~
    2016-07-07

最新评论