intent和intentfilter
intent簡介
intent代表了安卓應(yīng)用的啟動意圖,根據(jù)它的各個屬性來確定啟動哪個組件,它可以傳遞
Component、Action、Data、Category、Extra以及Flag。
Component:組件名稱實(shí)際上就是一個ComponentName對象,用于標(biāo)識唯一的應(yīng)用程序組件,即指明了期望的Intent組件,這種對象的名稱是由目標(biāo)組件的類名與目標(biāo)組件的包名組合而成的。
Action:實(shí)際上就是一個描述了Intent所觸發(fā)動作名稱的字符串
系統(tǒng)定義的Action常量有很多,下面只列出其中一些較常見的。
ACTION_CALL,撥出Data里封裝的電話號碼。
ACTION_EDIT,打開Data里指定數(shù)據(jù)所對應(yīng)的編碼程序。
ACTION_VIEW,打開能夠顯示Data中封裝的數(shù)據(jù)的應(yīng)用程序。
ACTION_MAIN,聲明程序的入口,該Action并不會接收任何數(shù)據(jù),同時結(jié)束后也不會返回任何數(shù)據(jù)。
ACTION_BOOT_COMPLETED,BroadcastReceiver Action的常量,表明系統(tǒng)啟動完畢。
ACTION_TIME_CHANGED,BroadcastReceiver Action的常量,表示系統(tǒng)時間通過設(shè)置而改變。
Data:Data主要是對Intent消息中數(shù)據(jù)的封裝,主要描述Intent的動作所操作到的數(shù)據(jù)的URI及類型。不同類型的Action會有不同的Data封裝。
Category:Category是對目標(biāo)組件類別信息的描述。同樣作為一個字符串對象,一個Intent中可以包含多個Category。與Category相關(guān)的方法有三個,addCategory添加一個Category,removeCategory刪除一個Category,而getCategories得到一個Category。
CATEGORY_GADGET,表示目標(biāo)Activity是可以嵌入到其他Activity中的。
CATEGORY_HOME,表明目標(biāo)Activity為HOME Activity。
CATEGORY_TAB,表明目標(biāo)Activity是TabActivity的一個標(biāo)簽下的Activity。
CATEGORY_LAUNCHER,表明目標(biāo)Activity是應(yīng)用程序中最先被執(zhí)行的Activity。
CATEGORY_PREFERNCE,表明目標(biāo)Activity是一個偏好設(shè)置的Activity。
Extra:Extra中封裝了一些額外的附加信息,這些信息是以鍵值對的形式存在的。
Flag:一些有關(guān)系統(tǒng)如何啟動組件的標(biāo)志位,Android同樣對其進(jìn)行了封裝。
intentfilter的簡介
intentfilter實(shí)際上相當(dāng)于intent的過濾器,一個應(yīng)用程序開發(fā)完成后,需要告訴Android系統(tǒng)自己能夠處理哪
些隱形的intent請求,這就需要聲明intentfilter。它過濾intent的時候,一般通過Action、Data、Category三方面進(jìn)行監(jiān)測。
(1)檢查Action
一個Intent只能設(shè)置一種Action,但是一個IntentFilter卻可以設(shè)置多個Action過濾。當(dāng)IntentFilter設(shè)置了多個Action時,只需一個滿足即可完成Action驗(yàn)證。當(dāng)IntentFilter中沒有說明任何一個Action時,那么任何的Action都不會與之匹配。而如果Intent中沒有包含任何Action,那么只要IntentFilter中含有Action時,便會匹配成功。
(2)檢查Data
數(shù)據(jù)的監(jiān)測主要包含兩部分,即數(shù)據(jù)的URI及數(shù)據(jù)類型,而數(shù)據(jù)URI又被分成三部分進(jìn)行匹配(scheme、authority、path),只有這些全部匹配時,Data的驗(yàn)證才會成功。
(3)檢查Category
IntentFilter同樣可以設(shè)置多個Category,當(dāng)Intent中的Category與IntentFilter中的一個Category完全匹配時,便會通過Category的檢查,而其他的Category并不受影響。但是當(dāng)IntentFilter沒有設(shè)置Category時,只能與沒有設(shè)置Category的Intent相匹配。
總結(jié)
以上是生活随笔為你收集整理的intent和intentfilter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓四大组件之Activity
- 下一篇: 浅谈BroadcastReceiver