[Android] Intent對象

Intent對象-Intent Objects

Intent本 身是一個消息的集合。他包含那些傳遞給接收Intent的組件的信息(such as the action to be taken and the data to act on)和傳遞給Android系統的信息(例如應該綁定到Intent上的組件的類別和如何啓動目標activity的指南)主要的,他包含了如下幾點:html

組件名-Component name

組件的名字是應該能夠處理Intent,爲其指明目標的。這一段所描述的就是關於ComponentName的--他是目標組件的類名的聯合體(例如"com.example.project")。組件名字中所包含的包名的部分不須要必須與manifest文件中的包名相匹配。java

組件的名字是非強制性的。若是他是固定的,那麼Intent就會被傳遞給指定名字的類的實例,若是他不是固定的,那麼Android就會經過 Intent中的其餘信息找到合適的目標--能夠查看本文檔之後的提到的#Intent解決方法-Intent Resolution|Intent解決方法-Intent Resolution。android

組件名字能夠經過setComponent(), setClass()setClassName()來設置,經過getComponent()來讀取。app

動做-Action

一個字符串命名了將要被執行的動做,或在廣播intents事件中,已經發生並被報告的動做。Intent類定義了許多動做常量,包括以下:ide

1.jpg

你能夠訪問Intent|Intent類的定義查看一系列的表明通常行爲動做的常量。其他行爲動做的定義能夠在Android API文檔中的其餘地方找到。你也能夠在應用中自定義這樣的常量串,這些常量要以包名做爲前綴,例如"com.example.project.SHOW_COLOR".ui

action的名字可以很好的說明intent有着怎樣的機構--特別是#數據-Data|數據-Data和#Extras|Extras--就像 方法的名字決定了參數和返回值。因此,使用一個明確的action的名字是一個很好的主意。另外,要爲你的Intent定義一個完整的協議,而不是孤立的 定義action。spa

咱們用setAction()來設置Intent中的action並用getAction()來讀取。.net

數據-Data

數據運行的URI和其MIME類型。不一樣的action被配與不一樣的data說明。例如,若是是ACTION_CALL,那麼他的data就是號碼的URI--ACTION_VIEW 而且data是http: URI,那麼接收Intent的activity將下載並顯示URI所指向的內容。code

當爲某個組件匹配一個能夠處理數據的Intent的時候,一般除了要了解Data的URI之外,重要的是要知道Data的類型(MIME type)。例如,一個能夠展現圖片的組件不該該被調用來播放音頻。htm

在不少狀況下,Data的類型能夠從URI中推測出來,特別是URI所展現的內容:指出了Data被用在什麼位置及被哪一種content provider控制(參考separate discussion on content providers)。可是Data的類型也能夠在Intent中明確的設定。setData()方法設置Data的URI,setType()設置Data的類型(MIME type),setDataAndType()二者一塊兒設置,getData()讀取URI,getType()讀取類型

分類-Category

Category是這樣一個String:他包含了須要處理Intent的組件的種類的信息。不少Category的描述可以放在Intent裏。就像Action那樣,Intent也定義了一些Category常量,以下圖表

2.jpg

參考Intent能夠查看所有Category的列表

addCategory()方法能夠把一個Category放入到Intent中,removeCategory()能夠刪除以前加入的Category,getCategories()能夠獲得目前在Intent中全部的Category

Extras

Extras是傳遞給目標組件的鍵值對信息。就像一些action匹配着特別的data uri,一些action匹配着特別的Extras。例如"time-zone"指示新時區的信息,"state"標識耳機設備是否插好的信息,除此還有SHOW_COLOR的action,顏色值將被設置在一個鍵-值對信息中。

Intent有一系列的get..()方法來取出數值。這些方法相對應的存在於Bundle類中。事實上,Extras也可使用putExtras()getExtras()來操做數據。

標誌位-Flags

::Flags有着不少種類。不少用來通知Android System如何運行一個activity(例如某個activity應該屬於哪一個任務)和運行之後如何處理(例如,flag是否屬於當前活動activity)。全部這些flag都是在Intent中定義的。

Android system 和平臺自己的應用會使用Intent發送系統自己的廣播而且激活系統定義的組件。如何構造一個Intent而且激活一個系統組件,請參考list of intents

相關文章
相關標籤/搜索