Android MediaPlayer应用及代码分享
--------------------------------------------------------------------------------------------------------------------------------------
Android MediaPlayer应用
1、MediaPlayer方法
--------------------------------------------------------------------------------------------------------------------------------------
(1) MediaPlayer创建
直接调用构造函数,利用setDataSource方法设置资源。
MediaPlayer mp = new MediaPlayer(); // path可以是本地路径,也可以是网络地址 mp.setDataSource(String path);
--------------------------------------------------------------------------------------------------------------------------------------
调用create方法,create方法会直接调用prepare方法。
MediaPlayer.create(Context context, int resid) MediaPlayer.create(Context context, Uri uri)
--------------------------------------------------------------------------------------------------------------------------------------
(2) MediaPlayer的控制方法
prepare/prepareAsync:提供了同步和异步两种方式设置播放器进入prepare状态 start:启动播放器播放 pause:暂停播放器播放 stop:停止播放器播放 getCurrentPosition:当前播放器的时间 seekTo:从指定位置开始播放 release:释放播放器暂用资源 reset:是播放器重回到Idle状态 setLooping:设置是否循环播放
(3) MediaPlayer的监听器
OnPreparedListener:prepare/prepareAsync结束时调用 OnCompletionListener:播放结束时调用 OnSeekCompleteListener:seekTo结束时调用
(4) MediaPlayer状态间的转换
2、MediaPlayer播放音频
在onCreate方法中创建MediaPlayer,在onDestroy方法中销毁。
public class MediaPlayerAudioActivity extends Activity implements View.OnClickListener { private MediaPlayer mMediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_player_audio); findViewById(R.id.btn_create).setOnClickListener(this); findViewById(R.id.btn_start).setOnClickListener(this); findViewById(R.id.btn_pause).setOnClickListener(this); findViewById(R.id.btn_stop).setOnClickListener(this); mMediaPlayer = new MediaPlayer(); MediaPlayerListener listener = new MediaPlayerListener(); mMediaPlayer.setOnPreparedListener(listener); mMediaPlayer.setOnCompletionListener(listener); } @Override protected void onDestroy() { super.onDestroy(); mMediaPlayer.release(); mMediaPlayer = null; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_create: createMediaPlayer(); case R.id.btn_start: startMediaPlayer(); break; case R.id.btn_pause: pauseMediaPlayer(); break; case R.id.btn_stop: stopMediaPlayer(); break; } } private void createMediaPlayer() { mMediaPlayer.reset(); String filePath = "/sdcard/demo.mp3"; try { mMediaPlayer.setDataSource(filePath); mMediaPlayer.prepare(); mMediaPlayer.start(); } catch (IOException e) { } } private void startMediaPlayer() { try { mMediaPlayer.start(); } catch (IllegalStateException e) { } } private void pauseMediaPlayer() { try { mMediaPlayer.pause(); } catch (IllegalStateException e) { } } public void stopMediaPlayer() { try { mMediaPlayer.stop(); } catch (IllegalStateException e) { } } private class MediaPlayerListener implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener { @Override public void onPrepared(MediaPlayer mp) { Toast.makeText(MediaPlayerAudioActivity.this, "onPrepared", Toast.LENGTH_LONG).show(); } @Override public void onCompletion(MediaPlayer mp) { Toast.makeText(MediaPlayerAudioActivity.this, "onCompletion", Toast.LENGTH_LONG).show(); } } }
--------------------------------------------------------------------------------------------------------------------------------------
3、MediaPlayer播放视频
MediaPlayer要和SurfaceView配合播放视频,控制的方法和音频相同。 在SurfaceView的SurfaceHolder中添加一个回调类Callback,在Callback.surfaceCreated方法中调用MediaPlayer的setDisplay方法。
SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.surface_view); SurfaceHolder holder = mSurfaceView.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { createMediaPlayer(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { stopMediaPlayer(); } }); private void createMediaPlayer() { mMediaPlayer.reset(); String filePath = "/sdcard/viedo.3pg"; try { mMediaPlayer.setDataSource(filePath); mMediaPlayer.prepare(); mMediaPlayer.setDisplay(mSurfaceView.getHolder()); mMediaPlayer.start(); } catch (IOException e) { } }
--------------------------------------------------------------------------------------------------------------------------------------
小奋斗文章
--------------------------------------------------------------------------------------------------------------------------------------
评论