先创建布局页面activity_media_player_video.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MediaPlayerVideoActivity"> <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="播放" /> <Button android:id="@+id/btn_pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="暂停" /> <Button android:id="@+id/btn_stop" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="停止" /> </LinearLayout> </LinearLayout>
效果比较简单 主要是实现功能:
MediaPlayerVideoActivity代码如下:
具体注释已经在代码中给出
public class MediaPlayerVideoActivity extends AppCompatActivity implements View.OnClickListener { private SurfaceView surfaceView; private Button btn_play,btn_pause,btn_stop; //三个播放按钮 分别为播放,暂停,停止 private MediaPlayer mediaPlayer; //媒体播放器对象 private SurfaceHolder holder; private boolean isPlay = true; //定义视频的播放状态 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_player_video); surfaceView = findViewById(R.id.surfaceView); btn_play = findViewById(R.id.btn_play); btn_play.setOnClickListener(this); btn_pause = findViewById(R.id.btn_pause); btn_pause.setOnClickListener(this); btn_stop = findViewById(R.id.btn_stop); btn_stop.setOnClickListener(this); //获取SurfaceHolder对象 holder = surfaceView.getHolder(); //创建MediaPlayer对象 mediaPlayer = new MediaPlayer(); //设置多媒体类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置完成事件监听器 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Toast.makeText(MediaPlayerVideoActivity.this, "视频播放完成!", Toast.LENGTH_SHORT).show(); } }); } @Override public void onClick(View v) { switch (v.getId()){ //播放,继续播放的按钮 case R.id.btn_play: if (isPlay){ play(); //调用play播放视频 isPlay = false; //表示视频处于播放状态 }else { mediaPlayer.start(); //继续播放视频 } break; //暂停播放视频 case R.id.btn_pause: if (mediaPlayer.isPlaying()){ mediaPlayer.pause(); //暂停播放 } break; //停止播放视频 后如果再次点击播放视频按钮 则视频是从头播放 case R.id.btn_stop: if (mediaPlayer.isPlaying()){ mediaPlayer.stop(); //停止播放 isPlay = true; //表示视频没有处于播放状态 } break; default: break; } } //播放视频的方法 public void play(){ try { mediaPlayer.reset(); //重置mediaPlayer mediaPlayer.setDisplay(holder); //把视频画面输出到surfaceView //设置要播放的视频 mediaPlayer.setDataSource(Environment.getExternalStorageDirectory()+"/video.mp4"); mediaPlayer.prepare(); //预加载 mediaPlayer.start(); //播放视频 }catch (Exception e){ e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer!=null){ if (mediaPlayer.isPlaying()){ mediaPlayer.stop(); //停止播放视频 } mediaPlayer.release(); //释放资源 } } }
我这个是播放本地视频所以要在AndroidManifest.xml清单文件中加入允许访问SD卡的权限:
<!--允许访问SD卡的权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" tools:ignore="ProtectedPermissions" />
这个功能到此就结束了~