Android 使用腾讯的TBS浏览器X5内核的集成加载pdf等文件
我们正常项目使用原生webview加载h5页面也是没问题的,但是当使用原生webview加载h5出问题了,h5地址在微信等可以正常使用,前端就会丢锅给我们,为了杜绝不是我们Android的问题,那我们也集成TBS浏览器X5内核替换原生webview。。。
腾讯的TBS浏览器X5内核(文章中统一简称X5内核)的优点直接看文档介绍就有,文章主要将集成点和加载X5内核失败怎么解决、在应用内打开pdf等文件的功能(此功能官方文档没有);关于官方文档和sdk下载看下面链接:
- 腾讯TBS官网接入步骤
- SDK下载
- TBS浏览服务SDK接入问题
- github集成Demo
一、集成(Android studio 依赖库集成)
关于jar包集成方法自行参考文档或者百度吧!
1、在app的build.gradle中添加
dependencies {//x5内核Sdk=====在下载sdk说明处有直接复制api 'com.tencent.tbs.tbssdk:sdk:43697'
}
2、在application类中添加:
//下载x5内核,可以不需要,因为会共用其他软件的x5内核,比如微信、QQ等 QbSdk.setDownloadWithoutWifi(true);QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {@Overridepublic void onCoreInitFinished() {Log.e("snow", "========onCoreInitFinished===");}@Overridepublic void onViewInitFinished(boolean b) {//加载x5内核成功返回值为true,否则返回false,加载失败会调用系统的webviewLog.e("snow", "x5初始化结果====" + b);}});
3、在AndroidManifest.xml文件中配置:
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- 硬件加速对X5视频播放非常重要,建议开启 --><uses-permission android:name="android.permission.GET_TASKS"/><applicationandroid:usesCleartextTraffic="true"android:hardwareAccelerated="true"></application>
4、使用x5内核的webview替换原生webview,使用方法一致,这里就不贴代码了,可以直接去demo中查看
到这里就集成完成了,运行查看application是否返回true,要是返回true那恭喜你很顺利完成了集成,要是返回false,那继续往下看
二、集成遇到的问题排查:
1、使用写的webview加载链接:
http://soft.imtt.qq.com/browser/tes/feedback.html
显示结果000000表示加载的是系统内核,显示大于零的数字表示加载了x5内核(该数字是x5内核版本号)
2、使用 写的webview加载链接:
http://debugtbs.qq.com
2.1、加载成功如下图
2.2、加载失败提示:请检查网络是否可用
你的手机应该是9.0以上的系统:google从Android 9.0开始,默认情况下禁用明文支持。因此http的url均无法在webview中加载
在AndroidManifest.xml添加属性android:usesCleartextTraffic="true" 如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...><applicationandroid:usesCleartextTraffic="true"...></application>
</manifest>
3、记载自测链接成功后,最好先点击“安装线上内核”下载内核,然后重启页面后点击“合作方加载检测”,查看提示:
3.1、加载内核成功:
3.2、加载失败检测原因:如:下面这个提示就是64位手机不能加载x5内核,x5内核目前只支持32位
x5内核不支持64位的解决方法:
官方关于x5内核64位手机不能使用解决方案
出现其他问题都可以通过检测查看哪里出了问题;
三、关于使用x5内核加载pdf等文件
几点重要提示:
1、加载文件核心类是 TbsReaderView,腾讯文档没有写,TbsReaderView建议通过动态创建,不要使用xml中引用;
2、TBS目前只支持加载本地文件。所以远程文件需要先下载,后用TBS加载文件显示;
3、加载文件的界面,离开本界面之后务必销毁TbsReaderView,否则再次加载文件无法加载成功,会一直显示加载文件进度条;代码如下:tbsReaderView.onStop();
加载文件我直接贴代码了
重点核心代码:
private void openFile() {File file = new File(url);if (!file.exists()) {Toast.makeText(this, "文件不存在", Toast.LENGTH_LONG).show();}Bundle bundle = new Bundle();bundle.putString("filePath", url);bundle.putString("tempPath", Environment.getExternalStorageDirectory().getPath());boolean result = tbsReaderView.preOpen(parseFormat(parseName(url)), false);if (result) {tbsReaderView.openFile(bundle);}}private String parseFormat(String fileName) {return fileName.substring(fileName.lastIndexOf(".") + 1);}private String parseName(String url) {String fileName = null;try {fileName = url.substring(url.lastIndexOf("/") + 1);} finally {if (TextUtils.isEmpty(fileName)) {fileName = String.valueOf(System.currentTimeMillis());}}return fileName;}TbsReaderView.ReaderCallback readerCallback = new TbsReaderView.ReaderCallback() {@Overridepublic void onCallBackAction(Integer integer, Object o, Object o1) {}};@Overrideprotected void onDestroy() {super.onDestroy();//销毁界面的时候一定要加上,否则后面加载文件会发生异常。tbsReaderView.onStop();}
调用代码:
tbsReaderView = new TbsReaderView(this, readerCallback);rlRoot.addView(tbsReaderView, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));openFile();
到此完成了x5内核的集成和打开文件的功能!感觉有用给一个star支持下!
demo地址
Android 使用腾讯的TBS浏览器X5内核的集成加载pdf等文件相关推荐
- QQ浏览器x5内核的兼容性问题
X5内核是腾讯基于优秀开源Webkit[1] 深度优化的浏览器渲染引擎,搭载在最新一代的手机QQ浏览器上[2] ,更快,更便捷. 2014年9月23日,腾讯正式宣布开放业内首个浏览服务开放平台,向AP ...
- Android 浏览器内核浅谈,基于WebKit内核的Android手机浏览器的性能研究与加载优化...
南京邮电大学 硕士 2017 基于WebKit内核的Android手机浏览器的性能研究与加载优化 Performance Research and Load Optimization of Andro ...
- android 浏览器打开本地html文件,如何在Android浏览器中加载本地HTML文件
我试图在设备浏览器中加载本地html文件.我尝试过使用WebView,但它不适用于所有设备.如何在Android浏览器中加载本地HTML文件 //WebView method that didnt w ...
- Android加载PDF文档
前言 最近项目上有一个需求,需要在Android端加载显示pdf文档,因为没有相关的经验,在刚接到需求的时候,第一想法就是打开程序员的第二大脑进行搜索,搜索结果还是蛮理想的,了解到了MuPDF,它支 ...
- google支持本地ajax,360chrome,google chrome浏览器使用jquery.ajax加载本地html文件
使用360chrome和google chrome浏览器加载本地html文件时,会报错,提示: XMLHttpRequest cannot load file:///Y:/jswg/code/html ...
- xBIM 实战01 在浏览器中加载IFC模型文件
系列目录 [已更新最新开发文章,点击查看详细] 一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5 选择一个空的项目 新建完成后,项目结构如下: 二.添 ...
- Android中使用WebChromeClient显示Openlayers加载本地GeoJson文件显示地图(跨域问题解决)
场景 Openlayers中加载GeoJson文件显示地图: Openlayers中加载GeoJson文件显示地图_BADAO_LIUMANG_QIZHI的博客-CSDN博客 上面加载显示GeoJso ...
- android 自定义域名,Android基于Retrofit2改造的可设置多域名的网络加载框架
Android基于Retrofit2改造的可设置多域名的网络加载框架 1.使用说明 添加仓库 ``` allprojects { repositories { google() jcenter() m ...
- Android OpenGLES2.0(十四)——Obj格式3D模型加载
转自:http://blog.csdn.net/junzia/article/details/54300202 在博主<OpenGLES系列>文章中,最开始的几篇讲的就是OpenGL世界中 ...
最新文章
- python将string转换为json_python -- 将string转换成dict的方法
- RPM包搜索下载网站
- Coursera课程Python for everyone:Quiz: REST, JSON, and APIs
- 区块链BaaS云服务(40) 泰岳FruitChain
- manjaro linux换源
- sql server在执行批处理时出现错误。错误消息为: 目录名无效
- LeetCode198——house robber(不懂dp)
- LeetCode 70. Climbing Stairs
- ASP.NET 数据库缓存依赖
- 耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)
- php字符串中删除字符串函数,PHP 实现删除任意区间内字符串函数方法
- 我们无法更新系统保留的分区_系统更新是我们手机的基本功能之一 安卓智能更新有哪些用途...
- android settheme不起作用,android-主题,样式和别名嵌套不起作用
- Java核心编程实践--视频
- [SQL]SQL server 常用代码
- VB认识强大的ActiveX控件
- switchhost下载安装
- Redhat8 配置使用阿里源(关闭官方订阅)
- 微信小程序快捷键和windows快捷键
- python把两个图片合成一张图
热门文章
- 【强化学习】Q-Learning用于二维空间探索【Python实现】
- python 标准模板库_比较了3个Python模板库
- python练习 7-14 漂亮的螺旋 (100分)
- 【18】[C语言]抓交通肇事犯。一辆卡车违反交通规则,撞人后逃跑。现场有3人目击事件,但没有记住车牌号,只记住了车号的一些特征。
- python@模块和脚本@module@script@package_import
- 一政网;在职可以报考事业单位吗?
- Contest Hunter #46 T1 磁力块 [分块]
- 20220718-内容整理
- 最短路与动态规划(三)
- 制作电脑店U盘启动盘