当前位置: 移动技术网 > 移动技术>移动开发>Android > android视频播放简单实现示例(VideoView&MediaPlayer)

android视频播放简单实现示例(VideoView&MediaPlayer)

2019年07月24日  | 移动技术网移动技术  | 我要评论

如果你看过我的《android音乐播放简单实现(mediaplayer)》,那么本篇将会毫无压力。

首先是主界面的三个按钮和一个播放控件

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context="com.cofox.myplayvideo.mainactivity">

 <linearlayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal">

  <button
   android:id="@+id/btnplay"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="play"
   android:textallcaps="false" />

  <button
   android:id="@+id/btnpause"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="pause"
   android:textallcaps="false" />

  <button
   android:id="@+id/btnreplay"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_weight="1"
   android:text="replay"
   android:textallcaps="false" />
 </linearlayout>
 <videoview
  android:id="@+id/vdvwfilm"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" />

</linearlayout>

在 mainactivity.java 中这里需要用到的是 videoview 作为视频播放时的显示位置。

 private videoview videoview;

在 oncreate 里,对界面的按钮和显示位置实例化,并检查权限。

videoview = (videoview)findviewbyid(r.id.vdvwfilm);
  button btnplay = (button)findviewbyid(r.id.btnplay);
  button btnpause = (button)findviewbyid(r.id.btnpause);
  button btnreplay = (button)findviewbyid(r.id.btnreplay);

  btnplay.setonclicklistener(this);
  btnpause.setonclicklistener(this);
  btnreplay.setonclicklistener(this);

  if(contextcompat.checkselfpermission(mainactivity.this, manifest.permission.write_external_storage) != packagemanager.permission_granted){
   activitycompat.requestpermissions(mainactivity.this, new string[]{manifest.permission.write_external_storage}, 1);
  }else {
   initvideopath();//初始化mediaplayer
  }

用一个单独的方法 initvideopath() 来实现视频播放初始化

 private void initvideopath() {
  file file = new file(environment.getexternalstoragedirectory(), "movie2.mp4");
  videoview.setvideopath(file.getpath());//指定视频文件路径
  videoview.setonpreparedlistener(new mediaplayer.onpreparedlistener() {
   @override
   public void onprepared(mediaplayer mp) {
    mp.setlooping(true);//让电影循环播放
   }
  });
 }

onrequestpermissionsresult 中对权限的取得结果进行判断,并针对性操作。如果获得了权限,就执行初始化;如果没有获得权限,就提示用户。

 @override
 public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) {
  switch (requestcode){
   case 1:
    if(grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted){
     initvideopath();
    }else{
     toast.maketext(this, "拒绝权限,无法使用程序。", toast.length_long).show();
     finish();
    }
    break;
   default:
    break;
  }
 }

在一个 onclick 方法中,统一处理 play(播放)、pause(暂停)、replay(重新播放)的逻辑。

 @override
 public void onclick(view v) {
  switch (v.getid()){
   case r.id.btnplay:
    if(!videoview.isplaying()){
     videoview.start();//播放
    }
    break;
   case r.id.btnpause:
    if(videoview.isplaying()){
     videoview.pause();//暂停
    }
    break;
   case r.id.btnreplay:
    if(videoview.isplaying()){
     videoview.resume();//重新播放
    }
    break;
  }
 }

执行完毕,释放所有资源。

 @override
 protected void ondestroy() {
  super.ondestroy();
  if(videoview != null){
   videoview.suspend();
  }
 }

完整代码示例:

package com.cofox.myplayvideo;

import android.manifest;
import android.content.pm.packagemanager;
import android.media.mediaplayer;
import android.os.environment;
import android.provider.mediastore;
import android.support.annotation.nonnull;
import android.support.v4.app.activitycompat;
import android.support.v4.content.contextcompat;
import android.support.v4.os.environmentcompat;
import android.support.v7.app.appcompatactivity;
import android.os.bundle;
import android.view.view;
import android.widget.button;
import android.widget.toast;
import android.widget.videoview;

import java.io.file;

public class mainactivity extends appcompatactivity implements view.onclicklistener {

 private videoview videoview;

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);

  videoview = (videoview)findviewbyid(r.id.vdvwfilm);
  button btnplay = (button)findviewbyid(r.id.btnplay);
  button btnpause = (button)findviewbyid(r.id.btnpause);
  button btnreplay = (button)findviewbyid(r.id.btnreplay);

  btnplay.setonclicklistener(this);
  btnpause.setonclicklistener(this);
  btnreplay.setonclicklistener(this);

  if(contextcompat.checkselfpermission(mainactivity.this, manifest.permission.write_external_storage) != packagemanager.permission_granted){
   activitycompat.requestpermissions(mainactivity.this, new string[]{manifest.permission.write_external_storage}, 1);
  }else {
   initvideopath();//初始化mediaplayer
  }
 }

 private void initvideopath() {
  file file = new file(environment.getexternalstoragedirectory(), "movie2.mp4");
  videoview.setvideopath(file.getpath());//指定视频文件路径
  videoview.setonpreparedlistener(new mediaplayer.onpreparedlistener() {
   @override
   public void onprepared(mediaplayer mp) {
    mp.setlooping(true);//让电影循环播放
   }
  });
 }

 @override
 public void onrequestpermissionsresult(int requestcode, @nonnull string[] permissions, @nonnull int[] grantresults) {
  switch (requestcode){
   case 1:
    if(grantresults.length > 0 && grantresults[0] == packagemanager.permission_granted){
     initvideopath();
    }else{
     toast.maketext(this, "拒绝权限,无法使用程序。", toast.length_long).show();
     finish();
    }
    break;
   default:
    break;
  }
 }

 @override
 public void onclick(view v) {
  switch (v.getid()){
   case r.id.btnplay:
    if(!videoview.isplaying()){
     videoview.start();//播放
    }
    break;
   case r.id.btnpause:
    if(videoview.isplaying()){
     videoview.pause();//暂停
    }
    break;
   case r.id.btnreplay:
    if(videoview.isplaying()){
     videoview.resume();//重新播放
    }
    break;
  }
 }

 @override
 protected void ondestroy() {
  super.ondestroy();
  if(videoview != null){
   videoview.suspend();
  }
 }
}

在 androidmanifest.xml 中配置相应的权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.cofox.myplayvideo">
 <uses-permission android:name="android.permission.write_external_storage"/>
...

然后我们就可以看到运行结果了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网