Android組件化開發(fā)之路(二)URL Scheme使用

什么是 URL Scheme?

android中的scheme是一種頁面內(nèi)跳轉(zhuǎn)協(xié)議忿磅,通過定義自己的scheme協(xié)議糯彬,可以跳轉(zhuǎn)app中的各個頁面;通過scheme協(xié)議葱她,服務(wù)器可以定制化告訴App跳轉(zhuǎn)那個頁面撩扒,可以通過通知欄消息定制化跳轉(zhuǎn)頁面,可以通過H5頁面跳轉(zhuǎn)頁面等吨些。

URL Scheme應(yīng)用場景

客戶端應(yīng)用可以向操作系統(tǒng)注冊一個 URL scheme搓谆,該 scheme 用于從瀏覽器或其他應(yīng)用中啟動本應(yīng)用。通過指定的 URL 字段豪墅,可以讓應(yīng)用在被調(diào)起后直接打開某些特定頁面泉手,比如商品詳情頁、活動詳情頁等等偶器。也可以執(zhí)行某些指定動作斩萌,如完成支付等。也可以在應(yīng)用內(nèi)通過 html 頁來直接調(diào)用顯示 app 內(nèi)的某個頁面屏轰。綜上URL Scheme使用場景大致分以下幾種:

  1. 服務(wù)器下發(fā)跳轉(zhuǎn)路徑颊郎,客戶端根據(jù)服務(wù)器下發(fā)跳轉(zhuǎn)路徑跳轉(zhuǎn)相應(yīng)的頁面
  2. H5頁面點擊錨點,根據(jù)錨點具體跳轉(zhuǎn)路徑APP端跳轉(zhuǎn)具體的頁面
  3. APP端收到服務(wù)器端下發(fā)的PUSH通知欄消息亭枷,根據(jù)消息的點擊跳轉(zhuǎn)路徑跳轉(zhuǎn)相關(guān)頁面
  4. APP根據(jù)URL跳轉(zhuǎn)到另外一個APP指定頁面

URL Scheme協(xié)議格式

先來個完整的URL Scheme協(xié)議格式:

http://baidu:8080/newsDetail?type=1&id=10001

通過上面的路徑 Scheme袭艺、Host、port叨粘、path猾编、query全部包含瘤睹,基本上平時使用路徑就是這樣子的。

  1. http代表該Scheme 協(xié)議名稱
  2. baidu代表Scheme作用于哪個地址域
  3. newsDetail代表Scheme指定的頁面
  4. type和id代表傳遞的參數(shù)
  5. 8080代表該路徑的端口號

URL Scheme如何使用

1.)在AndroidManifest.xml中對<activity />標簽增加<intent-filter />設(shè)置Scheme

 <activity
            android:name=".NewsDetailActivity"
            android:theme="@style/AppTheme">
            <!--要想在別的App上能成功調(diào)起App答倡,必須添加intent過濾器-->
            <intent-filter>
                <!--協(xié)議部分轰传,隨便設(shè)置-->
                <data android:scheme="http" android:host="baidu" android:path="/newsDetail" android:port="8080"/>
                <!--下面這幾行也必須得設(shè)置-->
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>

2.)獲取Scheme跳轉(zhuǎn)的參數(shù)

Uri uri = getIntent().getData();
if (uri != null) {
    // 完整的url信息
    String url = uri.toString();
    Log.e(TAG, "url: " + uri);
    // scheme部分
    String scheme = uri.getScheme();
    Log.e(TAG, "scheme: " + scheme);
    // host部分
    String host = uri.getHost();
    Log.e(TAG, "host: " + host);
    //port部分
    int port = uri.getPort();
    Log.e(TAG, "host: " + port);
    // 訪問路勁
    String path = uri.getPath();
    Log.e(TAG, "path: " + path);
    List<String> pathSegments = uri.getPathSegments();
    // Query部分
    String query = uri.getQuery();
    Log.e(TAG, "query: " + query);
    //獲取指定參數(shù)值
    String type=uri.getQueryParameter("type");
    String id = uri.getQueryParameter("id");
    Log.e(TAG, "type: " + type);
    Log.e(TAG, "id: " + id);
}

3.)調(diào)用方式

網(wǎng)頁調(diào)用:

<a href="http://baidu:8080/newsDetail?type=1&id=10001">打開新聞詳情</a>

原生調(diào)用

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://baidu:8080/newsDetail?type=1&id=10001"));
  startActivity(intent);

4.)如何判斷一個Scheme是否有效

PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://baidu:8080/newsDetail?type=1&id=10001"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
    startActivity(intent);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘪撇,隨后出現(xiàn)的幾起案子获茬,更是在濱河造成了極大的恐慌,老刑警劉巖倔既,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渤涌,居然都是意外死亡实蓬,警方通過查閱死者的電腦和手機安皱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門调鬓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腾窝,你說我怎么就攤上這事∠倭溃” “怎么了燕锥?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵辜贵,是天一觀的道長鼻由。 經(jīng)常有香客問我蕉世,道長,這世上最難降的妖魔是什么向楼? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任逻卖,我火速辦了婚禮,結(jié)果婚禮上评也,老公的妹妹穿的比我還像新娘。我一直安慰自己诈乒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布消约。 她就那樣靜靜地躺著导饲,像睡著了一般氯材。 火紅的嫁衣襯著肌膚如雪氢哮。 梳的紋絲不亂的頭發(fā)上听盖,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天皆看,我揣著相機與錄音,去河邊找鬼毛雇。 笑死澎埠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的江耀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼晾腔,長吁一口氣:“原來是場噩夢啊……” “哼壁查!你這毒婦竟也來了睡腿?” 一聲冷哼從身側(cè)響起席怪,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤细层,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盛撑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狮荔,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡雅采,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年宝鼓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沥寥。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒂阱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荞胡,到底是詐尸還是另有隱情廊营,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布慎式,位于F島的核電站,受9級特大地震影響蕾盯,放射性物質(zhì)發(fā)生泄漏蓝丙。R本人自食惡果不足惜装畅,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧等脂,春花似錦上遥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暑中。三九已至灵莲,卻和暖如春线欲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦锨。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吉捶,地道東北人滋早。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓搁进,卻偏偏與公主長得像昔头,于是被迫代替她去往敵國和親峻堰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理仲义,服務(wù)發(fā)現(xiàn),斷路器商蕴,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,516評論 25 707
  • 在Android開發(fā)中,不同Activity之間的跳轉(zhuǎn)和切換是很常見的坟奥,這使得APP的內(nèi)容更加豐富树瞭,功能更為多樣厨埋,...
    登高且賦閱讀 54,803評論 12 61
  • 2017年第二節(jié)課邪媳,選擇自己知識管理訓(xùn)練營第二節(jié)課【快速閱讀】已經(jīng)講完有三四天時間了捐顷。雖然已經(jīng)著手開始做主題閱讀的...
    豆媽不逗閱讀 297評論 1 0
  • 文/沐夏 一生至少該有一次,為了一個人而忘了自己叮姑,不求有結(jié)果唉地,不求同行,不求曾經(jīng)擁有传透,甚至不求你愛我耘沼,只求在我最美...
    沐知夏閱讀 321評論 0 2