Android应用内展示office文件--腾讯浏览服务(TBS)

摘要:
Android{…sourceSets{main{jniLibs.srcDirs=['libs']}}}2。TbsReaderView类,环境。获取外部存储目录()。getPath(),主要用于此处;假);If(result){mTbsReaderView.openFile(bundle);}3。添加权限<

什么是TBS

 依托 X5 内核强大的能力,致力于提供优化移动端浏览体验的整套解决方案(官网介绍)。我们可利用其做文件浏览功能,支持多种文件格式,完全可以满足需求。更多介绍请看官网:http://x5.tencent.com/

接入TBS

TBS只能浏览本地文件,对于远程文件需要先进行下载,我们先看浏览本地文件如何实现。

1. 下载SDKhttp://x5.tencent.com/tbs/sdk.html,将示例中lib下的jar文件 和 jniLibs下的so文件 copy至自己的项目中。 


Android应用内展示office文件--腾讯浏览服务(TBS)第1张

注: 
如果jar包没有加载成功,则File–>Project Structure,点击+号加入jar包 
Android应用内展示office文件--腾讯浏览服务(TBS)第2张 
如果so文件是放置于 libs 目录下,需要在 app/build.gradle中指定路径:

 android {
    ...
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
 }

  

2. 使用

  这里主要使用到了TbsReaderView类,并且给Activity实现ReaderCallback接口,并且实现其接口方法(可以不处理,但是需实现)。初始化TbsReaderView需要动态构建,如下:

 mTbsReaderView = new TbsReaderView(this, this);
 //rl_tbsView为装载TbsReaderView的视图
 rl_tbsView.addView(mTbsReaderView, new RelativeLayout.LayoutParams(
          ViewGroup.LayoutParams.MATCH_PARENT,
          ViewGroup.LayoutParams.MATCH_PARENT));

 打开本地文件:通过 Bundle 类型参数的形式向 TbsReaderView 对象传递文件地址和另一个临时目录地址。

 Bundle bundle = new Bundle();
 bundle.putString("filePath", getLocalFile().getPath());
 bundle.putString("tempPath", Environment.getExternalStorageDirectory()
                .getPath());
 boolean result = mTbsReaderView.preOpen(parseFormat(mFileName), false);
 if (result) {
     mTbsReaderView.openFile(bundle);
 }

3. 添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

下载远程文件

 利用系统提供的 DownloadManager 类来实现下载,并使用 ContentObserver 类监听下载进度,在其回调方法 onChange() 中可查询下载进度:

 private class DownloadObserver extends ContentObserver {
     @Override
     public void onChange(boolean selfChange, Uri uri) {
         //查询下载进度,使用DownloadManager.Query
     }
 }

  

效果图

Android应用内展示office文件--腾讯浏览服务(TBS)第3张 Android应用内展示office文件--腾讯浏览服务(TBS)第4张 Android应用内展示office文件--腾讯浏览服务(TBS)第5张



注:某些机型可能预览失败, 可能是so文件无法适应64位机型,需在build.gradle下的defaultConfig{}中加入:

   ndk {
       abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
   }

某些机型可能无法下载含有中文路径的文件,可进行转码处理:

    /**
     * 将url进行encode,解决部分手机无法下载含有中文url的文件的问题(如OPPO R9)
     *
     * @param url
     * @return
     * @author xch
     */
    private String toUtf8String(String url) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < url.length(); i++) {
            char c = url.charAt(i);
            if (c >= 0 && c <= 255) {
                sb.append(c);
            } else {
                byte[] b;
                try {
                    b = String.valueOf(c).getBytes("utf-8");
                } catch (Exception ex) {
                    System.out.println(ex);
                    b = new byte[0];
                }
                for (int j = 0; j < b.length; j++) {
                    int k = b[j];
                    if (k < 0)
                        k += 256;
                    sb.append("%" + Integer.toHexString(k).toUpperCase());
                }
            }
        }
        return sb.toString();
    }

源码已上传至GitHub,需要的可以下载:https://github.com/yangxch/TBSFileBrowsing

转载请注明:https://www.cnblogs.com/xch-yang/p/9361305.html 

 


  更多技术干货,欢迎关注我的公众号:ChaoYoung

免责声明:文章转载自《Android应用内展示office文件--腾讯浏览服务(TBS)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Docker OpenvSwitch 应用部署[转]Oracle中使用Rownum分页详细例子下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

NTFS隐写

------------恢复内容开始------------ 总结下以前做题遇到的有趣的知识点, Buuctf里的杂项漂流的马里奥,中NTFS隐写到NTFS在渗透过程的妙用。 NTFS交换数据流(Alternate DataStreams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件...

从wav到Ogg Opus 以及使用java解码OPUS

PCM 自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。 采样率 采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的...

Eclipse开启代码自动提示功能

Eclipse代码里面的代码提示功能默认是关闭的,只有输入“.”的时候才会提示功能,用vs的用户可能不太习惯 这种,vs是输入任何字母都会提示,下面说一下如何修改eclipse配置,开启代码自动提示功能 打开 Eclipse  -> Window -> Perferences -> Java -> Editor -> Cont...

linux常见故障处理

目录 一. 文件和目录类 1.1 File exist 文件已经存在 1.2 No such file or directory 没有这个文件或目录(这个东西不存在) 1.3 command not found 命令找不到(没有这个命令) 1.4 invalid option 无效的参数(不可用的参数) 1.5 overwrite 覆盖 1.6 r...

完美解决php无法上传大文件代码

之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需求,都能得到满足。小小开心了一把。   但无论插件再怎么灵活,也难以应付所有的需求,比如,你要上传一个2G的文件。以现在我们的网速,恐怕再快也得传半小时。要命...

流量取证-流量中提取文件

以前整理的一些东西,拿出来做备忘 PCAP 报文就是抓取实际在网络中传输的图片,视频等数据,然后以PCAP 格式存储形成的文件。工作中对离线的数据包进行回溯分析,有时会遇到将 PCAP 中的码流还原成相应的图片、视频、邮件等原有格式的需求。 从流量中取证文件大部分情况下是为了提取流量中的可执行程序。 1、 tcpxtract 安装: apt-get ins...