android知识一角

Android页面跳转协议_URL Scheme详解

2019-01-11  本文已影响359人  一笑小先生

什么是 URL Scheme?

android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

URL Schema应用场景

客户端应用可以在服务端注册一个URL Scheme,该Scheme用于从浏览器或其他应用启动本应用。通过指定的URL字段,可以让应用在被调起后直接打开某些特定界面,比如商品详情页,活动详情页等。也可以执行某些特定的动作,如完成支付等。也可以在应用内通过html页来直接调用显示app内的某个界面。综上URL Schema使用场景大致分以下几种:

URL Schema协议格式

一个完整的Scheme的协议格式由 scheme、userInfo、host、port、path、query和fragment 组成。结构如下:

scheme://userInfo@host:port/path?query#fragment

scheme://是固定的格式。userInfo@ 可以省略,host 是必须的。port 、query 和 fragment 也是可以省略的。

其中scheme既可以是Android已经定义好的协议,也可使用我们自定义的。Android 常见的scheme 协议有:content 、file、http 等。如果我们自定义协议就可以随意使用一些字符串来限定协议。当然最好是有一定含义的字符串。如下面的协议:

wangyy://ricky@com.wangyy.sample:8888/goodDetail?param1=参数1&param2=参数2#片段"

Android中 URL Scheme的使用

首先配置需要跳转的Activity,Mainifest文件配置如下:

<activity android:name=".SchemeActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:host="com.wangyy.sample"
                    android:path="/goodsDetail"
                    android:port="8888"
                    android:scheme="wangyy" />
            </intent-filter>
        </activity>

SchemeActivity

class SchemeActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_scheme)
        val data = intent.data
        Log.i("TAG", "host = ${data.host} path = ${data.path} query = ${data.query}")
        val param = data.getQueryParameter("goodsId")
        Log.i("TAG", "param: $param")
    }
}

1. H5唤起APP界面

在网页中调用:

<a href="wangyy://com.wangyy.sample:8888/goodsDetail?goodsId=10011002">打开商品详情</a>

404?,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的。

2. APP内跳转界面

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        helloBtn.setOnClickListener {
            val intent = Intent(Intent.ACTION_VIEW,
                    Uri.parse("wangyy://com.wangyy.sample:8888/goodsDetail?goodsId=10011002"))
            startActivity(intent)
        }
    }
}

运行结果如下:

01-11 11:18:55.542 7920-7920/com.wangyy.example I/TAG: host = com.wangyy.sample path = /goodsDetail query = goodsId=10011002
01-11 11:18:55.542 7920-7920/com.wangyy.example I/TAG: param: 10011002

其他运用方式都基于样例,源码地址:URL_SchemeDemo

上一篇 下一篇

猜你喜欢

热点阅读