1. 程式人生 > >Android 線上預覽檔案

Android 線上預覽檔案

在公司最近一個專案中,有一個需求是線上預覽檔案功能。重點是檔案不能外露,也就是隻能看,不能下載。

當時我的想法有四個:

(1)檔案下載到本地,使用第三方應用開啟,退出後刪除該檔案。

(2)使用TBS(騰訊瀏覽服務)開啟。

(3)使用微軟提供的預覽效果,使用webview開啟

(4)使用百度雲文件服務

下面我就來說說這四種方式的缺點:

方式一:檔案下載到本地,使用第三方應用開啟。退出後刪除該檔案

我在試這種方式的時候,發現第三方的應用有提供  另存為 功能,那就不能使用這種功能了,不符合公司的要求:只能看,不能下載。

方式二:使用TBS(騰訊瀏覽服務)開啟

這種方式目前也沒有提供線上預覽功能,只能是下載到本地,再使用TBS(騰訊瀏覽服務)開啟,退出該介面的時候,刪除該檔案。

這種方式的載入檔案速度很快,與介面的相容性做得很好。

最終我還是沒有使用這種方式,原因有兩個:

1.沒有線上預覽效果,只能下載到本地。與公司的要求不符合。

2.我用四臺手機來測試的時候,居然有一臺手機死活就是不能載入。顯示的原因是不支援檔案型別,我懷疑是不是我的整合錯了,試了好些次還是不行。

方式三:使用微軟提供的預覽效果,使用WebView開啟

這種方式用了一段時間感覺還是不錯的。PC端也使用這種方式,使用起來很方面,就組一串url,扔給webview就能顯示了。

最終我還是沒有使用這種方式,原因是 檔案大的時候,載入的速度很慢,有時候還載入不出來。

方式四:使用百度雲文件服務

百度提供相應的線上預覽功能,整合顯示都很方便。

後來領導的想法是,移動端還是使用webview載入url的方式,百度雲文件服務的整合放在 js或H5(這個不清除是怎麼操作的),然後提供給我們一個url即可。

下面我主要講的是後面兩種實現線上預覽的方式

1.使用微軟提供的預覽效果,使用WebView開啟

將檔案地址和http://view.officeapps.live.com/op/view.aspx?src=

拼接成新的url,再用webview載入即可。

String finalUrl = "http://view.officeapps.live.com/op/view.aspx?src=" + realUrl + "";
        Log.e("tag_finalUrl", finalUrl + "");
        mWebView.loadUrl(finalUrl);

realUrl : 檔案的地址

2.使用百度雲文件服務(本地整合)

整合方面的操作請參考:文件服務

程式碼:

String host = "BCEDOC"; // 百度雲傳回的host
    String docId = "doc-hmmm9y4j01kwmjk"; // 百度雲傳回的docId
    String docType = "doc"; // 百度雲傳回的文件型別 doc/ppt/ppts等
    String token = "TOKEN"; // 百度雲傳回的token
    String thisDocDir = ""; // 指定為空串""表示線上瀏覽
    int totalPage = 3; // 總頁數,必須準確填寫 否則在離線瀏覽時會有問題
    String docTitle = "百度雲文件服務";
    int startPage = 1; // 起始瀏覽頁,最小值為1,請不要填入小於1的值
    BDocInfo docInfo;
    private BDocView  mDocView;


mDocView = (BDocView) findViewById(R.id.doc_view);


docInfo = new BDocInfo(host, docId, docType, token)
                .setLocalFileDir(thisDocDir)
                .setTotalPage(totalPage)
                .setDocTitle(docTitle)
                .setStartPage(startPage);
        mDocView.setOnDocLoadStateListener(new BDocView.OnDocLoadStateListener() {
            @Override
            public void onDocLoadComplete() {
                Log.d("test", "onDocLoadComplete");
            }
            @Override
            public void onDocLoadFailed(String errorDesc) {
                // errorDesc format: ERROR_XXXX_DESC(code=xxxxx)
                Log.d("test", "onDocLoadFailed errorDesc=" + errorDesc);
            }
            @Override
            public void onCurrentPageChanged(int currentPage) {
                // 記錄當前頁面
                Log.i("test", "currentPage = " + currentPage);
            }
        });
        // 載入文件
        mDocView.loadDoc(docInfo);

xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.user.docshowonline.MainActivity">

    <com.baidu.bdocreader.BDocView
        android:id="@+id/doc_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.baidu.bdocreader.BDocView>
</RelativeLayout>


百度雲文件服務還有提供下載功能,我在這裡就不多介紹了,感興趣的同學可以去看看。