Intent 背後的 Intent Filter

若是 Intent 是對在某個數據集上執行的動做的請求,那麼 Android 是如何知道使用哪一個應用程序來響應這個請求的呢?使用 Intent Filter,應用程序能夠聲明他們支持的動做和數據。Intent Filter 提供了對 Intent 的攔截過濾,只有匹配上 Intent Filter 的應用程序組件,纔可以對 Intent 形成響應。android

要把一個 Activity 和 Service 註冊成爲一個可以處理 Intent 的程序,那麼須要在它的 manifest 節點中添加 Intent Filter 標籤。如下是相關屬性介紹:瀏覽器

  • action 每一個 Intent Filter 標籤至少有一個 action 標籤來描述動做名稱。
  • category 包含哪一種觸發狀態,一個動做下能夠指定不一樣的處理動做目錄的條件。例如:聯繫人 Actin 能夠查看也能夠修改。下面包含集中 Android 提供的服務,也能夠自定義code

    • ALTERNATIVE
    • SELECTED_ALTERNATIVE
    • BROWSABLE 基於瀏覽器內部的,在瀏覽器內部觸發的 Intent 都會包含一個 BROWSABLE,因此想讓指定的應用程序組件匹配到這個 Intent 必需要包含一個 BROWSABLE
    • DEFAULT 默認動做,對於顯示調用的 Intent 頗有必要
    • HOME 能夠將 Intent Filter 的類別設置爲 HOME,能夠不指定 action
    • LAUNCHER 能夠在應用程序啓動器下顯示
  • datait

  • android:host
  • android:mimetype
  • android:path
  • android:port
  • android:scheme


Android 是如何解析 Intent Filter的

  1. Android 會將已安裝包的可用的 Intent Filter 放到一個列表中
  2. 首先匹配 action 和 category,intent filter 必需要包含 intent 中全部的 category,否則匹配失敗
  3. scheme、host、port、path、mimetype 都須要匹配一致
  4. 當隱式啓動 Activity 時,若是解析出多個組件,那麼全部的組件都會呈現城一個列表給用戶。
相關文章
相關標籤/搜索