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

什麼是TBShtml

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

接入TBSandroid

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

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


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

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

  

2. 使用

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

 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 對象傳遞文件地址和另外一個臨時目錄地址。gradle

 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"/>

 

 

下載遠程文件ui

 利用系統提供的 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

轉載請註明:http://www.javashuo.com/article/p-bvuwlrxf-ed.html 

 

 

 


 

  更多技術乾貨,歡迎關注個人公衆號:ChaoYoung

相關文章
相關標籤/搜索