Android应用内展现word、excel、pdf、ppt等文件

笔者最近两个项目里头都有须要展现文件的功能,因而作了一番调研,发现asce1885给出一份方案,不过都是关于pdf的展现:www.jianshu.com/p/1bf49af65… 显然不符合笔者的要求,笔者的项目里须要展现的文件格式并不单一,后来通过一番搜索最后敲定使用腾讯的Tbs,能够在应用内打开各种型文件。不过这过程也有点坑。html

什么是Tbs

腾讯浏览服务(TBS,Tencent Browsing Service)整合腾讯底层浏览技术和腾讯平台资源及能力,提供总体浏览服务解决方案。TBS更多详细的介绍,请移步:x5.tencent.com/tbs/android

关于官网接入的坑

关于接入Tbs服务官网给出了接入文档:x5.tencent.com/tbs/guide/s… 很搞笑的是我找了好久也没有发现具备打开文件能力demo工程,官网sdk里头的demo工程竟然都没有展现文件功能,后来我发现官网论坛里有很多朋友留言,不知如何使用SdK打开文件,所以本文主要将的是如何使用SDK打开文件,以及对sdk打开文件的功能的简单封装。git

如何接入

参考:x5.tencent.com/tbs/guide/s…github

  1. 第一步

下载 SDK jar 包放到工程的libs目录下bash

image.png
image.png

  1. 第二步

x5暂时不提供64位so文件,为了保证64位手机能正常加载x5内核,进行如下两项设置:
(1)打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(若是没有defaultConfig{}则手动添加)添加以下配置: ndk{abiFilters "armeabi"}网络

image.png
image.png

(2)添加对应目录下的liblbs.so文件

image.png
image.png

如何展现文件

显示文件关键代码,例如:ide

Bundle localBundle = new Bundle();
            localBundle.putString("filePath", mFile.toString());
            localBundle.putString("tempPath", Environment.getExternalStorageDirectory() + "/" + "TbsReaderTemp");
            if (this.mTbsReaderView == null)
                this.mTbsReaderView = getTbsReaderView(context);
            boolean bool = this.mTbsReaderView.preOpen(getFileType(mFile.toString()), false);
            if (bool) {
                this.mTbsReaderView.openFile(localBundle);
            }复制代码

TbsReaderView是封装的用于展现文件的View,继承与FramLayout,首先调用mTbsReaderView.preOpen(getFileType(mFile.toString()), false)进行文件打开以前的初始化工做,而后调用的mTbsReaderView.openFile(localBundle)打开文件,localBundle里包含有文件在本地的路径,加载文件步骤十分简单,其中的加载任务所有交由tbs内核完成。gradle

简单封装

有时候可能须要加载网络文件,可是tbs目前是暂时不支持在线预览的,所以是须要使用网络将文件下载下来以后在展现,所以笔者这里对获取文件路径这一部分进行封装,以下:ui

public void show() {
        if(mOnGetFilePathListener!=null){
            mOnGetFilePathListener.onGetFilePath(this);
        }
    }

    /***
     * 将获取File路径的工做,“外包”出去
     */
    public interface OnGetFilePathListener {
        void onGetFilePath(SuperFileView2 mSuperFileView2);
    }复制代码

TbsReaderView是上面的SuperFileView2的子View,完整使用以下:this

mSuperFileView = (SuperFileView2) findViewById(R.id.mSuperFileView);
        //设置获取文件路径监听
        mSuperFileView.setOnGetFilePathListener(new SuperFileView2.OnGetFilePathListener() {
            @Override
            public void onGetFilePath(SuperFileView2 mSuperFileView2) {
                getFilePathAndShowFile(mSuperFileView2);
            }
        });

        Intent intent = this.getIntent();
        String path = (String) intent.getSerializableExtra("path");
        if (!TextUtils.isEmpty(path)) {
            TLog.d(TAG, "文件path:" + path);
            setFilePath(path);
        }
        mSuperFileView.show();复制代码

效果图

展现doc文件

显示doc文件
显示doc文件

展现Excel文件

显示Excel文件
显示Excel文件

展现pdf文件

显示pdf文件
显示pdf文件

展现ppt文件

显示ppt文件
显示ppt文件

展现txt

显示TXT文件
显示TXT文件

源码

github.com/ZhongXiaoHo…

相关文章
相关标签/搜索