天天看點

Android菜鳥的成長筆記(8)——Intent與Intent Filter(上)

Intent代表了Android應用的啟動“意圖”,Android應用将會根據Intent來啟動指定元件,至于到底啟動哪個元件,取決于Intent的各個屬性。

一、顯式的Intent

明确指定了要啟動的元件的Intent我們稱為顯式的Intent

例如:

注意在manifest檔案裡注冊SecondActivity

Intent的Componet屬性需要接收一個ComponentName對象,ComponetName對象其實是一個指定包和要啟動的Activity路徑的類,有如下幾個構造

componentName(String pkg, String cls)

componentName(Context pkg, String cls)

componentName(Context pkg, Class<?> cls)

componentName(Parcel in)

除了這個屬性之外Intent還包含了如下三個方法:

setClass(Context packageContext, Class<?> cls )

setClassName(Context packageContext, String className)

setClassName(String packageName, String className )

上面的代碼可以簡化為如下代碼:

二、隐式的Intent

沒有明确指定要啟動的元件的Intent我們稱為隐式的Intent

Intent除了上面的Componet屬性外還有Action、Category屬性

Action代表Intent所要完成的一個抽象動作,而Category則是動作附加的類别資訊。

manifest檔案中配置

一個Intent隻能指定一個Action屬性,可以包含多個Category屬性,當程式建立時,預設啟動category為DEFAULT的元件。

接下來我們來看看Category屬性的用法

可以看出其實是根據Action和Category兩個屬性共同決定啟動哪個Activity的,Category可以有多個,隻要滿足其中的一個即可。

實際上Intent不僅可以啟動我們定義的Activity,也可以啟動系統和其他應用的Activity

這裡僅列出部分更多關于Action和Category屬性請參閱:http://developer.android.com/reference/android/content/Intent.html

三、一個擷取通訊錄的執行個體:

Android菜鳥的成長筆記(8)——Intent與Intent Filter(上)

繼續閱讀