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…

相關文章
相關標籤/搜索