Intent 和IntentFilter

來源:互聯網
上載者:User

 

當Intent在組件間傳遞時,組件如果想告知Android系統自己能夠響應和處理哪些Intent,那麼就需要用到IntentFilter對象。顧名思義,IntentFilter對象負責過濾掉組件無法響應和處理的Intent,只將自己關心的Intent接收進來進行處理。(請發郵件到freeget.one@gmail.com獲得翻強軟體。

IntentFilter實行“白名單”管理,即只列出組件樂意接受的Intent,但IntentFilter只會過濾隱式Intent,顯式的Intent會直接傳送到目標組件。
    Android組件可以有一個或多個IntentFilter,每個IntentFilter之間相互獨立,只需要其中一個驗證通過則可。除了用於過濾廣播的IntentFilter可以在代碼中建立外,其他的IntentFilter必須在AndroidManifest.xml檔案中進行申明。
    IntentFilter中具有和Intent對應的用於過濾Action,Data和Category的欄位,一個隱式Intent要想被一個組件處理,必須通過這三個環節的檢查。

    一:檢查 Action

    儘管一個Intent只可以設定一個Action,但一個Intentfilter可以持有一個或多個Action用於過濾,到達的Intent只需要匹配其中一個Action即可。

    深入思考:如果一個Intentfilter沒有設定Action的值,那麼,任何一個Intent都不會被通過;反之,如果一個Intent對象沒有設定Action值,那麼它能通過所有的Intentfilter的Action檢查。

    二:檢查 Data

    同Action一樣,Intentfilter中的Data部分也可以是一個或者多個,而且可以沒有。每個Data包含的內容為URL和資料類型,進行Data檢查時主要也是對這兩點進行比較,比較規則:

 

 如果一個Intent對象沒有設定Data,只有Intentfilter也沒有設定Data時才可通過檢查。

 如果一個Intent對象包含URI,但不包含資料類型:僅當Intentfilter也不指定資料類型,同時它們的URI匹配,才能通過檢測。

 如果一個Intent對象包含資料類型,但不包含URI:僅當Intentfilter也沒指定URL,而只包含資料類型且與Intent相同,才通過檢測。

 如果一個Intent對象既包含URI,也包含資料類型(或資料類型能夠從URI推斷出),只有當其資料類型匹配Intentfilter中的資料類型,並且通過了URL檢查時,該Intent對象才能通過檢查。

    其中URL由四部分組成:它有四個屬性scheme、host、port、path對應於URI的每個部分。

    例如:content://com.wjr.example1:121/files

 

scheme部分:content

host部分:com.wjr.example1

port部分:121

path部分:files


    host和port部分一起構成URI的憑據(authority),如果host沒有指定,那port也會被忽略。這四個屬性是可選的,但他們之間並不是完全獨立的。要讓authority有意義,scheme必須要指定。要讓path有意思,scheme和authority必須指定。

    Intentfilter中的path可以使用萬用字元來匹配path欄位,Intent和Intentfilter都可以用萬用字元來指定MIME類型。

    三:檢查 Category

    Intentfilter中可以設定多個Category,Intent中也可以含有多個Category,只有Intent中的所有Category都能匹配到Intentfilter中的Category,Intent才能通過檢查。也就是說,如果Intent中的Category集合是Intentfilter中Category的集合的子集時,Intent才能通過檢查。如果Intent中沒有設定Category,則它能通過所有Intentfilter的Category檢查。

 

如果一個Intent能夠通過不止一個組件的Intentfilter,使用者可能會被問那個組件被啟用。如果沒有目標找到,會產生一個異常。 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.