Android应用集成Office文件能力完全攻略

栏目: Java · 发布时间: 5年前

内容简介:Android应用打开office和pdf文件。常用的有以下四种解决方案:四种方案各有优劣,这里笔者选择了x5 sdk为主要手段,第三方应用辅助的这样一种解决方案腾讯官方提供的x5内核有两个版本,这里选择具有文件能和的sdk:

Android应用打开office和pdf文件。常用的有以下四种解决方案:

  1. 在线网页打开文件方案:通过微软或谷歌提供的在线页面打开office和pdf文件
  2. 集成相关文档处理开源库:通过集成开源库类似于AndroidPdfViewer
  3. 通过系统中的第三方应用打开文档
  4. 集成腾讯x5 sdk文件能力

四种方案各有优劣,这里笔者选择了x5 sdk为主要手段,第三方应用辅助的这样一种解决方案

二、集成x5内核

腾讯官方提供的x5内核有两个版本,这里选择具有文件能和的sdk:

Android应用集成Office文件能力完全攻略

接下来的集成可以参考x5内核接入文档,这里便不详述。集成的主要工作便是集成jar包和so文件,并在Application初始化时调用QbSdk.initX5Environment(context, callback)来完成初始化工作。

三、集成TbsReader

x5内核中提供了TbsReaderView,让我们可以通过这个类在App中显示文档。考虑到TbsReaderView这个类具有生命周期的方法,我们把它封装在一个Fragment中,方便我们的调用。TbsReaderView的主要方法有两个,一个是preOpen(String, boolean),另一个是openFile(Bundle)。preOpen(String, boolean)是用来检测x5文件能力是否成功初始化和是否支持打开文件的格式,当符合打开文件的条件时该方法返回true;openFile(Bundle)则是在preOpen(String, boolean)的返回值为true的情况进行调用,顾名思义这个方法是用来打开文件的,其中bundle用来传入文件路径。

String path = file.getPath();
String format = parseFormat(path);
boolean preOpen = mReaderView.preOpen(format, false); // 该状态标志x5文件能力是否成功初始化并支持打开文件的格式
if (preOpen) { // 使用x5内核打开office文件
    Bundle bundle = new Bundle();
    bundle.putString("filePath", path);
    bundle.putString("tempPath", StorageUtils.getTempDir(context).getPath());
    mReaderView.openFile(bundle);
}
复制代码

有了这部分核心代码,TbsReaderView基本上就能打开Office和PDF文件了。

Android应用集成Office文件能力完全攻略

四、完善文件能力

市面上的安卓手机各式各样,虽然集成了TbsReaderView,但是还是会收到用户反馈说无法打开Office文件。这是因为用户手机上的x5文件能力没有初始化成功,至于为什么没有初始化成功,原因还无法确定。针对这部分用户,我们需要在他们无法使用TbsReaderView浏览Office文件的情况下,提供另外的途径去打开Office文件。大致思路是检测到TbsReaderView无法打开Office或PDF时,跳转到第三方应用去打开。这里x5的jar包提供了这样一个api:openFileReader(Context, String, HashMap<String, String>, ValueCallback)用来使用第三方应用打开文件,并且支持前往下载具有Office浏览功能的QQ浏览器,这样的功能对用户比较友好,我们可以直接拿来用。

Android应用集成Office文件能力完全攻略

然而,x5的jar包中使用第三方应用打开时调用了Uri.fromFile(file),这个生成文件Uri的方法在Android7.0以下有效,但在Android7.0及以上会造成崩溃,这是Android7.0的文件权限管理导致。为了使Android7.0及以上的用户可以正常跳转到第三方应用打开,我们需要使用FileProvider去获取Uri,但代码在Jar包中写死了。幸运的是,经过多次尝试,发现可以将跳转到第三方应用打开的这部分代码复制出来,修正Uri.fromFile(file)的代码以正常调用,免去了要修改jar的麻烦。这里笔者把这部分代码封装在一个叫TbsReaderAssist的类中,辅助调用。

这样一来,一个比较完善的打开Office和PDF的功能就算做完成。

String path = file.getPath();
String format = parseFormat(path);
boolean preOpen = mReaderView.preOpen(format, false); // 该状态标志x5文件能力是否成功初始化并支持打开文件的格式
if (preOpen) { // 使用x5内核打开office文件
    Bundle bundle = new Bundle();
    bundle.putString("filePath", path);
    bundle.putString("tempPath", StorageUtils.getTempDir(context).getPath());
    mReaderView.openFile(bundle);
} else { // 打开文件失败,可能是由于x5内核未成功初始化引起
    if (QbSdk.isSuportOpenFile(format, 1)) { // 再次检查文件是否支持
        HashMap<String, String> params = new HashMap<>();
        params.put("style", "1");
        params.put("local", "false");
        TbsReaderAssist.openFileReader(context, path, params, null);
    }
}
复制代码

五、总结

这里笔者写了一个App打开Office或PDF文件的解决方案,个人认为对于一个App来说是相对完善的处理。这里是demo的地址: github.com/windinwork/… ,共享出来,可以让有需要做类似功能的小伙伴少走些弯路。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

游戏编程权威指南

游戏编程权威指南

Mike McShaffry 麦克沙福瑞、David “Rez” Graham 格雷海姆 / 师蓉、李静、李青翠 / 人民邮电 / 2016-3 / 99.00元

全书分为4个部分共24章。首部分是游戏编程基础,主要介绍了游戏编程的定义、游戏架构等基础知识。 第二部分是让游戏跑起来,主要介绍了初始化和关闭代码、主循环、游戏主题和用户界面等。 第三部分是核心游戏技术,主要介绍了一些*为复杂的代码 示例,如3D编程、游戏音频、物理和AI编程等。 第四部分是综合应用,主要介绍了网络编程、多道程序设计和用C#创建工具等,并利用前面所讲的 知识开发出......一起来看看 《游戏编程权威指南》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具