一、官方地址: https://x5.tencent.com/tbs/
二、不需要申请开发者,QQ直接登录,下载即可集成到项目中。
三、与原生的webview对比优势
1) 速度快:相比系统webview的网页打开速度有30+%的提升;
2) 省流量:使用云端优化技术使流量节省20+%;
3) 更安全:安全问题可以在24小时内修复;
4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
7) 功能全:在Html5、ES6上有更完整支持;
8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
9) 视频和文件格式的支持x5内核多于系统内核
10) 防劫持是x5内核的一大亮点
这个库解决了我纠结了两天的问题,当前做一个android播放网页视频的功能,视频申请的爱奇艺开放平台,使用原生的webview无法使爱奇艺官方接口反馈的h5页面中嵌套的视频全屏播放,如果这个问题不解决,这个功能我都准备取消了,原生的webview修改了n次,最后测试优酷/腾讯/搜狐这几个网站都你能全屏播放,但就是爱奇艺和另外两个就是步行,用了x5webview后这个问题解决了。爽!!!
四、代码
我这里播放全屏我只贴全屏部分的android代码。
1.为了提高第一次加载速度,在application里初始化
//初始化腾讯webx5 QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onViewInitFinished(boolean arg0) { // TODO Auto‐generated method stub // Log.d("app", " onViewInitFinished is " + arg0); } @Override public void onCoreInitFinished() { // TODO Auto‐generated method stub } }; //x5内核初始化接口 QbSdk.initX5Environment(getApplicationContext(), cb);
2.全屏代码
package com.lt.HappyMakeMoneryTreasure.UmengShare; import android.app.Activity; import android.content.res.Configuration; import android.graphics.PixelFormat; import android.os.Bundle; import android.view.View; import android.webkit.JavascriptInterface; import android.widget.Toast; import com.lt.HappyMakeMoneryTreasure.R; import com.lt.HappyMakeMoneryTreasure.UmengShare.WebViewJavaScriptFunction; public class FullScreenActivity extends Activity { X5WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.filechooser_layout); webView = (X5WebView) findViewById(R.id.web_filechooser); //http://www.bilibili.com/video/av14468189 //http://www.iqiyi.com/v_19rrh6morw.html //https://film.sohu.com/album/9398143.html?channeled=1300020002 webView.loadUrl("http://www.iqiyi.com/v_19rrh6morw.html"); getWindow().setFormat(PixelFormat.TRANSLUCENT); webView.getView().setOverScrollMode(View.OVER_SCROLL_ALWAYS); webView.addJavascriptInterface(new WebViewJavaScriptFunction() { @Override public void onJsFunctionCalled(String tag) { // TODO Auto-generated method stub String ok="adsafas"; String okaa="adsafas"; String ok1="adsafas"; String ok2="adsafas"; } @JavascriptInterface public void onX5ButtonClicked() { FullScreenActivity.this.enableX5FullscreenFunc(); } @JavascriptInterface public void onCustomButtonClicked() { FullScreenActivity.this.disableX5FullscreenFunc(); } @JavascriptInterface public void onLiteWndButtonClicked() { FullScreenActivity.this.enableLiteWndFunc(); } @JavascriptInterface public void onPageVideoClicked() { FullScreenActivity.this.enablePageVideoFunc(); } }, "Android"); } @Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub try { super.onConfigurationChanged(newConfig); if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { } } catch (Exception e) { e.printStackTrace(); } } // ///////////////////////////////////////// // 向webview发出信息 private void enableX5FullscreenFunc() { if (webView.getX5WebViewExtension() != null) { Toast.makeText(this, "开启X5全屏播放模式", Toast.LENGTH_LONG).show(); Bundle data = new Bundle(); data.putBoolean("standardFullScreen", false);// true表示标准全屏,false表示X5全屏;不设置默认false, data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true, data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1 webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data); } } private void disableX5FullscreenFunc() { if (webView.getX5WebViewExtension() != null) { Toast.makeText(this, "恢复webkit初始状态", Toast.LENGTH_LONG).show(); Bundle data = new Bundle(); data.putBoolean("standardFullScreen", true);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false, data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true, data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1 webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data); } } private void enableLiteWndFunc() { if (webView.getX5WebViewExtension() != null) { Toast.makeText(this, "开启小窗模式", Toast.LENGTH_LONG).show(); Bundle data = new Bundle(); data.putBoolean("standardFullScreen", false);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false, data.putBoolean("supportLiteWnd", true);// false:关闭小窗;true:开启小窗;不设置默认true, data.putInt("DefaultVideoScreen", 2);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1 webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data); } } private void enablePageVideoFunc() { if (webView.getX5WebViewExtension() != null) { Toast.makeText(this, "页面内全屏播放模式", Toast.LENGTH_LONG).show(); Bundle data = new Bundle(); data.putBoolean("standardFullScreen", false);// true表示标准全屏,会调起onShowCustomView(),false表示X5全屏;不设置默认false, data.putBoolean("supportLiteWnd", false);// false:关闭小窗;true:开启小窗;不设置默认true, data.putInt("DefaultVideoScreen", 1);// 1:以页面内开始播放,2:以全屏开始播放;不设置默认:1 webView.getX5WebViewExtension().invokeMiscMethod("setVideoParams", data); } } }
时间: 2024-10-04 05:35:48