一、要弄清楚這個問題,首先須要弄明白什麼是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
android.intent.category.ALTERNATIVE htm
android.intent.category.BROWSABLE 圖片
android.intent.category.DEFAULT
android.intent.category.DEVELOPMENT_PREFERENCE
android.intent.category.EMBED
android.intent.category.HOME
android.intent.category.INFO
android.intent.category.LAUNCHER
android.intent.category.MONKEY
android.intent.category.OPENABLE
android.intent.category.PREFERENCE
android.intent.category.SELECTED_ALTERNATIVE
android.intent.category.TAB
Api Level 5(SDK 2.0)增長的:
Xml代碼
android.intent.category.CAR_DOCK
android.intent.category.DESK_DOCK
Api Level 6和7沒有變化。
Api Level 8(SDK 2.2)增長的:
Xml代碼
android.intent.category.CAR_MODE