Activity--IntentFilter的匹配規(guī)則

一尝艘、Activity的啟動

我們知道背亥,啟動activity分為兩種,顯示調(diào)用和隱式調(diào)用程癌。原則上一個Intent不應(yīng)該即是顯式調(diào)用有是隱式調(diào)用轴猎,如果二者共存以顯式調(diào)用為主捻脖。
顯示調(diào)用:明確知道被啟動對象的組件信息,包括包名和類名可婶。
隱式調(diào)用:需要intent能夠匹配目標(biāo)組件的IntentFilter中所設(shè)置的過濾信息,IntentFilter的過濾信息有action椎扬、category和data具温。

二铣猩、IntentFilter的匹配規(guī)則

一個activity中可以有多個intent-filter,一個intent-filter中天吓,action、category尸曼、data也可以有多個萄焦,一個intent只要能匹配任何一種intent-filter就能啟動activity。

<activity android:name=".BActivity" >
            <intent-filter>
                <action android:name="com.ysl.action1"/>
                <action android:name="com.ysl.action2"/>
                <category android:name="com.ysl.category1"/>
                <category android:name="com.ysl.category2"/>
                <data android:mimeType="image"/>
                <data android:mimeType="video"/>
            </intent-filter>
            
            <intent-filter>
                <action android:name="com.ysl.test"/>
            </intent-filter>
        </activity>

1茬射、action的匹配規(guī)則

action是一個字符串冒签,系統(tǒng)預(yù)定了一些action在抛,同時我們也可以在應(yīng)用中定義自己的action。
action的匹配規(guī)則是萧恕,intent-filter中至少要有一個action可以有多個action刚梭,只要intent中一個action和intent-filter的action相同就匹配成功(字符串相同)。另外票唆,action區(qū)分大小寫朴读。


舉個例子

  <activity android:name=".BActivity" >
            <intent-filter>
                <action android:name="com.ysl.test"/>
                <action android:name="com.ysl.test1"/>
                //必須添加category android:name="android.intent.category.DEFAULT"否則報錯
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
        <activity android:name=".AActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
btn_skip_b.setOnClickListener {
            //A中點擊按鈕啟動B
            var intent = Intent()
            intent.action = "com.ysl.test"
            startActivity(intent)
        }

2、category

category是一個字符串走趋,系統(tǒng)預(yù)定義了一些category衅金,同時我們也可以在應(yīng)用中定義自己的category。
category的匹配規(guī)則intent-filter中可以沒有category簿煌,也可以有多個category。如果intent-filter中有多個category姨伟,那么intent就要有相對應(yīng)個數(shù)的category和intent-filter相對(字符串要相同)惩琉,才能匹配成功。
調(diào)用startActivity()或startActivityForResult()方法時候夺荒,intent會默認田間"android.intent.category.DEFAULT"這個category,所有我們使用隱式調(diào)用啟動action瞒渠,需要在AndroidManifest.xml中的對應(yīng)activity添加 <category android:name="android.intent.category.DEFAULT"/>



舉個例子

<activity android:name=".BActivity" >
            <intent-filter>
                <action android:name="com.ysl.action_test"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.ysl.category1"/>
                <category android:name="com.ysl.category2"/>
            </intent-filter>
        </activity>
        <activity android:name=".AActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


btn_skip_b.setOnClickListener {
            //A中點擊按鈕啟動B
            var intent = Intent()
            intent.action = "com.ysl.action_test"
            intent.addCategory("com.ysl.category1")
            intent.addCategory("com.ysl.category2")
            startActivity(intent)
        }

3、data的匹配規(guī)則

data的匹配規(guī)則和action類似般堆,如果intent-filter中定義了data在孝,那么intent中必須也要定義可匹配的data。
data的語法:

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

data由兩部分組成淮摔,mineType和URI。


mimeType:媒體類型始赎,比如image/jpeg和橙、audio/mpeg4-generic和video/等,可以表示圖片仔燕、文本、視屏等不同的媒體格式魔招。


URI:
URI的結(jié)構(gòu)<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]


Scheme:URI的模式晰搀,比如http、file办斑、content等外恕,如果URI中沒有指定scheme,那么整個URI的其他參數(shù)無效乡翅,這也意味著URI是無效的鳞疲。


Host:URI的主機名,比如www.baidu.com蠕蚜,如果host未指定尚洽,那么整個URI中的其他參數(shù)無效,這也意味著URI是無效的靶累。


Port:URI中的端口號腺毫,比如8090,僅當(dāng)URI中指定scheme和host參數(shù)的時候port參數(shù)才有意義挣柬。


Path潮酒、pathPatterm和pathPrefix:這三個參數(shù)表示路勁信息。
path表示完整的路徑信息邪蛔。
pathPatterm表示完整的路徑信息澈灼,但是它里面可以包含通配符“
”,“”表示0個或多個任意字符店溢,需要注意的是叁熔,由于正則表達式的規(guī)范,如果想表示真實的字符串床牧,那么“”要寫成“\*”荣回,“\”要寫成“\\”。
pathPrefix表示路徑的前綴信息戈咳。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末心软,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子著蛙,更是在濱河造成了極大的恐慌删铃,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踏堡,死亡現(xiàn)場離奇詭異猎唁,居然都是意外死亡,警方通過查閱死者的電腦和手機顷蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門诫隅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腐魂,“玉大人,你說我怎么就攤上這事逐纬』滓伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵豁生,是天一觀的道長兔毒。 經(jīng)常有香客問我,道長甸箱,這世上最難降的妖魔是什么育叁? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮摇肌,結(jié)果婚禮上擂红,老公的妹妹穿的比我還像新娘。我一直安慰自己围小,他們只是感情好昵骤,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肯适,像睡著了一般变秦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上框舔,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天蹦玫,我揣著相機與錄音,去河邊找鬼刘绣。 笑死樱溉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纬凤。 我是一名探鬼主播福贞,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼停士!你這毒婦竟也來了挖帘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恋技,失蹤者是張志新(化名)和其女友劉穎拇舀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜻底,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡骄崩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刁赖。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡搁痛,死狀恐怖长搀,靈堂內(nèi)的尸體忽然破棺而出宇弛,到底是詐尸還是另有隱情,我是刑警寧澤源请,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布枪芒,位于F島的核電站,受9級特大地震影響谁尸,放射性物質(zhì)發(fā)生泄漏舅踪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一良蛮、第九天 我趴在偏房一處隱蔽的房頂上張望抽碌。 院中可真熱鬧,春花似錦决瞳、人聲如沸货徙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痴颊。三九已至,卻和暖如春屡贺,著一層夾襖步出監(jiān)牢的瞬間蠢棱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工甩栈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泻仙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓量没,卻偏偏與公主長得像玉转,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子允蜈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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