本發(fā)明屬于移動應(yīng)用開發(fā)領(lǐng)域,特別涉及一種基于移動終端的跨平臺的文檔閱讀器及其實現(xiàn)方法。
背景技術(shù):
目前,智能移動終端得到了普及,移動應(yīng)用軟件隨之得到了快速的發(fā)展,各個應(yīng)用市場中上架的適合手機、平板等終端的應(yīng)用也越來越多,而很多應(yīng)用都有查看各種文檔的需求。
現(xiàn)在市場上有很多android版本和IOS版本的PDF、TXT、Office等類型的文檔閱讀器,但這些閱讀器普遍存在不能跨平臺使用和同時兼容不同格式文檔的問題。另一方面,隨著HTML5技術(shù)的成熟,越來越多的移動端開發(fā)者開始使用HTML5+Android/IOS的混合開發(fā)方式來實現(xiàn)跨平臺技術(shù),基于這種開發(fā)方式,本發(fā)明不僅解決了文檔閱讀器跨平臺的問題,還解決了多文檔格式兼容問題。
技術(shù)實現(xiàn)要素:
【要解決的技術(shù)問題】
本發(fā)明的目的是提供一種基于移動終端的跨平臺的文檔閱讀器及其實現(xiàn)方法,以解決目前的閱讀器不能跨平臺使用和同時兼容不同格式文檔的問題。
【技術(shù)方案】
本發(fā)明是通過以下技術(shù)方案實現(xiàn)的。
本發(fā)明首先涉及一種基于移動終端的跨平臺的文檔閱讀器的實現(xiàn)方法,包括以下步驟:
A、開發(fā)文檔閱讀器的原生模塊,最終用戶通過打開文檔模塊傳入要打開文檔的路徑,所述文檔閱讀器的原生模塊包括Android原生閱讀器和iOS原生閱讀器,所述Android原生閱讀器為用Android原生代碼開發(fā)的能夠兼容不同類型文檔的Android閱讀器,所述iOS原生閱讀器是用iOS原生代碼開發(fā)的能夠兼容不同類型文檔的iOS閱讀器;
B、通過設(shè)備識別模塊獲得當(dāng)前設(shè)備類型;
C、如果當(dāng)前設(shè)備的類型為Android類型,則調(diào)用javascriptInterface函數(shù)接口,javascriptInterface函數(shù)接口調(diào)用Android原生閱讀器打開文檔;
D、如果當(dāng)前設(shè)備的類型為iOS類型,則構(gòu)建打開文檔閱讀器的URL并調(diào)用URL發(fā)生器,URL攔截器攔截到URL后,解析出需要調(diào)用的iOS方法名及文檔路徑,URL攔截器調(diào)用iOS原生閱讀器,打開文檔。
作為一種優(yōu)選的實施方式,所述設(shè)備識別模塊通過HTML DOM userAgent屬性判斷瀏覽器類型并確定該瀏覽器所在的設(shè)備是否為iOS類型,若不是iOS類型,則該設(shè)備為Android類型。
作為另一種優(yōu)選的實施方式,所述URL發(fā)生器用于動態(tài)創(chuàng)建一個iframe并為該iframe設(shè)置src屬性,所述URL攔截器通過攔截src屬性值得到文檔路徑。
作為另一種優(yōu)選的實施方式,所述步驟A還包括:在Eclipse環(huán)境和Xcode環(huán)境下進(jìn)行文檔閱讀器的原生模塊開發(fā)。
作為另一種優(yōu)選的實施方式,所述文檔的類型為PDF、TXT或Office。
本發(fā)明還涉及一種基于移動終端的跨平臺的文檔閱讀器,包括Android原生閱讀器、iOS原生閱讀器、設(shè)備識別模塊、URL發(fā)生器、URL攔截器、打開文檔模塊、javascriptInterface函數(shù)接口、iOS類型打開模塊和Android類型打開模塊,
所述Android原生閱讀器是用Android原生代碼開發(fā)的能夠兼容不同類型文檔的Android閱讀器;
所述iOS原生閱讀器是用iOS原生代碼開發(fā)的能夠兼容不同類型文檔的iOS閱讀器;
所述打開文檔模塊用于傳入要打開文檔的路徑;
所述設(shè)備識別模塊用于獲得當(dāng)前設(shè)備類型;
所述Android類型打開模塊被配置成:如果當(dāng)前設(shè)備的類型為Android類型,則調(diào)用javascriptInterface函數(shù)接口,javascriptInterface函數(shù)接口調(diào)用Android原生閱讀器打開文檔;
所述iOS類型打開模塊被配置成:如果當(dāng)前設(shè)備的類型為iOS類型,則構(gòu)建打開文檔閱讀器的URL并調(diào)用URL發(fā)生器,URL攔截器攔截到URL后,解析出需要調(diào)用的iOS方法名及文檔路徑,URL攔截器調(diào)用iOS原生閱讀器,打開文檔。
作為一種優(yōu)選的實施方式,所述設(shè)備識別模塊具體被配置成:通過HTML DOM userAgent屬性判斷瀏覽器類型并確定該瀏覽器所在的設(shè)備是否為iOS類型,若不是iOS類型,則該設(shè)備為Android類型。
作為另一種優(yōu)選的實施方式,所述URL發(fā)生器用于動態(tài)創(chuàng)建一個iframe并為該iframe設(shè)置src屬性,所述URL攔截器通過攔截src屬性值得到文檔路徑。
作為另一種優(yōu)選的實施方式,所述文檔的類型為PDF、TXT或Office。
【有益效果】
本發(fā)明提出的技術(shù)方案具有以下有益效果:
本發(fā)明實現(xiàn)了跨平臺且兼容不同類型文檔的閱讀器,能夠根據(jù)文檔傳入的路徑,判斷文檔類型,并選擇合適的方式打開文檔,供用戶閱讀,提升了用戶體驗。
附圖說明
圖1為本發(fā)明的實施例一提供的基于移動終端的跨平臺的文檔閱讀器的原理框圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將對本發(fā)明的具體實施方式進(jìn)行清楚、完整的描述。
實施例一
圖1為本發(fā)明實施例一提供的基于移動終端的跨平臺的文檔閱讀器的原理框圖。如圖1所示,該閱讀器包括Android原生閱讀器、iOS原生閱讀器、設(shè)備識別模塊、URL發(fā)生器、URL攔截器、打開文檔模塊、javascriptInterface函數(shù)接口、iOS類型打開模塊和Android類型打開模塊。
Android原生閱讀器是用Android原生代碼開發(fā)的能夠兼容不同類型文檔的Android閱讀器。iOS原生閱讀器是用iOS原生代碼開發(fā)的能夠兼容不同類型文檔的iOS閱讀器。其中,文檔的類型為PDF、TXT或Office。
打開文檔模塊用于傳入要打開文檔的路徑。
設(shè)備識別模塊用于獲得當(dāng)前設(shè)備類型。具體地,設(shè)備識別模塊被配置成:通過HTML DOM userAgent屬性判斷瀏覽器類型并確定該瀏覽器所在的設(shè)備是否為iOS類型,若不是iOS類型,則該設(shè)備為Android類型。
Android類型打開模塊被配置成:如果當(dāng)前設(shè)備的類型為Android類型,則調(diào)用javascriptInterface函數(shù)接口,javascriptInterface函數(shù)接口調(diào)用Android原生閱讀器打開文檔。
URL發(fā)生器用于動態(tài)創(chuàng)建一個iframe并為該iframe設(shè)置src屬性,URL攔截器通過攔截src屬性值得到文檔路徑。
iOS類型打開模塊被配置成:如果當(dāng)前設(shè)備的類型為iOS類型,則構(gòu)建打開文檔閱讀器的URL并調(diào)用URL發(fā)生器,URL攔截器攔截到URL后,解析出需要調(diào)用的iOS方法名及文檔路徑,URL攔截器調(diào)用iOS原生閱讀器,打開文檔。
實施例一中的閱讀器的實現(xiàn)方法可以參考下述具體方法實施例。
實施例二
實施例二為一種基于移動終端的跨平臺的文檔閱讀器的實現(xiàn)方法,該方法包括以下步驟:
(1)、開發(fā)文檔閱讀器的原生模塊,可以在Eclipse環(huán)境和Xcode環(huán)境下進(jìn)行文檔閱讀器的原生模塊開發(fā),最終用戶通過打開文檔模塊傳入要打開文檔的路徑,所述文檔閱讀器的原生模塊包括Android原生閱讀器和iOS原生閱讀器,所述Android原生閱讀器為用Android原生代碼開發(fā)的能夠兼容不同類型文檔的Android閱讀器,所述iOS原生閱讀器是用iOS原生代碼開發(fā)的能夠兼容不同類型文檔的iOS閱讀器。文檔的類型為PDF、TXT或Office。
具體地,iOS端實現(xiàn)能打開不同類型文檔的原生閱讀器,iOS是通過依賴QuickLook框架實現(xiàn)的多格式文檔預(yù)覽,通過把傳入的文檔路徑解析成相應(yīng)的url路徑,由QuickLook框架識別文檔路徑及格式打開文檔,具題實現(xiàn)是通過QLPreviewControllerDelegate代理方法,示例代碼如下:
(id<QLPreviewItem>)previewController:(QLPreviewController
*)controller previewItemAtIndex:(NSInteger)index{
NSURL*url=[NSURL fileURLWithPath:path];
Return url;
}
其中path為傳入的文檔路徑,若傳入文檔為txt格式文檔一般是又編碼格式的,ios系統(tǒng)9.0以下的版本是不能自動識別編碼之后的txt中文文檔,直接預(yù)覽文檔會出現(xiàn)亂碼情況,如果需要兼容所有系統(tǒng)版本,那么這里需要進(jìn)行文檔編碼格式轉(zhuǎn)換,本發(fā)明實施例具體解決txt文檔編碼的方法如下:
首先判斷txt文檔的是否編碼,若沒有編碼,直接通過QuickLook框架進(jìn)行路徑解析,預(yù)覽次文檔;若是編碼過的txt文檔,進(jìn)行編碼方式轉(zhuǎn)換,再通過QuickLook框架進(jìn)行路徑解析。編碼過的txt文檔編碼格式一般為UNICODE編碼或者ANSI編碼(-2147482591,-2147482062),本發(fā)明實施例通過將原始文檔轉(zhuǎn)換成NSUTF16StringEncoding編碼格式進(jìn)行txt文檔閱讀。
(2)、通過設(shè)備識別模塊獲得當(dāng)前設(shè)備類型。具體地,該步驟中,設(shè)備識別模塊通過HTML DOM userAgent屬性判斷瀏覽器類型并確定該瀏覽器所在的設(shè)備是否為iOS類型,若不是iOS類型,則該設(shè)備為Android類型。
(3)、如果當(dāng)前設(shè)備的類型為Android類型,則調(diào)用javascriptInterface函數(shù)接口,javascriptInterface函數(shù)接口調(diào)用Android原生閱讀器打開文檔。
(4)、如果當(dāng)前設(shè)備的類型為iOS類型,則構(gòu)建打開文檔閱讀器的URL并調(diào)用URL發(fā)生器,URL攔截器攔截到URL后,解析出需要調(diào)用的iOS方法名及文檔路徑,URL攔截器調(diào)用iOS原生閱讀器,打開文檔。該步驟中,URL發(fā)生器用于動態(tài)創(chuàng)建一個iframe并為該iframe設(shè)置src屬性,URL攔截器通過攔截src屬性值得到文檔路徑。
從以上實施例可以看出,本發(fā)明實施例實現(xiàn)了跨平臺且兼容不同類型文檔的閱讀器,能夠根據(jù)文檔傳入的路徑,判斷文檔類型,并選擇合適的方式打開文檔,供用戶閱讀,提升了用戶體驗。
需要說明,上述描述的實施例是本發(fā)明的一部分實施例,而不是全部實施例,也不是對本發(fā)明的限制?;诒景l(fā)明的實施例,本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明的保護(hù)范圍。