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"/> ...
然后我们就可以看到运行结果了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Eclipse清除 SVN用户的方法