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
三、一個擷取通訊錄的執行個體: