Android 應用內部打開PDF、Excel、Word文檔你們Get了么?
每日新聞
網約車市場競爭重啟
美團高調殺入的出行行業混戰還未結束,合併的消息又再度傳來。
近日,有消息稱,兩家分別為紅色圖標和藍色圖標的出行公司即將宣布合併。業內人士稱,兩家公司分別是e代駕和首汽約車。在雙方的官方微博上,也發布了「自古紅藍出CP」的「曖昧」圖片。但雙方公關團隊對北京晨報記者表示,對上述消息暫時不方便透露。
公開資料顯示,傳聞中涉及的e代駕成立於2011年,其使用人群主要是白領、金領,包括有一定經濟實力偏重社交的用戶群體。2015年7月,滴滴開通代駕業務,與e代駕開啟了3個多月的燒錢大戰,並最終迫使e代駕做出了裁員20%的決定。最近幾年,代駕市場的競爭格局趨於平靜,e代駕在行業中也很少發聲。首汽約車是首汽集團旗下的互聯網約車平台。2015年9月16日,「首汽約車」APP正式推出,與市面現有專車不同,首汽約車車輛全部為政府許可的出租運營車輛,掛有北京計程車特有的「京B」牌照。
北京晨報記者發現,首汽約車的新版App已經悄悄上線了代駕業務模塊,並且e代駕的新版App里同樣新增了約車業務。但也有接近雙方的知情人士稱,雙方主要是戰略層面的合作,並非是合併,接下來兩家公司會打通App,實現流量互換。
在網約車格局再度開啟混戰模式的今天,抱團取暖或許是促使二者走到一起的原因,也不排除雙方為了市場競爭發聲而故意為之。實際上,隨著近日美團的高調入局,滴滴遭遇的一系列輿論危機,以及首汽約車和e代駕合併的傳言四起,平靜了兩三年的網約車市場格局的平衡正在打破,競爭重啟將是行業大趨勢
為什麼需要在Android應用內打開PDF、Word、Excel等文檔?
由於公司項目有一部分功能是能觀看新聞,但是這些新聞的內容並不都是一個HTML或者鏈接直接可以使用Android WebView直接打開,而是這些新聞詳情中含有各種類型的文檔都存在比如:PDF、Word、Excel等等文檔。由於之前趕項目的時候,處理方式是直接調用系統瀏覽器下載查看,項目快完結時,公司老大說我們需要將我們的新聞在我們自己的應用內部打開,這樣顯得我們專業,而且友好,讓我們去想個方案,至此需求就出來。
我相信Android 開發的都是想打人的,為啥IOS直接使用系統WebView就能直接打開所有文檔,而我們就不行。這話說來就要怪Google爸爸了,Google爸爸其實是有方案解決,就是使用Google Service。但是由於國內的網路原因,所以這種方法只能放棄了。
我相信這個可能有很多的解決方法,但是我這是只是記錄一下我自己的解決方法,如果還有更好的方法,還希望各位給我指出,感謝。
先看看我的實現效果圖:
GIF
解決方法
我這裡是使用騰訊的TBS內核,來替換掉Android 原生的WebView。至於為什麼使用X5內核呢?理由有幾點:
騰訊大佬的東西(雖然討論區還是有些BUG,但是不影響大局)
微信、QQ都是使用的TBS內核
使用的TBS內核的人多,討論區熱鬧,有很多的解決方案。
TBS內核優點:
1. TBS(騰訊瀏覽服務)的優勢
1) 速度快:相比系統webview的網頁打開速度有30+%的提升;
2) 省流量:使用雲端優化技術使流量節省20+%;
3) 更安全:安全問題可以在24小時內修復;
4) 更穩定:經過億級用戶的使用考驗,CRASH率低於0.15%;
5) 兼容好:無系統內核的碎片化問題,更少的兼容性問題;
6) 體驗優:支持夜間模式、適屏排版、字體設置等瀏覽增強功能;
7) 功能全:在Html5、ES6上有更完整支持;
8) 更強大:集成強大的視頻播放器,支持視頻格式遠多於系統webview;
9) 視頻和文件格式的支持x5內核多於系統內核
10) 防劫持是x5內核的一大亮點
2. 運行環境
1)手機ROM版本高於或等於2.2版本
2)手機RAM大於500M,該RAM值通過手機 /proc/meminfo 文件的MemTotal動態獲取
註:如果不滿足上述條件,SDK會自動切換到系統WebView,SDK使用者不用關心該切換過程。
3. SDK尺寸指標
1)SDK提供的JAR包約250K
TBS內核的文件能力
APP在接入文件服務後,即可支持主流9種格式。升級文件服務後,可支持46種文件格式。
接入TBS
1
導入Jar包
官網下載好Android Studio接入示例,將TBS jar包放入libs文件夾下面如圖:
申請必要的許可權:
2
初始化TBS
一般TBS的X5內核初始化是放在Application中進行,如圖是我的項目中初始化地方:
下面是系統WebView的類和tbs內核的類的區別:
tbs的內核的類名和系統的基本一致,而且使用方法也是一致,這裡就不贅述了。
3
64位手機
這個是TBS官網的解釋:
x5內核暫時不提供64位的so文件,在64位手機上需要讓APP以32位模式運行。具體操作如下:
1.如果使用是Eclipse則需要將所有的.so文件都放置在so載入目錄:lib/armeabi文件夾下(沒有該目錄則新建一個,AP中沒有使用到.so文件則需要拷貝任意一個32位的so文件到該目錄下,如果沒有合適的so可以到官網http://x5.tencent.com/tbs/sdk.html下載官網「SDK接入示例「,拷貝對應目錄下的liblbs.so文件),lib文件夾下不要有其他以」armeabi「開頭的文件夾。
2.如果使用的是 Android studio則需要進行兩項配置,
(1)打開對應module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果沒有defaultConfig{}則手動添加)添加如下配置: ndk,如果配置後編譯報錯,那麼需要在gradle.properties文件中加上Android.useDeprecatedNdk=true;
(2)找出build.gradle中配置的so載入目錄:jniLibs.srcDir:customerDir,如果沒有該項配置則so載入目錄默認為:src/main/jniLibs,需要將.so文件都放置在so載入目錄的armeabi文件夾下(沒有該目錄則新建一個,AP中沒有使用到.so文件則需要拷貝任意一個32位的so文件到該目錄下,如果沒有合適的so可以到官網http://x5.tencent.com/tbs/sdk.html下載官網「SDK接入示例「,拷貝對應目錄下的liblbs.so文件),so載入目錄下不要有其他以」armeabi「開頭的文件夾。
我就用我的接入的圖片說明:
1.添加32位的so庫
這個liblbs.so文件可以是任意的32位的so文件,我們一般自己難得去找,或者你有現成的更好,這裡我直接拷貝示例裡面的:
2.在 app/build.gradle 文件中對 libs 目錄中 jar 文件的依賴
3.**需要注意的是:**TBS 目前只提供 armeabi 類型 CPU 架構的 so 庫。當然,也可以將 so 文件放置於 libs 目錄下,只不過需要在 app/build.gradle 中額外修改 so 文件依賴配置:
那麼我們要怎麼確認是否這個TBS的X5內核已經載入成功了呢?
如下圖,當你長按選擇複製的時候出現下面的藍色水滴狀就表示tbs的X5內核載入成功:
4
下載文件到本地
下載文件到本地,我們就使用系統的http請求來下載文件,假如你開發中用的Okhttp或者其他的網路框架,直接使用網路框架下載就好了。代碼如下:
5
TbsReaderView載入文件
創建TbsReaderView:
Activity 中實現介面,並通過 Java 代碼動態創建 TbsReaderView 對象,將其添加到 content view 當中。
實現介面,重寫方法:
暫不知這個方法有什麼用,我也沒使用到,所以未深究。
可能你會有疑惑,為什麼不將放在 layout 布局文件中,而是在代碼中手動 add 進去。經測試,這麼做會報錯,提示找不到這個類。然後我們查看源碼,發現只有這麼一個構造函數:
最後一步傳入參數,打開文件即可:
說明下這裡的fileType是一個字元串類型的,其實就是文件的後綴名,例如Word類型的是「doc」 、 PDF的類型是「pdf」,一般可以通過url來截取到類型。
總結
Android 應用中打開文件,上面只是我個人的項目使用的方法,當然還有其他的方法。歡迎大家都去嘗試,其實一般這種按照官網的文檔來做是沒有什麼問題的,但是說實話文檔還是有點簡陋,只有自己動手去做才比較清楚。還有點就是告訴大家:tbs的X5內核還是有問題的,並不是說騰訊的都沒問題,可以去tbs的討論區看看都有哪些問題,然後根據這些問題,確定自己的項目是否適合使用。
關注我,一定會有意想不到的東西等你:
每天專註分享Android、JAVA乾貨
備註:程序圈LT
TAG:程序圈LT |