Intent是一個消息傳遞類,同時能夠啓動一些組件android
做用:瀏覽器
1啓動一個activity組件。安全
經過Context類的 startActivity()/ startActivity ()方法啓動activity組件.
app
2啓動一個service組件框架
經過Context類的startService()
方法啓動此組件,只能執行一次性操做(例以下載文件)。ide
經過Context類的 bindService()方法ui
3發送一條廣播spa
經過Context類的sendBroadcast()
, sendOrderedBroadcast()
, or sendStickyBroadcast()給別的組件發送消息。
翻譯
Intent類型:3d
1顯式intent:
當你知道你想要啓動的組件時,指定將啓動組件的類名(需建立一個具體的組件)。例如後臺下載文件,啓動一個activity響應用戶行爲。
當你一使用一個顯示intent去啓動組件時,就在intent類中指定了詳細的intent屬性(除了Component name外,其餘屬性可不選)。
通常來講,顯式intent用來啓動特殊的activity與service。
2隱式intent:
沒有明確指定一個組件名稱。通常用於在app中調用另外一個app的組件。
當你使用隱式intent時,android系統去查找合適的組件來啓動。若是intent匹配intent filter,則啓動組件並把intent傳遞給intent類,若是有多個intent filter符合,則彈出對話框讓用戶選擇。
經過resolveActivity()方法可判斷是否查找到合適的組件。
intent filter是manifest文件中的語句,他描述了組件想要接收的各類類型的intent。
爲了確保你的app是安全的,使用顯式intent啓動一個service時不要給service聲明intent filter。使用隱式intent啓動service是有安全隱患的。由於你不能肯定哪一個service將響應intent,用戶也看不到是哪一個service在啓動。
建立一個intent類
intent類攜帶的主要信息:
Component name:
將要啓動的組件名。
這個屬性是可選擇的。
但若是你想建立一個明確的組件,那麼你要肯定組件名。(顯式intent)
若是你不肯定組件名,系統以intent其餘屬性決定啓動哪一個組件.(隱式intent)
當啓動service組件時,爲了確保你的app是安全的,最好要有明確的組件名。
你能夠經過intent構造方法,或者setComponent()
, setClass()
, setClassName()
方法來肯定將要啓動的組件名。
Action:
經過一個字符串肯定將要執行的動做。例如查看或選擇。
你能夠在你的app中定義一個action屬性的字符串供你使用,可是你應該優先使用intent類或其餘框架類中已定義好的action屬性字符串。
ACTION_VIEW
:當你有些信息須要給用戶顯示時,例如在map app中顯示地址
ACTION_SEND
:用戶想要經過另外一個app分享數據。
你能夠經過intent類中setAction()方法或intent構造方法來設置action屬性。
若是想要定義一個action屬性字符串的話,不要忘了定義時把包名做爲字符串的前綴。
eg:
1 static final String ACTION_TIMETRAVEL = "com.example.action.TIMETRAVEL";
Data:
URI類引用的數據行使MIME類型數據的職能。提供的數據的類型通常由intent的action決定。
除了URI以外,在建立intent類很是重要事情是指定數據類型(MIME type).
設置URI類型,用setData()方法,設置MIME類型,用
setType()方法。兩種都設置用
setDataAndType()方法.(intent類)
Category:
給intent以字符串的形式添加額外信息。
大部分intent不須要添加category。
CATEGORY_LAUNCHER
:activity是一個初始的任務activity而且他被列在應用程序管理器上。
CATEGORY_BROWSABLE
:目標activity容許瀏覽器經過引用連接啓動他來顯示數據
經過addCategory()
方法添加Category屬性
Extras:
經過鍵值對的形式保存額外的信息來完成要求的功能,就好像一些動做和特定的數據URI對應,一些動做和特定的extras對應。
經過putExtra()
方法添加extras.
自定義Extra字符串。
1 static final String EXTRA_GIGAWATTS = "com.example.EXTRA_GIGAWATTS";
Flags:
定義瞭如何啓動activity以及如何對待他。
翻譯自android 官網API Guide。