什麼是TBShtml
依託 X5 內核強大的能力,致力於提供優化移動端瀏覽體驗的整套解決方案(官網介紹)。咱們可利用其作文件瀏覽功能,支持多種文件格式,徹底能夠知足需求。更多介紹請看官網:http://x5.tencent.com/java
接入TBSandroid
TBS只能瀏覽本地文件,對於遠程文件須要先進行下載,咱們先看瀏覽本地文件如何實現。git
1. 下載SDK:http://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'] } } }
這裏主要使用到了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