欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-05 15:42:16
如果你看过我的《android音乐播放简单实现(mediaplayer)》,那么本篇将会毫无压力。 首先是主界面的三个按钮和一个播放控件

如果你看过我的《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"/>
...

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

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

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

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