首页 > 作文

pdf查看软件哪个好(安卓手机pdf阅读器排行)

更新时间:2023-04-05 15:00:00 阅读: 评论:0

为什么需要在android应用内打开pdf、word、excel等文档?

由于公司项目有一部分功能是能观看新闻,但是这些新闻的内容并不都是一个html或者链接直接可以使用android webview直接打开,而是这些新闻详情中含有各种类型的文档都存在比如:pdf、word、excel等等文档。由于之前赶项目的时候,处理方式是直接调用系统浏览器下载查看,项目快完结时,公司老大说我们需要将我们的新闻在我们自己的应用内部打开,这样显得我们专业,而且友好,让我们去想个方案,至此需求就出来。

我相信android 开发的都是想打人的,为啥ios直接使用系统webview就能直接打开所有文档,而我们就不行。这话说来就要怪google爸爸了,google爸爸其实是有方案解决,就是使用google rvice。但是由于国内的网络原因,所以这种方法只能放弃了。

我相信这个可能有很多的解决方法,但是我这是只是记录一下我自己的解决方法,如果还有更好的方法,还希望各位给我指出,感谢。

先看看我的实现效果图:

解决方法

我这里是使用腾讯的tbs内核,来替换掉android 原生的webview。至于为什么使用x5内核呢?理由有几点:

腾讯大佬的东西(虽然讨论区还是有些bug,但是不影响大局)

微信、qq都是使用的tbs内核

使用的tbs内核的人多,讨论区热闹,有很多的解决方案。

tbs内核优点:

1. tbs(腾讯浏览服务)的优势

1) 速度快:相比系统webview的网页打开速度有30+%的提升;

2) 省流量:使用云端优化技术使流量节省20+%;

3) 更安全:安全问题可以公示催告申请书在24小时内修复;

4) 更稳定:经过亿级用户的使用考验,crash率低于0.15%;

5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;

6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;

7) 功能全:在html5、es6上有更完整支持;

8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;

9) 视频和文件格式的支持x5内核多于系统内核

10) 防劫持是x5内核的一大亮点

2. 运行环境

1)手机rom版本高于或等于2.2版本

2)手机ram大于500m,该ram值通过手机 /proc/meminfo 文件的memtotal动态获取

注:如果不满足上述条件,sdk会自动切换到系统webview,sdk使用者不用关心该切换过程。

3. sdk尺寸指标

1)sdk提供的jar包约250k

tbs内核的文件能力

app在接入文件服务后,即可支持主流9种格式。升级文件服务后,可支持46种文件格式。

接入tbs

如果不想看我写的,可以直接看官网的接入流程。

1、导入jar包

官网下载好android studio接入示例,将tbs jar包放入libs文件夹下面如图:

申请必要的权限:

<us-permission android:name=”android.permission.internet” />

<us-permission android:name=”android.permission.write_external_storage” />

<us-permission android:name=”android.permission.download_without_notification”/>

<us-permission android:name=”android.permission.access_download_manager”/>

<us-permission android:name=”android.permission.write_ttings”/>

<us-permission android:name=”android.permission.read_phone_state”/>

2、初始化tbs

一般tbs的x5内核初始化是放在application中进行,如图是我的项目中初始化地方:

下面是系统webview的类和tbs内核的类的区别:

tbs的内核的类名和系统的基本一致,而且使用方法也是一致,这里就不赘述了。

3、64位手机

这个是tbs官网的解释:

x5内核暂时不提供64位的so文件,在64位手机上需要让app以32位模式运行。具体操作如下:

1.如果使用是eclip则需要将所有的.so文件都放置在so加载目录:lib/armeabi文件夹下(没有该目录则新建一个,ap中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,如果没有合适的so可以到“sdk接入示例“,拷贝对应目录下的liblbs.so文件),lib文件夹下不要有其他以”armeabi“开头的文件夹。

2.如果使用的是 android studio则需要进行两项配置,

(1)打开对应module中的build.gradle文件,在文件的android{}中的defaultconfig{}里(如果没有defaultconfig{}则手动添加)添加如下配置: ndk{abifilters “armeabi”},如果配置后编译报错,那么需要在gradle.properties文件中加上android.udeprecatedndk=true;

(2)找出build.gradle中配置的so加载目录
:jnilibs.srcdir:customerdir,如果没有该项配置则so加载目录默认为:src/main/jnilibs,需要将.so文件都放置在so加载目录的armeabi文件夹下(没有该目录则新建一个,ap中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,如果没有合适的so可以到官网/d/file/titlepic/ppstrong2.%E5%9C%A8 app/build.gradle 文件中对 libs 目录中 jar 文件的依赖

dependencies { compile filetree(dir: 'libs', include: ['*.jar'])}

3.**需要注意的是:**tbs 目前只提供 armeabi 类型 cpu 架构的 so 库。当然,也可以将 so 文件放置于 libs 目录下,只不过需要在 app/build.gradle 中额外修改 so 文件依赖配置:

sourcets { main { jnilibs.srcdirs = ['libs'] } }

那么我们要怎么确认是否这个tbs的x5内核已经加载成功了呢?

如下图,当你长按选择复制的时候出现下面的蓝色水滴状就表示tbs的x5内核加载成功:

4、下载文件到本地

下载文件到本地,我们就使用系统的http请求来下载文件,假如你开发中用的okhttp或者其他的网络框架,直接使用网络框架下载就好了。代码如下:

5、tbsreaderview加载文件

创建tbsreaderview:

/*** 下载文件并使用tbs打开文件 ** @param url 下载的路径* @param filename 保存的文件的名字* @param filetype 我们需要打开的文件的类型 word时间残余类型 doc excel类型xls pdf类型 pdf等等,这个可以在官网上查* @throws ioexception */private void downloadfile(url url, string filename, string filetype) throws ioexception {new thread(new runnable() {@overridepublicvoidrun() {try {final httpurlconnection connection = (httpurlconnection) url.openconnection();//获取总的文件大小connection.trequestmethod(“get”);//试过post 可能报错connection.tdoinput(true);connection.tconnecttimeout(10000);connection.treadtimeout(远离垃圾食品10000);//实现连接connection.connect();if (connection.getresponcode() == 200) {//获取内容长度int contentlength =
connection.getcontentlength();inputstream = connection.getinputstream();file dir = mcontext.getexternalfilesdir(environment.directory_downloads);file = new file(dir, filename);if (file.exists()) {file.delete(); }fileoutputstream = new fileoutputstream(file);byte[] bytes = newbyte[1024];int templen;long totalreaded = 0;while ((templen = inputstream.read(bytes)) != -1) {// bytes[index]= (byte) temp_len;// index++;totalreaded += templen;finalint progress = (int) (totalreaded * 100 / contentlength);mcontext.runonuithr父亲节的祝福语言简短ead(() -> binding.progress.tprogress(progress)); fileoutputstream.write(bytes, 0, templen);}}} catch (exception e) {logger.e(“文件下载异常”);} finally {if (fileoutputstream != null) {try { fileoutputstream.clo();} catch (ioexception e) {e.printstacktrace();}}if (inputstream != null) {try {inputstream.clo();} catch (ioexception e) {e.printstacktrace();}}}}});}

activity 中实现 readercallback 接口,并通过 java 代码动态创建 tbsreaderview 对象,将其添加到 content view 当中。

实现readercallback 接口,重写方法:

暂不知这个方法有什么用,我也没使用到,所以未深究。

可能你会有疑惑,为什么不将 tbsreadervie珍珠粉去痘w 放在 layout 布局文件中,而是在代码中手动 add 进去。经测试,这么做会报错,提示找不到这个类。然后我们查看 tbsreaderview 源码,发现只有这么一个构造函数:

最后一步传入参数,打开文件即可:

说明下这里的filetype是一个字符串类型的,其实就是文件的后缀名,例如word类型的是“doc” 、 pdf的类型是“pdf”,一般可以通过url来截取到类型。

总结

android 应用中打开文件,上面只是我个人的项目使用的方法,当然还有其他的方法。欢迎大家都去尝试,其实一般这种按照官网的文档来做是没有什么问题的,但是说实话文档还是有点简陋,只有自己动手去做才比较清楚。还有点就是告诉大家:tbs的x5内核还是有问题的,并不是说腾讯的都没问题,可以去tbs的讨论区看看都有哪些问题,然后根据这些问题,确定自己的项目是否适合使用。

原创不易,如果觉得写得好,关注一下点个赞,是我最大的动力。

本文发布于:2023-04-05 14:59:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/c50f82c24d353c384b28f986d1c66029.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:pdf查看软件哪个好(安卓手机pdf阅读器排行).doc

本文 PDF 下载地址:pdf查看软件哪个好(安卓手机pdf阅读器排行).pdf

标签:文件   内核   类型   系统
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图