一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

android H5 應(yīng)用內(nèi)跳轉(zhuǎn)Scheme協(xié)議

 quasiceo 2017-09-23

什么是URL Scheme

概述:
android中的scheme是一種頁(yè)面內(nèi)跳轉(zhuǎn)協(xié)議,是一種非常好的實(shí)現(xiàn)機(jī)制,通過(guò)定義自己的scheme協(xié)議,可以非常方便跳轉(zhuǎn)app中的各個(gè)頁(yè)面;通過(guò)scheme協(xié)議,服務(wù)器可以定制化告訴App跳轉(zhuǎn)那個(gè)頁(yè)面,可以通過(guò)通知欄消息定制化跳轉(zhuǎn)頁(yè)面,可以通過(guò)H5頁(yè)面跳轉(zhuǎn)頁(yè)面等。

URL Scheme應(yīng)用場(chǎng)景

概述:
客戶端應(yīng)用可以向操作系統(tǒng)注冊(cè)一個(gè)URL Scheme,該scheme用于從瀏覽器或其他應(yīng)用中啟動(dòng)本應(yīng)用,通過(guò)scheme協(xié)議來(lái)跳轉(zhuǎn)到相應(yīng)的APP界面,比如商品詳情,活動(dòng)詳情,商家詳情等等界面。也可以執(zhí)行某些指定動(dòng)作,如完成支付等。也可以在應(yīng)用內(nèi)部通過(guò)H5頁(yè)面來(lái)直接跳轉(zhuǎn)APP某個(gè)界面。

  • URL Scheme應(yīng)用場(chǎng)景分為以下4中:

    • 服務(wù)器下發(fā)跳轉(zhuǎn)路徑,客戶端根據(jù) 服務(wù)器下發(fā)跳轉(zhuǎn)路徑跳轉(zhuǎn)相應(yīng)的頁(yè)面
    • H5頁(yè)面點(diǎn)擊描點(diǎn),根據(jù)描點(diǎn)具體跳轉(zhuǎn)路徑APP端跳轉(zhuǎn)具體的頁(yè)面
    • APP端收到服務(wù)器端下發(fā)的PUSH通知欄消息,根據(jù)消息的點(diǎn)擊跳轉(zhuǎn)路徑跳轉(zhuǎn)相關(guān)頁(yè)面
    • APP根據(jù)URL跳轉(zhuǎn)到另外一個(gè)APP指定頁(yè)面

URL Scheme協(xié)議格式:

URL Scheme 屬性分為,Scheme,Host,port,path,query,

test://shangjia/shangjiaDetail?shagnjiaId=222

通過(guò)上面的路徑我們來(lái)分析,

  • scheme : test
  • host : shangjia
  • path : shangjiaDetail
  • query : shangjiaId=222

我們可以用代碼來(lái)驗(yàn)證:
驗(yàn)證的地址是這個(gè):test://start/?id=431&name=zhouyuan&age=23

Intent intent = getIntent();
    String action = intent.getAction();
    String scheme = intent.getScheme();
    Uri uri = intent.getData();
    System.out.println("action:" + action);
    System.out.println("scheme:" + scheme);
    if (uri != null) {
        String host = uri.getHost();
        String dataString = intent.getDataString();
        String id = uri.getQueryParameter("id");
        String name = String.valueOf(uri.getQueryParameters("name"));
        String age = uri.getQueryParameter("age");
        String path = uri.getPath();
        String path1 = uri.getEncodedPath();
        String queryString = uri.getQuery();
        System.out.println("host:" + host);
        System.out.println("dataString:" + dataString);
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        System.out.println("age:" + age);
        System.out.println("path:" + path);
        System.out.println("path1:" + path1);
        System.out.println("queryString:" + queryString);
    }

看圖

從這個(gè)例子我們能看出:我們是想跳入商家詳情界面。主要的這些參數(shù),都是需要自己去和前端去達(dá)成一個(gè)協(xié)議。并不是說(shuō)非要按照我的這個(gè)例子來(lái)。比如你的項(xiàng)目是做汽車的,可以把URL寫成

test://qiche/qicheDetail?qicheId=222

這些都沒什么影響。

在AndroidMainfest.xml 配置 scheme

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/logo"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".activity.StartActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            //這三方必須配置
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="web"
                android:scheme="test" />
            <data
                android:host="start"
                android:scheme="test" />
        </intent-filter>

    </activity> 
<activity android:name=".activity.LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="login"
                android:scheme="test" />
        </intent-filter>
    </activity>

當(dāng)網(wǎng)頁(yè)或者通知欄,Android代碼發(fā)送這種規(guī)則scheme時(shí)這時(shí)候就會(huì)調(diào)起相對(duì)應(yīng)界面。

那么接下來(lái)我們就該測(cè)試一波:

  1. 通過(guò)服務(wù)器下發(fā)跳轉(zhuǎn)路徑跳轉(zhuǎn)相應(yīng)頁(yè)面
    button.setOnClickListener(v -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("test://login/123123123"))));

看下圖:

這個(gè)前提,你需要在AndroidMainfest.xml配置,你看上面的代碼。


2.通過(guò)H5頁(yè)面的錨點(diǎn)跳轉(zhuǎn)相應(yīng)的頁(yè)面

html代碼:

 <html>
<head>
<title>Js調(diào)用Android</title>

</head>

<body>
<a href="test://start/?id=431&name=zhouyuan&age=23">跳轉(zhuǎn)start</a>
<a href="test://web/?id=431&name=zhouyuan&age=23">跳轉(zhuǎn)web</a>
<a href="test://login/?id=431&name=zhouyuan&age=23">跳轉(zhuǎn)Login</a>
</body>
</html>

//webview代碼
webview.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            System.out.println("view = [" + view + "], url = [" + url + "]");
            return true;
        }
    });

  • 這個(gè)具體的我就不再講了,我們已經(jīng)獲取到了URL Scheme協(xié)議地址。我們可以直接用一些正則來(lái)取到相應(yīng)的字符串,然后根據(jù)該字符串來(lái)判斷,跳到相應(yīng)的界面。

  • 如果你覺得改方法比較麻煩。那可以直接在AndroidMainfest.xml配置相應(yīng)的屬性,前提是URL協(xié)議地址要相應(yīng)。不然你是跳轉(zhuǎn)不了的。

具體的可以自行測(cè)試,就是把 webview.setWebViewClient(new WebViewClient()){}給注釋掉。
我們點(diǎn)擊跳轉(zhuǎn)Login時(shí),會(huì)有意想不到的效果。具體還是不建議這么做,自己想一想,前面也講到在項(xiàng)目中可能URL Scheme協(xié)議并不止一個(gè)界面。如果你在AndroidMainfest.xml里面去給每一個(gè)可能相關(guān)的界面都配置scheme屬性,那你整個(gè)界面看著也不美觀,而且還都是重復(fù)的配置。所以還是建議根據(jù)URL地址來(lái)判斷跳轉(zhuǎn)。


3.根據(jù)服務(wù)器下發(fā)通知欄消息,APP跳轉(zhuǎn)相應(yīng)的界面

其實(shí),我們簡(jiǎn)單的想一下,都是同樣的邏輯。把服務(wù)器下發(fā)的通知欄消息,里面的URL地址數(shù)據(jù)拿到,進(jìn)行解析判斷,然后跳轉(zhuǎn)到相應(yīng)的界面。具體代碼就不貼了。

總結(jié):
Android中的URL Scheme是一個(gè)非常好的機(jī)制,我們可以通過(guò)自定義Scheme屬性,讓我們方便,靈活的在APP內(nèi)隨意跳轉(zhuǎn)。如果不明白請(qǐng)留言。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    精品日韩中文字幕视频在线| 少妇视频一区二区三区| 人妻人妻人人妻人人澡| 亚洲av在线视频一区| 国产色一区二区三区精品视频| 青青操成人免费在线视频| 91爽人人爽人人插人人爽| 91福利视频日本免费看看| 九九热精品视频免费观看| 国产熟女一区二区精品视频| 色无极东京热男人的天堂| 欧美又黑又粗大又硬又爽| 国产一区二区三区午夜精品| 黄色av尤物白丝在线播放网址| 一区二区日韩欧美精品| 日本高清不卡在线一区| 欧美乱妇日本乱码特黄大片| 麻豆亚州无矿码专区视频| 欧美亚洲三级视频在线观看| 东北女人的逼操的舒服吗| 99亚洲综合精品成人网色播 | 91人妻人澡人人爽人人精品| 成年人视频日本大香蕉久久| 日韩精品中文字幕在线视频| 午夜亚洲精品理论片在线观看| 欧美偷拍一区二区三区四区| 国产毛片av一区二区三区小说| 中文字幕在线五月婷婷| 麻豆印象传媒在线观看| 人妻一区二区三区多毛女| 高跟丝袜av在线一区二区三区| 婷婷亚洲综合五月天麻豆| 日韩黄色大片免费在线| 国产内射一级一片内射高清| 色哟哟精品一区二区三区| 婷婷开心五月亚洲综合| 日本人妻免费一区二区三区| 午夜福利精品视频视频| 欧美日韩三区在线观看| 好吊妞视频免费在线观看| 日本欧美一区二区三区就|