「android.intent.category.DEFAULT」的目的是什麼?

一、要弄清楚這個問題,首先須要弄明白什麼是implicit(隱藏) intent什麼是explicit(明確) intent。

Explicit Intent明確的指定了要啓動的Acitivity ,好比如下Java代碼:
Intent intent= new Intent(this, B.class)

Implicit Intent沒有明確的指定要啓動哪一個Activity ,而是經過設置一些Intent Filter來讓系統去篩選合適的Acitivity去啓動。

二、intent到底發給哪一個activity,須要進行三個匹配,一個是action,一個是category,一個是data。

理論上來講,若是intent不指定category,那麼不管intent filter的內容是什麼都應該是匹配的。可是,若是是implicit intent,android默認給加上一個CATEGORY_DEFAULT,這樣的話若是intent filter中沒有android.intent.category.DEFAULT這個category的話,匹配測試就會失敗。因此,若是你的 activity支持接收implicit intent的話就必定要在intent filter中加入android.intent.category.DEFAULT。

例外狀況是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中沒有必要加入android.intent.category.DEFAULT,固然加入也沒有問題。

咱們定義的activity若是接受implicit intent的話,intent filer就必定要加上android.intent.category.DEFAULT這個category。


來自另外一篇文章的解釋:

在寫 AndroidManifest.xml 的時候,一直沒有搞明白,何時要給 Activityandroid.intent.category.DEFAULT 過濾器,如今才明白。

--------------------------------------------------------------------------------
Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters
--------------------------------------------------------------------------------

意思是說,每個經過 startActivity() 方法發出的隱式 Intent 都至少有一個 category,就是 "android.intent.category.DEFAULT",因此只要是想接收一個隱式 Intent 的 Activity 都應該包括 "android.intent.category.DEFAULT" category,否則將致使 Intent 匹配失敗。

從上面的論述還能夠得到如下信息:
一、一個 Intent 能夠有多個 category,但至少會有一個,也是默認的一個 category。
二、只有 Intent 的全部 category 都匹配上,Activity 纔會接收這個 Intent。php


最新歷史版本 :Android中的category大全 -- 未審覈html

返回文檔android

  • 編輯時間:06-15 15:14 歷史版本編輯者:vikiviki 歷史版本:測試

  • 內容長度:8998 圖片數:0目錄數:0this

  • 修改緣由:spa

Api Level 3(SDK 1.5)和Api Level 4(SDK 1.6):orm

Xml代碼 xml

  1. android.intent.category.ALTERNATIVE  htm

  2. android.intent.category.BROWSABLE  圖片

  3. android.intent.category.DEFAULT  

  4. android.intent.category.DEVELOPMENT_PREFERENCE  

  5. android.intent.category.EMBED  

  6. android.intent.category.HOME  

  7. android.intent.category.INFO  

  8. android.intent.category.LAUNCHER  

  9. android.intent.category.MONKEY  

  10. android.intent.category.OPENABLE  

  11. android.intent.category.PREFERENCE  

  12. android.intent.category.SELECTED_ALTERNATIVE  

  13. android.intent.category.TAB  

 Api Level 5(SDK 2.0)增長的:

Xml代碼 

  1. android.intent.category.CAR_DOCK  

  2. android.intent.category.DESK_DOCK  

Api Level 6和7沒有變化。

 Api Level 8(SDK 2.2)增長的:

Xml代碼 

  1. android.intent.category.CAR_MODE

相關文章
相關標籤/搜索