Android應用內展示office文件--騰訊瀏覽服務(TBS)


什么是TBS

 依托 X5 內核強大的能力,致力於提供優化移動端瀏覽體驗的整套解決方案(官網介紹)。我們可利用其做文件瀏覽功能,支持多種文件格式,完全可以滿足需求。更多介紹請看官網:http://x5.tencent.com/

接入TBS

TBS只能瀏覽本地文件,對於遠程文件需要先進行下載,我們先看瀏覽本地文件如何實現。

1. 下載SDKhttp://x5.tencent.com/tbs/sdk.html,將示例中lib下的jar文件 和 jniLibs下的so文件 copy至自己的項目中。 


注: 
如果jar包沒有加載成功,則File–>Project Structure,點擊+號加入jar包 
 
如果so文件是放置於 libs 目錄下,需要在 app/build.gradle中指定路徑:

 android { ... sourceSets { main { jniLibs.srcDirs = ['libs'] } } }

  

2. 使用

  這里主要使用到了TbsReaderView類,並且給Activity實現ReaderCallback接口,並且實現其接口方法(可以不處理,但是需實現)。初始化TbsReaderView需要動態構建,如下:

 mTbsReaderView = new TbsReaderView(this, this); //rl_tbsView為裝載TbsReaderView的視圖
 rl_tbsView.addView(mTbsReaderView, new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
 
        

 打開本地文件:通過 Bundle 類型參數的形式向 TbsReaderView 對象傳遞文件地址和另一個臨時目錄地址。

 Bundle bundle = new Bundle(); bundle.putString("filePath", getLocalFile().getPath()); bundle.putString("tempPath", Environment.getExternalStorageDirectory() .getPath()); boolean result = mTbsReaderView.preOpen(parseFormat(mFileName), false); if (result) { mTbsReaderView.openFile(bundle); }

 

3. 添加權限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

 

 

下載遠程文件

 利用系統提供的 DownloadManager 類來實現下載,並使用 ContentObserver 類監聽下載進度,在其回調方法 onChange() 中可查詢下載進度:

 private class DownloadObserver extends ContentObserver { @Override public void onChange(boolean selfChange, Uri uri) { //查詢下載進度,使用DownloadManager.Query
 } }

  

效果圖

   



注:某些機型可能預覽失敗, 可能是so文件無法適應64位機型,需在build.gradle下的defaultConfig{}中加入:

 ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }

 

某些機型可能無法下載含有中文路徑的文件,可進行轉碼處理:

    /** * 將url進行encode,解決部分手機無法下載含有中文url的文件的問題(如OPPO R9) * * @param url * @return * @author xch */
    private String toUtf8String(String url) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < url.length(); i++) { char c = url.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = String.valueOf(c).getBytes("utf-8"); } catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k).toUpperCase()); } } } return sb.toString(); }

 

源碼已上傳至GitHub,需要的可以下載:https://github.com/yangxch/TBSFileBrowsing

轉載請注明:https://www.cnblogs.com/xch-yang/p/9361305.html 

 

 

 


 

  更多技術干貨,歡迎關注我的公眾號:ChaoYoung

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM