Android HybridApp开发——自定义Schema的URI应用


今天只记录小的简单的东西,因为要睡觉了。

如果你想做一个Hybrid应用,也许有多种方式,也许使用PhoneGap,也许只使用WebView,也许在Native的某个页面嵌入一部分的WebView。

具体使用请以自身需求为准。那么今天说说最最轻量的一个方案:我们有这么个需求,有的页面需要使用 Native,有的页面需要使用WebView,同时,Native改变可能比较小,WebView的内容改动是很多的,因为WebView中呈现的内容在服务器端,因此它的好处就是不需要升级软件而直接为用户提供新功能。

那么基于这么一种业务需求,我们想到的其中一个办法就是使用自定义的Schema,使用一个统一的Schema管理器管理,对于不同的Schema我们利用Intent的一些特性,跳到我们所需要的Activity里,呈现我们所需要的内容即可。

那么我们这里用到了一个很小的组件类就是java.net.URI 这个组件,想必看见这个类必然会想到java.net.URL类吧。URI全称是Uniform Resource Identifier(通用资源标识符),URL这个类是Uniform Resource Locator(统一资源定位符)(摘自百度百科)。很多人可能混淆两个概念,其实只要只要URL是URI的子集即可,也就是说,相对来讲,URI的定义会更广泛抽象一些。

引用一个我们自定义Schema的一个URI例子

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的开发。


2 responses on “Android HybridApp开发——自定义Schema的URI应用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>