腾讯X5浏览器简单使用
前言:
Android中的WebView一直是令人头疼的问题,各种手机内核不一致,版本也不一样,型号众多,导致兼容不好做,自从使用X5WebView,兼容和版本适配问题得到很大提升,本文将给X5WebView出接入的指南.
1.X5内核的好处:
1)速度快:相比系统webview的网页打开速度有30+%的提升; 2)省流量:使用云端优化技术使流量节省20+%; 3) 更安全:安全问题可以在24小时内修复; 4)更稳定:经过亿级用户的使用考验,CRASH率低于0.15%; 5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题; 6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能; 7) 功能全:在Html5、ES6上有更完整支持; 8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview; 9) 视频和文件格式的支持x5内核多于系统内核 10) 防劫持是x5内核的一大亮点
2.下载SDK,将jar文件放到工程的libs目录下,源码和XML里的系统包和类替换为SDK里的包和类,
2.1 腾讯X5浏览器sdk下载地址:
腾讯浏览服务-SDK下载
2.2 不过我采用的是远程依赖的方式进行加载,因为jar集成有时加载不成功,后面sdk版本升级更换也很麻烦,采用依赖的方式只需要替换最新版本号即可,它自己会慢慢下载.
2.3 app目录下的build.gradle配置如下:
dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'androidx.appcompat:appcompat:1.1.0'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'implementation "com.tencent.tbs.tbssdk:sdk:43697"}
3. 目前sdk不支持64位的手机cpu,需要如下配置:
ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }
4.添加权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
5.初始化:
/** /* @作者: njb /* @时间: 2019/11/8 10:18 /* @描述: */ public class App extends Application { private static App mInstance; @Override public void onCreate() { super.onCreate(); mInstance = this; initX5WebView(); } private void initX5WebView(){ QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onViewInitFinished(boolean arg0) { // TODO Auto-generated method stub //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 Log.d("app", " onViewInitFinished is " + arg0); } @Override public void onCoreInitFinished() { // TODO Auto-generated method stub } }; //x5内核初始化接口 QbSdk.initX5Environment(getApplicationContext(), cb); } public static App getmInstance() { return mInstance; } }
6.基本使用:
/** /* @作者: njb /* @时间: 2019/11/8 10:32 /* @描述: 用于演示X5webView的基本使用 */ public class X5WebViewActivity extends Activity { private X5WebView webView; private TextView textView; //private String url = "https://1111.tmall.com/"; //private String url = "https://h5.m.taobao.com/"; private String url = "https://www.jd.com/"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.filechooser_layout); initWebView(); initListener(); } private void initWebView() { webView = findViewById(R.id.web_filechooser); textView = findViewById(R.id.tv_open); webView.loadUrl(url); } private void initListener() { textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openFileChooseProcess(); } }); } /** /* 打开文件管理器 */ private void openFileChooseProcess() { Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("application/vnd.ms-excel"); //i.setType("*/*"); startActivityForResult(Intent.createChooser(i, "test"), 0); } /** /* 确保注销配置能够被释放 */ @Override protected void onDestroy() { // TODO Auto-generated method stub if (this.webView != null) { webView.destroy(); } super.onDestroy(); } }
7.X5WebView基类封装:
/** /* @作者: njb /* @时间: 2019/11/8 10:32 /* @描述: WebView基类 */ public class X5WebView extends WebView { private static final String TAG = "XWebView"; private WebSettings webSettings; private WebViewClient client = new WebViewClient() { /** /* 防止加载网页时调起系统浏览器 */ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageStarted(WebView webView, String s, Bitmap bitmap) { super.onPageStarted(webView, s, bitmap); webSettings.setBlockNetworkImage(true); Log.d(TAG, " onPageStart " + s + "------------"); } @Override public void onPageFinished(WebView webView, String s) { super.onPageFinished(webView, s); Log.d(TAG," onPageFinished " + s + "----------"); webSettings.setBlockNetworkImage(false); if (!webSettings.getLoadsImagesAutomatically()) { //设置wenView加载图片资源 webSettings.setBlockNetworkImage(false); webSettings.setLoadsImagesAutomatically(true); } } }; public X5WebView(Context arg0, AttributeSet arg1) { super(arg0, arg1); this.setWebViewClient(client); initWebViewSettings(); this.getView().setClickable(true); } @SuppressLint("SetJavaScriptEnabled") private void initWebViewSettings() { webSettings = this.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setAllowFileAccess(true); webSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); webSettings.setSupportZoom(true); webSettings.setBuiltInZoomControls(true); webSettings.setUseWideViewPort(true); webSettings.setSupportMultipleWindows(true); webSettings.setAppCacheEnabled(true); //开启数据库形式存储 webSettings.setDatabaseEnabled(true); //开启Dom形式存储 webSettings.setDomStorageEnabled(true); webSettings.setGeolocationEnabled(true); webSettings.setAppCacheMaxSize(Long.MAX_VALUE); webSettings.setPluginState(WebSettings.PluginState.ON_DEMAND); webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //缓存数据的存储地址 String appCacheDir = App.getmInstance().getDir("cache", Context.MODE_PRIVATE).getPath(); webSettings.setAppCachePath(appCacheDir); //开启缓存功能 webSettings.setAppCacheEnabled(true); //缓存模式 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webSettings.setAllowFileAccess(true); } public X5WebView(Context arg0) { super(arg0); setBackgroundColor(85621); } }
8.播放视频:
/** /* @作者: njb /* @时间: 2019/11/8 10:32 /* @描述: 用于演示X5webView实现视频的全屏播放功能 其中注意 X5的默认全屏方式 与 android 系统的全屏方式 */ public class FullScreenPlayerActivity extends Activity { X5WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.filechooser_layout); webView = findViewById(R.id.web_filechooser); webView.loadUrl("https://static.chuangyetianxia.com/study/3/media/5d4a6cb2bc78215651585786907.mp4"); 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 } @JavascriptInterface public void onX5ButtonClicked() { FullScreenPlayerActivity.this.enableX5FullscreenFunc(); } @JavascriptInterface public void onCustomButtonClicked() { FullScreenPlayerActivity.this.disableX5FullscreenFunc(); } @JavascriptInterface public void onLiteWndButtonClicked() { FullScreenPlayerActivity.this.enableLiteWndFunc(); } @JavascriptInterface public void onPageVideoClicked() { FullScreenPlayerActivity.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); } } }
9.以上就是X5WebView的简单使用,大家有好的想法可以提出,一起交流学习,写得不好,还望指正。
10.项目源码地址:
X5WebViewDemo: 腾讯X5内核使用实例
腾讯X5浏览器简单使用相关推荐
- Android 项目集成腾讯X5浏览器内核
1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...
- android 腾讯x5浏览器,【Android Web】腾讯X5浏览器的集成与常见问题
前言 近年来,混合开发也越来越用的更多,而原生webview的各种坑,比如说 上传图片.文件问题.视频全屏问题(什么在微信上打开都是好的,你这怎么全屏不了).版本差异问题,所以还是建议使用腾讯x5浏览 ...
- 腾讯X5 浏览器内核加载
1.腾讯X5浏览器 sdk 官网 地址 腾讯浏览服务 2.腾讯X5 浏览器 sdk 加载 需要内存卡权限 加载成功率才高,因为有了内存读取权限,可以读取腾讯QQ 和微信的X5 内核,共用他们的内核,不 ...
- Android集成腾讯X5浏览器内核库
Android集成腾讯X5浏览器内核库 一.相关配置 1. 相关地址 2.引入SDK 3. AndroidManifest配置 二.Application中初始化内核 三.代码实现 1. 自定义带Pr ...
- android安卓接入腾讯X5浏览器内核TBS基本使用,配置腾讯TBS
更多其他页面-自定义View-实用功能合集:点击查看 使用腾讯Tbs,会导致上架google应用商城失败! 关于X5内核的一些bug解决,可以查看这些文章: 链接: 解决bug. 安卓原生webvie ...
- 腾讯X5浏览器的学习研究
1.为什么要使用腾讯x5 最近,在开发过程中遇到一些问题,比如在玛氏项目,遇到的视频兼容性问题,以及在泛海电子发票的开发中,遇到webview无法加载word文档,以及PDF文件,而此时x5的出现,很 ...
- android webview第三方框架,Android 中使用第三方 WebView,腾讯X5浏览器
由于Android自带的webview,在低于4.3的手机上面不支持socket,因此寻求其他的解决方案,第一次应用中尝试加入Crosswallk,应用的体积整整大了40M,倒是也可以正常使用,app ...
- Android接入腾讯X5浏览器内核
技术特性 腾讯浏览服务是致力于优化移动端webview体验的整套解决方案.该方案由SDK.手机QQ浏览器X5内核和X5云端服务组成,解决移动端webview使用过程中出现的一切问题,优化用户的浏览体验 ...
- 安卓 简单集成腾讯X5 浏览器
由于安卓本身的浏览器已经满足不了开发的需求(背景 是在火热的H5技术时代),本身的不管是webkit 还是Googlekit 都会出现问题,大部分的H5 都会分享到朋友圈,而鹅厂的移动端浏览器 就显 ...
最新文章
- 受用一生的高效 PyCharm 使用技巧(六)
- C#winform无响应,界面线程崩溃问题
- Request.InputStream 将数据作为XML数据发送
- oracle生成42位,Oracle HowTo:如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
- Daily Report 2012.11.9 刘宇翔
- python数据结构与算法分析_数据结构和算法分析
- [Java] 蓝桥杯ALGO-148 算法训练 5-1最小公倍数
- FreeImage 结合 VB6 使用技巧
- PHP程序员进阶学习书籍参考指南
- 收集 - 实际开发中的技巧记录【页面】
- 3.PS 缩小放大、移动、选区工具
- 简易计算机系统综合设计--函数发生器
- 超信咋老是显示服务器不可用,超信创始人自述:微信是很强大 但我们敢叫板
- 百度地图api将可视区域定位到当前所在位置
- [OpenCV] 练习题实现代码 使用 cv.addWeighted 函数在文件夹中创建图像的幻灯片放映,并在图像之间进行平滑过渡
- 自动化控制重要国际学术会议
- Android开发详解之App升级程序一点通
- java计算机毕业设计基于springboo+vue的共享单车自行车管理系统
- 关于微信聊天中的语音开发
- Canny算法中的非极大值抑制