一、什麼是Intent
1、Intent的概念:
Android提供了Intent機制來協助應用間的交互與通訊,Intent不僅可以應用於應用程序之間,也可以應用程序內部的activity、server、broadcastreceive之間。 Intent:目的,意圖
Intent是一種運行時綁定機制(runtime binding),他能在程序運行的過程中連接兩個不同的組件。通過Intent,你的程序可以向Android表達某種請求或意願,Android會選擇相應的組件來答覆。
2、對於向這三種組件發送intent有不同的機制:
使用Context.startActivity() 或 Activity.startActivityForResult(),傳入一個intent來啓動一個activity。使用 Activity.setResult(),傳入一個intent來從activity中返回結果。
將intent對象傳給Context.startService()來啓動一個service或者傳消息給一個運行的service。將intent對象傳給 Context.bindService()來綁定一個service。
將intent對象傳給 Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等廣播方法,則它們被傳給 broadcast receiver。
二、Intent的相關屬性:
Intent由以下各個組成部分:
component(組件):目的組件
action(動作):用來表現意圖的行動
category(類別):用來表現動作的類別
data(數據):表示與動作要操縱的數據
type(數據類型):對於data範例的描寫
extras(擴展信息):擴展信息
Flags(標誌位):期望這個意圖的運行模式
Intent類型分爲顯式Intent(直接類型)、隱式Intent(間接類型)。官方建議使用隱式Intent。上述屬性中,component屬性爲直接類型,其他均爲間接類型。相比與顯式Intent,隱式Intnet則含蓄了許多,它並不明確指出我們想要啓動哪一個活動,而是指定一系列更爲抽象的action和category等信息,然後交由系統去分析這個Intent,並幫我們找出合適的活動去啓動。
Activity 中 Intent Filter 的匹配過程 :
1、component(組件):目的組件
Component屬性明確指定Intent的目標組件的類名稱。(屬於直接Intent)
如果 component這個屬性有指定的話,將直接使用它指定的組件。指定了這個屬性以後,Intent的其它所有屬性都是可選的。
~~
例如,啓動第二個Activity時,我們可以這樣來寫:button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //創建一個意圖對象 Intent intent = new Intent(); //創建組件,通過組件來響應 ComponentName component = new ComponentName(MainActivity.this, SecondActivity.class); intent.setComponent(component); startActivity(intent); } });