Android 中的 router

2017-08-23  本文已影响23人  7ff53e360bcc

Android 中的 router

在正常的Android 开发过程中。常用的跳转逻辑是使用Intent,我们在处理应用内跳转的时候并无太多问题。

Intent intent = new Intent(context, TartgetActivity.class);
startActivity(intent);

由于移动开发越来越灵活,前后端的依赖程度更高。所以更多的使用场景是后台来操作跳转。同时兼容多端,指哪打哪。

具体使用场景如下:

  1. 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面或者执行相应动作
  2. H5页面点击锚点,根据锚点具体跳转路径App端跳转具体的页面或者执行相应动作
  3. 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中,我们可以设置跳转,或者对话框等操作。

处理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>
上一篇下一篇

猜你喜欢

热点阅读