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