Android 中的 router
Android 中的 router
在正常的Android 开发过程中。常用的跳转逻辑是使用Intent,我们在处理应用内跳转的时候并无太多问题。
Intent intent = new Intent(context, TartgetActivity.class);
startActivity(intent);
由于移动开发越来越灵活,前后端的依赖程度更高。所以更多的使用场景是后台来操作跳转。同时兼容多端,指哪打哪。
具体使用场景如下:
- 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面或者执行相应动作
- H5页面点击锚点,根据锚点具体跳转路径App端跳转具体的页面或者执行相应动作
- App端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
URL scheme
客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如车辆详情页、订单详情页、消息通知页、促销广告页等等。也可以执行某些指定动作,如订单支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。
客户端自定义的 URL 作为从一个应用调用另一个的基础,遵循 RFC 1808 (Relative Uniform Resource Locators) 标准。这跟我们常见的网页内容 URL 格式一样。
一个普通的 URL 分为几个部分,scheme、host、relativePath、query。
http://www.baidu.com/s?rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709
name | value |
---|---|
scheme | http |
host | www.baidu.com |
relativePath | s |
query | rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709 |
根据上述Url,我们可以在自己的app中进行定制。
例如:首先统一好各端的 scheme与host ,在path中,我们可以设置跳转,或者对话框等操作。
-
xixi://xixi.host/action/dialog
-
xixi://xixi.host/action/dial
-
xixi://xixi.host/action/copy
-
xixi://xixi.host/jump/main
-
xixi://xixi.host/jump/h5?url="http://www.google.com"
处理relativePath
检测为action的时候我们弹出对话框,进行拨号或者copy等操作。
检测为jump的时候直接跳转到指定的Activity
接受跳转的Activity需要在manifest中配置
<!-- web可进入app -->
<activity android:name=".ui.activity.SchemeFilterActivity">
<!-- Schame -->
<intent-filter>
<data
android:host="xixi.host"
android:scheme="xixi" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>