1. 程式人生 > >Android應用內展示word、excel、pdf、ppt等檔案

Android應用內展示word、excel、pdf、ppt等檔案

筆者最近兩個專案裡頭都有需要展示檔案的功能,於是做了一番調研,發現asce1885給出一份方案,不過都是關於pdf的展示:http://www.jianshu.com/p/1bf49af6584d,顯然不符合筆者的要求,筆者的專案裡需要展示的檔案格式並不單一,後來經過一番搜尋最後敲定使用騰訊的Tbs,可以在應用內開啟各型別檔案。不過這過程也有點坑。

什麼是Tbs

騰訊瀏覽服務(TBS,Tencent Browsing Service)整合騰訊底層瀏覽技術和騰訊平臺資源及能力,提供整體瀏覽服務解決方案。TBS更多詳細的介紹,請移步:https://x5.tencent.com/tbs/

關於官網接入的坑

關於接入Tbs服務官網給出了接入文件:https://x5.tencent.com/tbs/guide/sdkInit.html,很搞笑的是我找了很久也沒有發現具有開啟檔案能力demo工程,官網sdk裡頭的demo工程居然都沒有展示檔案功能,後來我發現官網論壇裡有不少朋友留言,不知如何使用SdK開啟檔案,因此本文主要將的是如何使用SDK開啟檔案,以及對sdk開啟檔案的功能的簡單封裝。

如何接入

參考:https://x5.tencent.com/tbs/guide/sdkInit.html
1. 第一步

下載 SDK jar 包放到工程的libs目錄下

image.png

  1. 第二步

x5暫時不提供64位so檔案,為了保證64位手機能正常載入x5核心,進行以下兩項設定:
(1)開啟對應module中的build.gradle檔案,在檔案的android{}中的defaultConfig{}裡(如果沒有defaultConfig{}則手動新增)新增如下配置: ndk{abiFilters “armeabi”}

image.png
(2)新增對應目錄下的liblbs.so檔案

image.png

如何展示檔案

顯示檔案關鍵程式碼,例如:

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核心完成。

簡單封裝

有時候可能需要載入網路檔案,但是tbs目前是暫時不支援線上預覽的,因此是需要使用網路將檔案下載下來之後在展示,因此筆者這裡對獲取檔案路徑這一部分進行封裝,如下:

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

    /***
     * 將獲取File路徑的工作,“外包”出去
     */
    public interface OnGetFilePathListener {
        void onGetFilePath(SuperFileView2 mSuperFileView2);
    }

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

 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檔案

展示Excel檔案

顯示Excel檔案

展示pdf檔案

顯示pdf檔案

展示ppt檔案

顯示ppt檔案

展示txt

顯示TXT檔案

原始碼

https://github.com/ZhongXiaoHong/superFileView