当前位置:   article > 正文

Android 使用腾讯的TBS浏览器X5内核的集成加载pdf等文件_x5webview 打开在线pdf

x5webview 打开在线pdf

我们正常项目使用原生webview加载h5页面也是没问题的,但是当使用原生webview加载h5出问题了,h5地址在微信等可以正常使用,前端就会丢锅给我们,为了杜绝不是我们Android的问题,那我们也集成TBS浏览器X5内核替换原生webview。。。

 

腾讯的TBS浏览器X5内核(文章中统一简称X5内核)的优点直接看文档介绍就有,文章主要将集成点和加载X5内核失败怎么解决、在应用内打开pdf等文件的功能(此功能官方文档没有);关于官方文档和sdk下载看下面链接:

一、集成(Android studio  依赖库集成)

关于jar包集成方法自行参考文档或者百度吧!

1、在app的build.gradle中添加

  1. dependencies {
  2. //x5内核Sdk=====在下载sdk说明处有直接复制
  3. api 'com.tencent.tbs.tbssdk:sdk:43697'
  4. }

2、在application类中添加:

  1. //下载x5内核,可以不需要,因为会共用其他软件的x5内核,比如微信、QQ等
  2. QbSdk.setDownloadWithoutWifi(true);
  3. QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
  4. @Override
  5. public void onCoreInitFinished() {
  6. Log.e("snow", "========onCoreInitFinished===");
  7. }
  8. @Override
  9. public void onViewInitFinished(boolean b) {
  10. //加载x5内核成功返回值为true,否则返回false,加载失败会调用系统的webview
  11. Log.e("snow", "x5初始化结果====" + b);
  12. }
  13. });

3、在AndroidManifest.xml文件中配置:

  1. <uses-permission android:name="android.permission.INTERNET" />
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  3. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  6. <!-- 硬件加速对X5视频播放非常重要,建议开启 -->
  7. <uses-permission android:name="android.permission.GET_TASKS"/>
  8. <application
  9. android:usesCleartextTraffic="true"
  10. android:hardwareAccelerated="true">
  11. </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"   如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest ...>
  3. <application
  4. android:usesCleartextTraffic="true"
  5. ...>
  6. </application>
  7. </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();

加载文件我直接贴代码了

重点核心代码:

  1. private void openFile() {
  2. File file = new File(url);
  3. if (!file.exists()) {
  4. Toast.makeText(this, "文件不存在", Toast.LENGTH_LONG).show();
  5. }
  6. Bundle bundle = new Bundle();
  7. bundle.putString("filePath", url);
  8. bundle.putString("tempPath", Environment.getExternalStorageDirectory().getPath());
  9. boolean result = tbsReaderView.preOpen(parseFormat(parseName(url)), false);
  10. if (result) {
  11. tbsReaderView.openFile(bundle);
  12. }
  13. }
  14. private String parseFormat(String fileName) {
  15. return fileName.substring(fileName.lastIndexOf(".") + 1);
  16. }
  17. private String parseName(String url) {
  18. String fileName = null;
  19. try {
  20. fileName = url.substring(url.lastIndexOf("/") + 1);
  21. } finally {
  22. if (TextUtils.isEmpty(fileName)) {
  23. fileName = String.valueOf(System.currentTimeMillis());
  24. }
  25. }
  26. return fileName;
  27. }
  28. TbsReaderView.ReaderCallback readerCallback = new TbsReaderView.ReaderCallback() {
  29. @Override
  30. public void onCallBackAction(Integer integer, Object o, Object o1) {
  31. }
  32. };
  33. @Override
  34. protected void onDestroy() {
  35. super.onDestroy();
  36. //销毁界面的时候一定要加上,否则后面加载文件会发生异常。
  37. tbsReaderView.onStop();
  38. }

调用代码:

  1. tbsReaderView = new TbsReaderView(this, readerCallback);
  2. rlRoot.addView(tbsReaderView, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
  3. openFile();

到此完成了x5内核的集成和打开文件的功能!感觉有用给一个star支持下!

demo地址

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号