android开发分享Android WebView实现全屏播放视频

目录介绍主要代码介绍最近项目开发中用到了webview播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里总结了一下,希望大家看到后不要再犯类似的错误,尽可能提高开发效率:

目录
  • 介绍
  • 主要代码

上述就是android开发分享Android WebView实现全屏播放视频的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

介绍

最近项目开发中用到了webview播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里总结了一下,希望大家看到后不要再犯类似的错误,尽可能提高开发效率:

这个demo我这里也参考了网上写的一个比较好的一个demo,经过总结修改,写出来的。

主要代码

以下是相应代码:

mainactivity:

  package com.androidwebviewdemo;     import android.app.activity;  import android.app.progressdialog;  import android.content.pm.activityinfo;  import android.os.bundle;  import android.util.log;  import android.view.keyevent;  import android.view.layoutinflater;  import android.view.view;  import android.view.window;  import android.view.windowmanager;  import android.webkit.webchromeclient;  import android.webkit.webchromeclient.customviewcallback;  import android.webkit.websettings;  import android.webkit.webview;  import android.webkit.webviewclient;  import android.widget.framelayout;     /**   * 使用webview播放视频时需要注意的地方:   * 1、加网络访问权限(及其他所需要的权限);    * 2、webviewclient中方法shouldoverrideurlloading可用来实现点击webview页面的链接;   * 3、webview中播放视频需要添加webview.setwebchromeclient(new webchromeclient());   * 4、视频竖屏时,点击全屏,想要切换到横屏全屏的状态,那么必须在manifest.xml配置文件该activity的   * 	配置文件中添加android:configchanges="orientation|screensize"语句。   * 5、如果视频不能播放,或者播放比较卡,可以采用硬件加速,即在application,或所在的activity的配置文件中添加   * 	android:hardwareaccelerated="true"即可。   * @author zhongyao   */  public class mainactivity extends activity {  	private webview webview;  	private framelayout video_fullview;// 全屏时视频加载view  	private view xcustomview;  	private progressdialog waitdialog = null;  	private customviewcallback xcustomviewcallback;  	private mywebchromeclient xwebchromeclient;     	@override  	protected void oncreate(bundle savedinstancestate) {  		super.oncreate(savedinstancestate);  		requestwindowfeature(window.feature_no_title);// 去掉应用标题  		getwindow().setflags(windowmanager.layoutparams.flag_fullscreen,  				windowmanager.layoutparams.flag_fullscreen);  		setcontentview(r.layout.activity_main);  		  		waitdialog = new progressdialog(this);  		waitdialog.settitle("提示");  		waitdialog.setmessage("视频页面加载中...");  		waitdialog.setindeterminate(true);  		waitdialog.setcancelable(true);  		waitdialog.show();     		webview = (webview) findviewbyid(r.id.webview);  		video_fullview = (framelayout) findviewbyid(r.id.video_fullview);     		websettings ws = webview.getsettings();  		ws.setbuiltinzoomcontrols(true);// 隐藏缩放按钮  		// ws.setlayoutalgorithm(websettings.layoutalgorithm.normal);// 排版适应屏幕     		ws.setusewideviewport(true);// 可任意比例缩放  		ws.setloadwithoverviewmode(true);// setusewideviewport方法设置webview推荐使用的窗口。setloadwithoverviewmode方法是设置webview加载的页面的模式。     		ws.setsavepassword(true);  		ws.setsaveformdata(true);// 保存表单数据  		ws.setjavascriptenabled(true);  		ws.setgeolocationenabled(true);// 启用地理定位  		ws.setgeolocationdatabasepath("/data/data/org.itri.html5webview/databases/");// 设置定位的数据库路径  		ws.setdomstorageenabled(true);  		ws.setsupportmultiplewindows(true);// 新加  		xwebchromeclient = new mywebchromeclient();  		webview.setwebchromeclient(xwebchromeclient);  		webview.setwebviewclient(new mywebviewclient());  		webview.loadurl("https://look.appjx.cn/mobile_api.php?mod=news&id=12604");  	}     	public class mywebviewclient extends webviewclient {  		@override  		public boolean shouldoverrideurlloading(webview view, string url) {  			view.loadurl(url);  			return false;  		}     		@override  		public void onpagefinished(webview view, string url) {  			super.onpagefinished(view, url);  			waitdialog.dismiss();  		}  	}     	public class mywebchromeclient extends webchromeclient {  		private view xprogressvideo;     		// 播放网络视频时全屏会被调用的方法  		@override  		public void onshowcustomview(view view, customviewcallback callback) {  			setrequestedorientation(activityinfo.screen_orientation_landscape);  			webview.setvisibility(view.invisible);  			// 如果一个视图已经存在,那么立刻终止并新建一个  			if (xcustomview != null) {  				callback.oncustomviewhidden();  				return;  			}  			video_fullview.addview(view);  			xcustomview = view;  			xcustomviewcallback = callback;  			video_fullview.setvisibility(view.visible);  		}     		// 视频播放退出全屏会被调用的  		@override  		public void onhidecustomview() {  			if (xcustomview == null)// 不是全屏播放状态  				return;     			setrequestedorientation(activityinfo.screen_orientation_portrait);  			xcustomview.setvisibility(view.gone);  			video_fullview.removeview(xcustomview);  			xcustomview = null;  			video_fullview.setvisibility(view.gone);  			xcustomviewcallback.oncustomviewhidden();  			webview.setvisibility(view.visible);  		}     		// 视频加载时进程loading  		@override  		public view getvideoloadingprogressview() {  			if (xprogressvideo == null) {  				layoutinflater inflater = layoutinflater  						.from(mainactivity.this);  				xprogressvideo = inflater.inflate(  						r.layout.video_loading_progress, null);  			}  			return xprogressvideo;  		}  	}     	/**  	 * 判断是否是全屏  	 *   	 * @return  	 */  	public boolean incustomview() {  		return (xcustomview != null);  	}     	/**  	 * 全屏时按返加键执行退出全屏方法  	 */  	public void hidecustomview() {  		xwebchromeclient.onhidecustomview();  		setrequestedorientation(activityinfo.screen_orientation_portrait);  	}     	@override  	protected void onresume() {  		super.onresume();  		super.onresume();  		webview.onresume();  		webview.resumetimers();     		/**  		 * 设置为横屏  		 */  		if (getrequestedorientation() != activityinfo.screen_orientation_landscape) {  			setrequestedorientation(activityinfo.screen_orientation_portrait);  		}  	}     	@override  	protected void onpause() {  		super.onpause();  		webview.onpause();  		webview.pausetimers();  	}     	@override  	protected void ondestroy() {  		super.ondestroy();  		super.ondestroy();  		video_fullview.removeallviews();  		webview.loadurl("about:blank");  		webview.stoploading();  		webview.setwebchromeclient(null);  		webview.setwebviewclient(null);  		webview.destroy();  		webview = null;  	}  	@override  	public boolean onkeydown(int keycode, keyevent event) {  		if (keycode == keyevent.keycode_back) {  			if (incustomview()) {  				// webviewdetails.loadurl("about:blank");  				hidecustomview();  				return true;  			} else {  				webview.loadurl("about:blank");  				mainactivity.this.finish();  			}  		}  		return false;  	}  }

activity_main.xml:

  <linearlayout xmlns:android="https://schemas.android.com/apk/res/android"      xmlns:tools="https://schemas.android.com/tools"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >         <framelayout          android:id="@+id/video_fullview"          android:layout_width="fill_parent"          android:layout_height="fill_parent"          android:visibility="gone" >      </framelayout>         <webview          android:id="@+id/webview"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_margintop="20sp" />     </linearlayout>

video_loading_progress.xml:

  <?xml version="1.0" encoding="utf-8"?>  <linearlayout xmlns:android="https://schemas.android.com/apk/res/android"      android:id="@+id/progress_indicator"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_centerinparent="true"      android:orientation="vertical" >         <progressbar          android:id="@android:id/progress"          style="?android:attr/progressbarstylelarge"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="center" />         <textview          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="center"          android:paddingtop="5dip"          android:text="正在玩命加载视频中。。。"          android:textcolor="?android:attr/textcolorprimary"          android:textsize="14sp" />     </linearlayout>

androidmanifest.xml:

  <?xml version="1.0" encoding="utf-8"?>  <manifest xmlns:android="https://schemas.android.com/apk/res/android"      package="com.androidwebviewdemo"      android:versioncode="1"      android:versionname="1.0" >         <uses-sdk          android:minsdkversion="8"          android:targetsdkversion="17" />         <uses-permission android:name="android.permission.internet" />      <uses-permission android:name="android.permission.access_coarse_location" />      <uses-permission android:name="android.permission.access_fine_location" />      <uses-permission android:name="android.permission.access_mock_location" />      <uses-permission android:name="android.permission.access_gps" />      <uses-permission android:name="android.permission.access_assisted_gps" />      <uses-permission android:name="android.permission.access_location" />  	<uses-permission android:name="android.permission.read_phone_state"/>      <application          android:allowbackup="true"          android:hardwareaccelerated="true"          android:icon="@drawable/ic_launcher"          android:label="@string/app_name"          android:theme="@style/apptheme" >             <!-- android:configchanges="orientation|keyboardhidden" -->          <!-- 默认竖屏,点击全屏后再横屏,           	那么activity必须配置android:configchanges="orientation|screensize"  			这样一来,旋转屏幕,只会调用onconfigurationchanged,不会创建新activity。  			不然的话,代码中设置横屏的时候,都会新建一个activity,  			那样就没办法实现点击就横屏全屏了。 -->          <activity              android:name="com.androidwebviewdemo.mainactivity"              android:configchanges="orientation|screensize"              android:label="@string/app_name" >              <intent-filter>                  <action android:name="android.intent.action.main" />                     <category android:name="android.intent.category.launcher" />              </intent-filter>          </activity>      </application>     </manifest>

以上就是android webview实现全屏播放视频的详细内容,更多关于android webview播放视频的资料请关注<计算机技术网(www.ctvol.com)!!>其它相关文章!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/975804.html

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐