Android解决X5WebView加载内核不成功的方法

您所在的位置:网站首页 qq浏览器加载失败怎么回事 Android解决X5WebView加载内核不成功的方法

Android解决X5WebView加载内核不成功的方法

2023-08-31 20:42| 来源: 网络整理| 查看: 265

https://github.com/barteksc/AndroidPdfViewer只是为了展示PDF文件的话可以用这个

参考:https://blog.csdn.net/heshuyu123/article/details/112198119 主要思想:如果加载失败了,重新下载加载。(周五周六晚上有一段时间不能下载,或腾讯服务器维护期间不能下载) 写了个帮助类,用法:在自己的application中进行初始化即可

X5InitUtils.init();

帮助类

import android.util.Log; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.SPUtils; import com.hjqjl.whdemo.app.MyApplication; import com.tencent.smtt.export.external.TbsCoreSettings; import com.tencent.smtt.sdk.QbSdk; import com.tencent.smtt.sdk.TbsDownloader; import com.tencent.smtt.sdk.TbsListener; import java.util.HashMap; public class X5InitUtils { public static final String TAG = "WordReadHelper"; private static boolean mInit = false; private X5InitUtils() { } public static void init() { resetSdk(); QbSdk.setTbsListener(new TbsListener() { @Override public void onDownloadFinish(int i) { //成功时i为100 if (i != 100) { initFinish(); } Log.d(TAG, "=========load" + i); //tbs内核下载完成回调 } @Override public void onInstallFinish(int i) { mInit = true; Log.d(TAG, "=========finish" + i); //内核安装完成回调, } @Override public void onDownloadProgress(int i) { //下载进度监听 Log.d(TAG, "=========progress" + i); } }); QbSdk.initX5Environment(MyApplication.getInstance(), new QbSdk.PreInitCallback() { @Override public void onCoreInitFinished() { Log.e(TAG, "X5加载内核完成"); //x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。 } @Override public void onViewInitFinished(boolean b) { //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 //该方法在第一次安装app打开不会回调 mInit = b; Log.e(TAG, "X5加载内核是否成功:" + b); if (!mInit && /*TbsDownloader.needDownload(context, false) &&*/ !TbsDownloader.isDownloading()) { LogUtils.v("initFinish"); initFinish(); } SPUtils.getInstance().put(TBS_INIT_KEY, mInit); } }); } /** * 初始化 */ private static void resetSdk() { // 在调用TBS初始化、创建WebView之前进行如下配置 HashMap map = new HashMap(); map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true); map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true); QbSdk.initTbsSettings(map); QbSdk.setDownloadWithoutWifi(true); // QbSdk.disableAutoCreateX5Webview(); //强制使用系统内核 //QbSdk.forceSysWebView(); } //这个key是sp存储的,用来记录上一次是否加载成功 //因为有的时候需要立刻用到tbs展示文件,但是tbs可能还没加载好 //因此我们在sp里面做记录,看是否需要等待加载 //如果上次加载好了,那这次肯定也很快,可以等待 //如果上次没加载好,那还是提示用户过一会再用吧 private static final String TBS_INIT_KEY = "tbs_init_key"; //该方法是用来判断tbs是否加载完成的,供外部调用 public static boolean initFinish() { //如果上次加载成功,那么便认为当前的未加载成功由于还未加载完等 //不做额外处理 if (SPUtils.getInstance().getBoolean(TBS_INIT_KEY, false)) { return mInit; } //上次没加载完,那就根据状态判断是否重置 if (!mInit && !TbsDownloader.isDownloading()) { QbSdk.reset(MyApplication.getInstance());//重置化sdk,这样就清除缓存继续下载了 resetSdk(); TbsDownloader.startDownload(MyApplication.getInstance());//手动开始下载,此时需要先判定网络是否符合要求 } return mInit; } }

代码示例中的SPUtils就是SharedPreferences,自己实现即可



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3