目录

简单的使用腾讯X5内核浏览器替代Android原生的WebView

第一步:X5官网下载SDK,引入到AndroidStudio中

第二步:如果是64位CPU手机,则需要引入一个so(liblbs.so),注意只有armeabi/armeabi-v7,千万不要引入像arme64等同arme的

第三步:代码层:

最后、本人的实例调试代码


简单的使用腾讯X5内核浏览器替代Android原生的WebView

官网地址:https://x5.tencent.com

理由:腾讯X5加载更多,显示更好,很多用原生WebView无法兼容从而无法显示的图片、页面基本都可以使用,微信、QQ的HTML加载都是用QQ浏览器X5内核的

第一步:X5官网下载SDK,引入到AndroidStudio中

第二步:如果是64位CPU手机,则需要引入一个so(liblbs.so),注意只有armeabi/armeabi-v7,千万不要引入像arme64等同arme的

作用是:把64位的软件统一转成32位打包运行

第三步:代码层:

1、MyAppplication

package com.telit.x5;import android.app.Application;
import android.util.Log;import com.tencent.smtt.sdk.QbSdk;/*** author: qzx* Date: 2019/8/7 18:54*/
public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {@Overridepublic void onViewInitFinished(boolean arg0) {// TODO Auto-generated method stub//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。Log.e("zbv", " onViewInitFinished is " + arg0);}@Overridepublic void onCoreInitFinished() {// TODO Auto-generated method stub}};//x5内核初始化接口QbSdk.initX5Environment(getApplicationContext(), cb);}
}

二、BrowerActivity[官网示例代码,把视频播放的砍掉了,重点看加了注释的代码]

package com.telit.x5;import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Process;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.Toast;import com.telit.x5.utils.x5.X5WebView;
import com.tencent.smtt.export.external.interfaces.IX5WebChromeClient.CustomViewCallback;
import com.tencent.smtt.export.external.interfaces.JsResult;
import com.tencent.smtt.sdk.CookieSyncManager;
import com.tencent.smtt.sdk.DownloadListener;
import com.tencent.smtt.sdk.ValueCallback;
import com.tencent.smtt.sdk.WebChromeClient;
import com.tencent.smtt.sdk.WebSettings;
import com.tencent.smtt.sdk.WebView;
import com.tencent.smtt.sdk.WebViewClient;
import com.tencent.smtt.utils.TbsLog;import java.net.MalformedURLException;
import java.net.URL;public class BrowserActivity extends Activity {/*** 作为一个浏览器的示例展示出来,采用android+web的模式*/private X5WebView mWebView;private ViewGroup mViewParent;private ImageButton mBack;private ImageButton mForward;private ImageButton mExit;private ImageButton mHome;private ImageButton mMore;private Button mGo;private EditText mUrl;private static final String mHomeUrl = "http://119.3.243.43:8089/pptpage/qwfl/index.html";//    private static final String mHomeUrl = "http://app.html5.qq.com/navi/index";private static final String TAG = "SdkDemo";private static final int MAX_LENGTH = 14;private boolean mNeedTestPage = false;private final int disable = 120;private final int enable = 255;private ProgressBar mPageLoadingProgressBar = null;private ValueCallback<Uri> uploadFile;private URL mIntentUrl;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setFormat(PixelFormat.TRANSLUCENT);Intent intent = getIntent();if (intent != null) {try {mIntentUrl = new URL(intent.getData().toString());} catch (MalformedURLException e) {e.printStackTrace();} catch (NullPointerException e) {} catch (Exception e) {}}//try {if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 11) {getWindow().setFlags(android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);}} catch (Exception e) {}/** getWindow().addFlags(* android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN);*/setContentView(R.layout.activity_browser);mViewParent = (ViewGroup) findViewById(R.id.webView1);initBtnListenser();mTestHandler.sendEmptyMessageDelayed(MSG_INIT_UI, 10);}private void changGoForwardButton(WebView view) {if (view.canGoBack())mBack.setAlpha(enable);elsemBack.setAlpha(disable);if (view.canGoForward())mForward.setAlpha(enable);elsemForward.setAlpha(disable);if (view.getUrl() != null && view.getUrl().equalsIgnoreCase(mHomeUrl)) {mHome.setAlpha(disable);mHome.setEnabled(false);} else {mHome.setAlpha(enable);mHome.setEnabled(true);}}private void initProgressBar() {mPageLoadingProgressBar = (ProgressBar) findViewById(R.id.progressBar1);// new// ProgressBar(getApplicationContext(),// null,// android.R.attr.progressBarStyleHorizontal);mPageLoadingProgressBar.setMax(100);mPageLoadingProgressBar.setProgressDrawable(this.getResources().getDrawable(R.drawable.color_progressbar));}private void init() {mWebView = new X5WebView(this, null);mViewParent.addView(mWebView, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,FrameLayout.LayoutParams.FILL_PARENT));initProgressBar();mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {return false;}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);// mTestHandler.sendEmptyMessage(MSG_OPEN_TEST_URL);mTestHandler.sendEmptyMessageDelayed(MSG_OPEN_TEST_URL, 5000);// 5s?if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 16)changGoForwardButton(view);/* mWebView.showLog("test Log"); */}});mWebView.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onJsConfirm(WebView arg0, String arg1, String arg2,JsResult arg3) {return super.onJsConfirm(arg0, arg1, arg2, arg3);}View myVideoView;View myNormalView;CustomViewCallback callback;mWebView.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String arg0, String arg1, String arg2,String arg3, long arg4) {TbsLog.d(TAG, "url: " + arg0);new AlertDialog.Builder(BrowserActivity.this).setTitle("allow to download?").setPositiveButton("yes",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {Toast.makeText(BrowserActivity.this,"fake message: i'll download...",Toast.LENGTH_LONG).show();}}).setNegativeButton("no",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubToast.makeText(BrowserActivity.this,"fake message: refuse download...",Toast.LENGTH_SHORT).show();}}).setOnCancelListener(new DialogInterface.OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {// TODO Auto-generated method stubToast.makeText(BrowserActivity.this,"fake message: refuse download...",Toast.LENGTH_SHORT).show();}}).show();}});WebSettings webSetting = mWebView.getSettings();webSetting.setAllowFileAccess(true);webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);webSetting.setSupportZoom(true);webSetting.setBuiltInZoomControls(true);webSetting.setUseWideViewPort(true);webSetting.setSupportMultipleWindows(false);// webSetting.setLoadWithOverviewMode(true);webSetting.setAppCacheEnabled(true);// webSetting.setDatabaseEnabled(true);webSetting.setDomStorageEnabled(true);webSetting.setJavaScriptEnabled(true);webSetting.setGeolocationEnabled(true);webSetting.setBlockNetworkImage(false);webSetting.setAppCacheMaxSize(Long.MAX_VALUE);webSetting.setAppCachePath(this.getDir("appcache", 0).getPath());webSetting.setDatabasePath(this.getDir("databases", 0).getPath());webSetting.setGeolocationDatabasePath(this.getDir("geolocation", 0).getPath());// webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);// webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);// webSetting.setPreFectch(true);long time = System.currentTimeMillis();//使用前先判断X5内核是否加载好了,是否可用if (mWebView.getX5WebViewExtension() != null) {Toast.makeText(this, "已加载X5内核", Toast.LENGTH_SHORT).show();if (mIntentUrl == null) {mWebView.loadUrl(mHomeUrl);} else {mWebView.loadUrl(mIntentUrl.toString());}} else {//加载内核失败主要原因应该是64位手机整合liblbs的so的问题,还有可能就是内核因为特殊情况没有加载的情况,这种就是进入调试模式,手动下载内核,见官网手册mWebView.loadUrl("https://debugtbs.qq.com/");Toast.makeText(this, "抱歉,X5内核未加载", Toast.LENGTH_SHORT).show();return;}TbsLog.d("time-cost", "cost time: "+ (System.currentTimeMillis() - time));CookieSyncManager.createInstance(this);CookieSyncManager.getInstance().sync();}private void initBtnListenser() {mBack = (ImageButton) findViewById(R.id.btnBack1);mForward = (ImageButton) findViewById(R.id.btnForward1);mExit = (ImageButton) findViewById(R.id.btnExit1);mHome = (ImageButton) findViewById(R.id.btnHome1);mGo = (Button) findViewById(R.id.btnGo1);mUrl = (EditText) findViewById(R.id.editUrl1);mMore = (ImageButton) findViewById(R.id.btnMore);if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 16) {mBack.setAlpha(disable);mForward.setAlpha(disable);mHome.setAlpha(disable);}mHome.setEnabled(false);mBack.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mWebView != null && mWebView.canGoBack())mWebView.goBack();}});mForward.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mWebView != null && mWebView.canGoForward())mWebView.goForward();}});mGo.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String url = mUrl.getText().toString();mWebView.loadUrl(url);mWebView.requestFocus();}});mMore.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(BrowserActivity.this, "not completed",Toast.LENGTH_LONG).show();}});mUrl.setOnFocusChangeListener(new OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (hasFocus) {mGo.setVisibility(View.VISIBLE);if (null == mWebView.getUrl())return;if (mWebView.getUrl().equalsIgnoreCase(mHomeUrl)) {mUrl.setText("");mGo.setText("首页");mGo.setTextColor(0X6F0F0F0F);} else {mUrl.setText(mWebView.getUrl());mGo.setText("进入");mGo.setTextColor(0X6F0000CD);}} else {mGo.setVisibility(View.GONE);String title = mWebView.getTitle();if (title != null && title.length() > MAX_LENGTH)mUrl.setText(title.subSequence(0, MAX_LENGTH) + "...");elsemUrl.setText(title);InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(v.getWindowToken(), 0);}}});mUrl.addTextChangedListener(new TextWatcher() {@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stubString url = null;if (mUrl.getText() != null) {url = mUrl.getText().toString();}if (url == null|| mUrl.getText().toString().equalsIgnoreCase("")) {mGo.setText("请输入网址");mGo.setTextColor(0X6F0F0F0F);} else {mGo.setText("进入");mGo.setTextColor(0X6F0000CD);}}@Overridepublic void beforeTextChanged(CharSequence arg0, int arg1,int arg2, int arg3) {// TODO Auto-generated method stub}@Overridepublic void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {// TODO Auto-generated method stub}});mHome.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mWebView != null)mWebView.loadUrl(mHomeUrl);}});mExit.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Process.killProcess(Process.myPid());}});}boolean[] m_selected = new boolean[]{true, true, true, true, false,false, true};@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if (mWebView != null && mWebView.canGoBack()) {mWebView.goBack();if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 16)changGoForwardButton(mWebView);return true;} elsereturn super.onKeyDown(keyCode, event);}return super.onKeyDown(keyCode, event);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {TbsLog.d(TAG, "onActivityResult, requestCode:" + requestCode+ ",resultCode:" + resultCode);if (resultCode == RESULT_OK) {switch (requestCode) {case 0:if (null != uploadFile) {Uri result = data == null || resultCode != RESULT_OK ? null: data.getData();uploadFile.onReceiveValue(result);uploadFile = null;}break;default:break;}} else if (resultCode == RESULT_CANCELED) {if (null != uploadFile) {uploadFile.onReceiveValue(null);uploadFile = null;}}}@Overrideprotected void onNewIntent(Intent intent) {if (intent == null || mWebView == null || intent.getData() == null)return;mWebView.loadUrl(intent.getData().toString());}@Overrideprotected void onDestroy() {if (mTestHandler != null)mTestHandler.removeCallbacksAndMessages(null);if (mWebView != null)mWebView.destroy();super.onDestroy();}public static final int MSG_OPEN_TEST_URL = 0;public static final int MSG_INIT_UI = 1;private final int mUrlStartNum = 0;private int mCurrentUrl = mUrlStartNum;private Handler mTestHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case MSG_OPEN_TEST_URL:if (!mNeedTestPage) {return;}String testUrl = "file:///sdcard/outputHtml/html/"+ Integer.toString(mCurrentUrl) + ".html";if (mWebView != null) {mWebView.loadUrl(testUrl);}mCurrentUrl++;break;case MSG_INIT_UI:init();break;}super.handleMessage(msg);}};}

最后、本人的实例调试代码

链接:https://pan.baidu.com/s/1ncOA0sHcg6WCa2CPxMQmyg 
提取码:7dks 

简单的使用腾讯X5内核浏览器替代Android原生的WebView相关推荐

  1. android 腾讯x5内核 浏览器

    1.浏览器内核: 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史) 浏览器内核历史介绍: 在android 4.4之前,浏览器用的还是webkit 在android 4.4之后,google就抛 ...

  2. android腾讯x5播放器,腾讯x5内核浏览器WebView调起微信支付,以及实现x5内核视频播放...

    1.新建项目在app目录下新建文件夹libs,用于导入腾讯内核jar依赖包 图片发自简书App 2.main目录下新建jniLibs文件夹,用于存放x5内核的.so文件,播放视频用. 图片发自简书Ap ...

  3. Android 抛弃原生WebView,使用腾讯X5内核、并加入广告拦截。

    大家都不知道原生的WebView 存在各种坑.各种适配问题. 最近在使用,总会出现DNS被拦截的情况.预览了各个大神的论坛与博客. 发现可以更改WebView内核.找到了比较火的两个. 分别是:腾讯X ...

  4. 基于腾讯x5内核的精简版浏览器

    X5Browser github地址 https://github.com/iamlocky/X5Browser 基于腾讯x5内核的精简版浏览器 适用于需要单独的页面显示web内容,官方webview ...

  5. 腾讯x5加载本地html乱码,腾讯X5内核播放器遇到的问题

    最近在写一个和视频有关的项目,用到了腾讯x5内核的webview.利用webview调用本地js文件来播放视频.事情本身很顺利,但是在过程中遇到了一些小插曲,在此记录一下. 1.去除播放器中的广告 正 ...

  6. Android的WebView如何播放视频和全屏视频(腾讯X5内核)

    WebView如何播放视频和全屏视频 前言 1. 接入SDK 2. 具体场景和代码实现 3. 踩坑 3.1 android.system.ErrnoException: chmod failed: E ...

  7. 腾讯X5内核 在线视频播放 使用说明 By Terry

    在线播放视频是一个很常用的功能.但有的视频文件格式不统一,具体播放功能实现起来可能会遇到各种问题!!怎么办?直接第三方,又简单又好用. X5内核集成了HTML5的一些特效功能以及在线播放功能,这里先重 ...

  8. android内核网络缓存,Android WebView cache 缓存 腾讯X5内核在线视频播放

    [实例简介] Android WebView cache 缓存 腾讯X5内核在线视频播放 [实例截图] [核心代码] Terry007 └── Terry007 ├── AndroidManifest ...

  9. x5内核 ajax base64,腾讯X5内核 WebView 实践篇

    基于腾讯 X5 内核的WebView开发: 1.onPageFinished 2.onProgressChanged() 3.合适的时机获取页面元素 业务需求是在 html 中注入 js脚本实现阅读模 ...

最新文章

  1. project项目管理案例_福清公司开展Project项目管理软件学习培训活动
  2. Linux环境安装JDK
  3. c语言从集合中随机选取一个值,从集合中挑选一个随机元素
  4. 《XNA高级编程:Xbox 360和Windows》3-6
  5. “~/” 代表应用程序根目录的一点误区
  6. php输出语句echo、print、print_r、printf、sprintf、var_dump比较
  7. MongoDB 数据库管理(不定时更新)
  8. zk4android,zk4 复刻实战有感
  9. cad2020打印样式放在哪个文件夹_CAD图纸管理与打印——布局与图纸集
  10. 短信平台通道搭建 wed网页版源码构架 路由通道多线搭建 后台管理系统的架构
  11. 通过ODC方法改善软件测试:3个案例研究
  12. lnmp下配置PHP虚拟主机vhost
  13. 【转】ORA-28040: 没有匹配的验证协议
  14. PHP的页面布局怎样设计
  15. Java中基本数据类型和包装类型的区别
  16. 保时捷卡宴Cayenne升级原厂360全景影像系统,行车更安全
  17. 静坐常思己过,闲谈莫论人非,能受苦乃为志士,肯吃亏不是痴人,敬君子方显有德,怕小人不算无能,退......
  18. Win10笔记本电脑突然不能自动关闭屏幕的可能原因之一
  19. Pet包 资源 Linux,PET文件扩展名 - 什么是.pet以及如何打开? - ReviverSoft
  20. GeneXus荣获2021年中国产品研发型低代码厂商状元奖

热门文章

  1. 家庭收支记账软件程序
  2. python linux磁盘空间_Linux 查看磁盘空间
  3. RabbitMQ远程过程调用(RPC)
  4. ipo上市|美丽田园已上市,入场费9757.42港元
  5. linux系统下安装微信
  6. 如何用python画帆船_python 游戏(船只寻宝)
  7. CANdelaStudio编辑诊断描述CDD文件(最详细)
  8. X线DR医学图像 --- DR图像后处理结果分享(低剂量)
  9. 传统企业的网络营销问题和解决方案
  10. diskimage-builder之制作镜像