* Definition
- Android 系統如何判斷哪個元件可以接收哪個 intent, 宣告在 AndroidManifest.xml 中。
- 宣告元件時可加入的 Intent Filter 設定,屬性有 action, category, data,三個在一組內皆能有多個,只要符合三個各自條件,即通過此 intent-filter。
- 每個元件內可以設定 0 ~ 多組 的 intent filter, 每一組的 Intent Filter 都是一份比對規則,只要通過一組即可。
* Process
當 intent 發出來時,系統會去檢查Manifest 內各元件內的intent filter, 而啟動適合的元件,若元件沒有設定filter,那就只能接收到有清楚指定 component 的 intent。
* action: 執行 intent 的方式。
- 能有 0 ~ 多個。
- 合格條件: intent 中的 action 為 intent-filter 宣告的之一。
- 如果沒有宣告任何一個,因為 intent 沒得比對,所以沒有任何 intent 會符合;
- 如果是 intent 沒有帶有 action,filter 中至少有宣告一個,即能通過此 filter。
* category: intent 的類別。
- 能有 0 ~ 多個。
- 合格條件: intent-filter 中必須完全符合 intent 中的 category。
- intent-filter 宣告比 intent 中還多的 category 是不影響的。
- i.e. intent 中沒有 category,即合格。
- Default Category
- 當執行 startActivity() 而使用沒有明確設定目標的 intent (implicit intent),Category 會預設為 Intent.CATEGORY_DEFAULT。
- 因此,若 componen 需要接收 implicit intent,就必須在 intent filter 裡加上"android.intent.category.DEFAULT"。
- 例外中的例外: 如果 filter 設定 "android.intent.action.MAIN" 和 "android.intent.category.LAUNCHER",則不需指定 DEFAULT 也可接收 implicit intent。
* data: intent 的資料類型。
- 能有 0 ~ 多個。
- 合格條件: intent 中的 data 為 intent-filter 宣告的之一。
. Updated on 2014/02/18
* Reference
- Android Intent Filter-判斷intent傳遞對象 - kei chueng - 博客园
- Intent Filter
- android -- 應用程式自我介紹之intent resolution @ 心的距離 :: 痞客邦 PIXNET ::
- <action>
- <category>
- <data>
沒有留言:
張貼留言