最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中的Intent Filter匹配規(guī)則簡(jiǎn)介

 更新時(shí)間:2016年04月12日 16:07:14   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Android中的Intent Filter匹配規(guī)則,感興趣的小伙伴們可以參考一下

本文主要介紹了隱式Intent匹配目標(biāo)組件的規(guī)則,若有敘述不清晰或是不準(zhǔn)確的地方希望大家指出,謝謝大家:  )

1. Intent簡(jiǎn)介

Intent用于在一個(gè)組件(Component,如Activity、Service、Broadcast Receiver)中打開另一個(gè)組件。

Intent可分為隱式(implicitly)和顯式(explicitly)兩種:

Explicitly Intent:在知道要打開哪個(gè)具體的Component時(shí)使用,通過指定調(diào)用者和被調(diào)用者即可打開目標(biāo)Component;
Implicitly Intent:在不確切的知道要打開哪個(gè)Component的情況下,通過指出action、data、category,系統(tǒng)會(huì)尋找到匹配的Component。
(1)Explicitly Intent

當(dāng)明確知道你想打開哪個(gè)Component時(shí),它就是你的菜。通常這樣使用:

Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("key", "value");
startActivity(intent);

執(zhí)行以上代碼會(huì)導(dǎo)致目標(biāo)Component(這里是MainActivity)被創(chuàng)建(onCreate等一系列生命周期方法被調(diào)用)。在MainAcitivity中的相應(yīng)生命周期方法中通過getIntent.getXxxExtra(“key”)即可得到隨Intent一起傳過來的數(shù)據(jù)。

(2)Implicitly Intent

Implicitly Intent很好的實(shí)現(xiàn)了調(diào)用者和被調(diào)用者之間的解耦:

調(diào)用者通過action、data、category這三個(gè)方面描述他的Intent,被調(diào)用者通過在manifest文件中聲明的一系列Intent Filter來描述自己能夠響應(yīng)哪些意圖。如此一來,調(diào)用者和被調(diào)用者無需互相了解,通過Implicitly Intent這個(gè)聯(lián)系他們的紐帶就能很好的協(xié)同工作。

關(guān)于Intent更加詳細(xì)的介紹,大家可以參考官方文檔,這里主要介紹下Implicitly Intent的匹配規(guī)則。

2.Intent Filter匹配規(guī)則

只有action、data、category三方都匹配,Intent才算是匹配成功,進(jìn)而才能打開相應(yīng)的Component。一個(gè)Component若聲明了多個(gè)Intent Filter,只需要匹配任意一個(gè)即可啟動(dòng)該組件。

(1)action的匹配規(guī)則

一個(gè)Intent Filter中可聲明多個(gè)action,Intent中的action與其中的任一個(gè)action在字符串形式上完全相同(注意,區(qū)分大小寫),action方面就匹配成功??赏ㄟ^setAction方法為Intent設(shè)置action,也可在構(gòu)造Intent時(shí)傳入action。需要注意的是,隱式Intent必須指定action。比如我們?cè)贛anifest文件中為MyActivity定義了如下Intent Filter:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <action android:name="android.intent.action.SEND_TO"/>
</intent-filter>

那么只要Intent的action為“SEND”或“SEND_TO”,那么這個(gè)Intent在action方面就能和上面那個(gè)Activity匹配成功。比如我們的Intent定義如下:

Intent intent = new Intent("android.intent.action.SEND")
...
那么我們的Intent在action方面就與MyActivity匹配了。

Android系統(tǒng)預(yù)定義了許多action,這些action代表了一些常見的操作。常見action如下(Intent類中的常量):

Intent.ACTION_VIEW
Intent.ACTION_DIAL
Intent.ACTION_SENDTO
Intent.ACTION_SEND
Intent.ACTION_WEB_SEARCH

(2)data的匹配規(guī)則

data可進(jìn)一步分為uri(由scheme、host、port、path | pathPattern | pathPrefix這4部分組成)和mimetype。Intent的uri可通過setData方法設(shè)置,mimetype可通過setType方法設(shè)置。隱式Intent也必須指定data。同action類似,只要Intent的data只要與Intent Filter中的任一個(gè)data聲明完全相同,data方面就匹配成功。需要注意的是:若Intent Filter的data聲明部分未指定uri,則缺省uri為content或file,Intent中的uri的scheme部分需為content或file才能匹配;若要為Intent指定完整的data,必須用setDataAndType方法,原因請(qǐng)看setData和setType方法的源碼:

public Intent setData(Uri data) {
  mData = data;
  mType = null;
  return this;
}

public Intent setType(String type) {
  mData = null;
  mType = type;
  return this;
}

從以上代碼可以看到,setData會(huì)把mimeType置為null,setType會(huì)把uri置為null。下面我們來舉例說明一下data的匹配。首先我們先來看一下Intent Filter中指定data的語法:

<data android:scheme="...“ 
     android:host="..."
     android:port="..."
     android:path="..."
     android:pathPattern="..."
     android:pathPrefix="..."
     android:mimeType="..." />

其中scheme、host等各個(gè)部分無需全部指定。假如我們?yōu)镸yActivity的Intent Filter指定了如下data:

<intent-filter>
  <data android:mimeType="vidoe/mpeg" android:scheme="http" android:host="www.xxx.com" />
  <data android:mimeType="text/plain" android:scheme="http" />
</intent-filter>

那么我們的Intent想要匹配,mimeType可以為”text/plain”或“video/mpeg”,scheme必須為”http“,host則沒有限制,因?yàn)榈诙€(gè)data沒有指定host。

(3)category的匹配規(guī)則

與action和data不同,Intent中的category必須都在Intent Filter中出現(xiàn)才算匹配成功。Intent可以不指定category,若Intent中未指定category,系統(tǒng)會(huì)自動(dòng)為它帶上“android.intent.category.DEFAULT”。所以,想要接收Implicitly Intent的Component都必須在manifest文件中的Intent Filter聲明中帶上“android.intent.category.DEFAULT”。我們可以通過addCategory方法為Intent添加category。

(4)查詢是否有可接收指定Intent的Component

采用PackageManager的resolveActivity或者Intent的resolveActivity方法會(huì)獲得最適合Intent的一個(gè)Activity;調(diào)用PackageManager的queryIntentActivities會(huì)返回所有成功匹配Intent的Activity。關(guān)于這幾個(gè)方法的詳細(xì)定義大家可以參考官方文檔,這里不再贅述。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 詳解EventBus 3.x 的快速使用

    詳解EventBus 3.x 的快速使用

    這篇文章主要介紹了詳解EventBus 3.x 的快速使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • Android利用ScaleTransition實(shí)現(xiàn)吹氣球動(dòng)畫

    Android利用ScaleTransition實(shí)現(xiàn)吹氣球動(dòng)畫

    這篇文章主要為大家介紹了如何將利用ScaleTransition實(shí)現(xiàn)一個(gè)吹氣球的動(dòng)畫,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-04-04
  • Android如何動(dòng)態(tài)調(diào)整應(yīng)用字體大小詳解

    Android如何動(dòng)態(tài)調(diào)整應(yīng)用字體大小詳解

    這篇文章主要給大家介紹了關(guān)于Android如何動(dòng)態(tài)調(diào)整應(yīng)用字體大小的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • Android ViewModel與Lifecycles和LiveData組件用法詳細(xì)講解

    Android ViewModel與Lifecycles和LiveData組件用法詳細(xì)講解

    JetPack是一個(gè)開發(fā)組件工具集,他的主要目的是幫助我們編寫出更加簡(jiǎn)潔的代碼,并簡(jiǎn)化我們的開發(fā)過程。JetPack中的組件有一個(gè)特點(diǎn),它們大部分不依賴于任何Android系統(tǒng)版本,這意味者這些組件通常是定義在AndroidX庫當(dāng)中的,并且擁有非常好的向下兼容性
    2023-01-01
  • Android?PowerManagerService?打開省電模式

    Android?PowerManagerService?打開省電模式

    這篇文章主要介紹了Android?PowerManagerService打開省電模式,文章通告省電模式的打開過程、什么是?battery?saver?sticky?模式兩部分展開詳情,感興趣的朋友可以參考一下
    2022-08-08
  • Android Studio啟動(dòng)報(bào)錯(cuò)Java 1.8 or later is required的解決方法

    Android Studio啟動(dòng)報(bào)錯(cuò)Java 1.8 or later is required的解決方法

    這篇文章主要為大家詳細(xì)介紹了Android Studio啟動(dòng)時(shí)報(bào)錯(cuò)Java 1.8 or later is required的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android 自定義view和屬性動(dòng)畫實(shí)現(xiàn)充電進(jìn)度條效果

    Android 自定義view和屬性動(dòng)畫實(shí)現(xiàn)充電進(jìn)度條效果

    近期項(xiàng)目中需要使用到一種類似手機(jī)電池充電進(jìn)度的動(dòng)畫效果,以前沒學(xué)屬性動(dòng)畫的時(shí)候,是用圖片+定時(shí)器的方式來完成的,下面給大家分享android自定義view和屬性動(dòng)畫實(shí)現(xiàn)充電進(jìn)度條
    2016-12-12
  • android ocr——身份證識(shí)別的功能實(shí)現(xiàn)

    android ocr——身份證識(shí)別的功能實(shí)現(xiàn)

    本篇文章主要介紹了android ocr——身份證識(shí)別的功能實(shí)現(xiàn),具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • 可伸縮的textview詳解(推薦)

    可伸縮的textview詳解(推薦)

    下面小編就為大家?guī)硪黄缮炜s的textview詳解(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android編程實(shí)現(xiàn)自定義Tab選項(xiàng)卡功能示例

    Android編程實(shí)現(xiàn)自定義Tab選項(xiàng)卡功能示例

    這篇文章主要介紹了Android編程實(shí)現(xiàn)自定義Tab選項(xiàng)卡功能,結(jié)合完整實(shí)例形式分析了Android自定義tab選項(xiàng)卡的遍歷、設(shè)置及屬性操作相關(guān)技巧,需要的朋友可以參考下
    2017-02-02

最新評(píng)論

金华市| 当涂县| 娱乐| 隆德县| 水城县| 仁寿县| 和硕县| 靖江市| 沂南县| 邵阳市| 合肥市| 苍溪县| 运城市| 华池县| 高要市| 邵阳县| 分宜县| 漠河县| 凤阳县| 吉木萨尔县| 乐亭县| 犍为县| 安溪县| 洱源县| 安宁市| 行唐县| 措勤县| 浙江省| 楚雄市| 荔浦县| 呼伦贝尔市| 家居| 亳州市| 中超| 固镇县| 望城县| 米易县| 瑞昌市| 石泉县| 都匀市| 霍城县|