今天只記錄小的簡單的東西,由於要睡覺了。java
若是你想作一個Hybrid應用,也許有多種方式,也許使用PhoneGap,也許只使用WebView,也許在Native的某個頁面嵌入一部分的WebView。服務器
具體使用請以自身需求爲準。那麼今天說說最最輕量的一個方案:咱們有這麼個需求,有的頁面須要使用 Native,有的頁面須要使用WebView,同時,Native改變可能比較小,WebView的內容改動是不少的,由於WebView中呈現的內容在服務器端,所以它的好處就是不須要升級軟件而直接爲用戶提供新功能。函數
那麼基於這麼一種業務需求,咱們想到的其中一個辦法就是使用自定義的Schema,使用一個統一的Schema管理器管理,對於不一樣的Schema咱們利用Intent的一些特性,跳到咱們所須要的Activity裏,呈現咱們所須要的內容便可。.net
那麼咱們這裏用到了一個很小的組件類就是java.net.URI 這個組件,想必看見這個類必然會想到java.net.URL類吧。URI全稱是Uniform Resource Identifier(通用資源標識符),URL這個類是Uniform Resource Locator(統一資源定位符)(摘自百度百科)。不少人可能混淆兩個概念,其實只要只要URL是URI的子集便可,也就是說,相對來說,URI的定義會更普遍抽象一些。code
引用一個咱們自定義Schema的一個URI例子orm
lwy://cn.com.zjseek.lwy/news?id=2&path=3對象
這裏Schema,Location,Path,Query等都俱全了,那麼有什麼用呢?
Location能夠指定一個包名,咱們用java.net.URI對象的構造函數生成後,用getHost方法能獲取到它的「主機」資源
URI uri = new URI("lwy://cn.com.zjseek.lwy/news?id=2&path=3"); System.out.println(uri.getScheme()); // lwy System.out.println(uri.getHost()); // cn.com.zjseek.lwy System.out.println(uri.getPath()); // /news System.out.println(uri.getQuery()); // id=2&path=3
運行這段代碼能獲得每一部分的結果。
那麼組裝Intent的時候,能夠指定包名(Host),而後指定Action名(path),而後增長傳遞的數據和Fragment(Query)。
這樣就很好的把一個跳轉到某個應用某個頁面的的行爲用URI指定出來。方便應用和應用之間相互跳轉。開發
Intent intent = new Intent(); intent.setPackage(uri.getHost()); intent.setAction(uri.getPath()); ...
這樣的URI也很是適合在WebView中用<a>
標籤進行跳轉,最終方便了咱們進行HybridApp的開發。get