Android Intent Filter 簡析,androidintent

來源:互聯網
上載者:User

Android Intent Filter 簡析,androidintent

在 Activity 和 Service 中,Intent 代表了對某個資料集上執行動作的請求,Intent Filter 則聲明了一個特定的應用程式組件能夠對一個類型的資料進行操作

要把一個Acitivty或者service註冊為一個可能的Intent處理常式,可以再它的mainfest節點中添加一個intent-filter標籤並使用以下的標籤

  • action 使用android:name屬性制定要為之服務的動作的名稱。每個Intent Filter必須要有至少一個action標籤,action應該是一個描述性的唯一的字串,所以最好的做法是使用基於Java的包名約定的命名系統
  • category 使用 android:name屬性來制定應該在哪個情況下為action提供服務,每個Intent Filter標籤都可以包含多個category標籤,既可以制定自己的標籤,也可以使用以下Android提供的標籤:

    • ALTERNATIVE 可以把這個動作指定為在特定資料類型上執行的預設動作的可選項,例如一個連絡人的預設動作是查看其資訊,可選的動作則是對其進行編輯
    • SELECTED_ALTERNATIVE 與 ALTERNATIVE 類似,但是 ALTERNATIVE 總是使用後面描述的intent resolution 解析為一個動作,二檔要求有很多種可能性的時候,則可以使用 SELECTED_ALTERNATIVE
    • BROWSABLE 指定一個在瀏覽器內部可用的動作。當一個Intent在瀏覽器內部觸發時,它總是會包含 BROWSABLE 類別,如果想讓應用程式響應瀏覽器內部觸發的動作,例如 截獲指向特定網站的連結,則必須包含 BROWSABLE 類別。
    • DEFAULT 通過設定這個類型可以使用一個組件成為Intent Filter內指定的資料類型的預設動作。對於那些使用一個現實的Intent自動的Activity,這個類型是很有必要的
    • HOME 通過將一個Intent Filter的類別設定為HOME,而不指定一個action,則可以把它作為本地螢幕的可選項
    • LAUNCHER 使用這個類別會讓一個Activity出現在應用陳旭的自啟動器中
  • data data 標籤允許制定組件可以執行的資料類型,可以使用一下屬性的任意組合來指定你的組件中所支援的資料:

    • android:host 制定一個有效主機名稱,如google.com
    • android:mimetype 制定組件可以執行的資料類型,如將匹配所有的Android cursor
    • android:path 制定URI的有效路徑值 如.transport/boats/
    • android:port 制定主機的有效視窗
    • android:scheme 要求一種特定的模式 如 content or http
Android 如何解析 Intent Filter

當在startActivity 中傳入一個隱式的Intent時,決定啟動哪一個Activity的過程就叫做Intent解析,intent解析的目的是使用一下步驟來找出最匹配的Intent Filter

  1. Android 將已安裝包的可用Intent Filter 放到一個列表中
  2. 那些與解析Intent時相關聯的action或者category不匹配的Intent Filter將會從列表中移除
    • 如果Intent Filter 包含了指定的action,則可認為action匹配了,如果沒有檢查到任何一個action和Intent制定的action相匹配,則認為action匹配失敗了
    • 對於category 匹配來說,Intent Filter 必須包含待解析的Intent中的所有category,但可以包含 Intent 中所不包含的其他category,一個沒有制定category的Intent Filter只能和沒有任何category的Intent相匹配
  3. Intent 的資料URI的每一個部分都和Intent Filter的data標籤進行比較,如果Intent Filter制定了scheme、host/authority、path或者是MIME類型,那麼這些值都要和Intent的URI比較,任意一個不匹配都會把Intent Filter從列表中移除,沒有制定資料值的Intent Filter將會和所有的Intent資料值匹配,這一點個category不一樣,需要注意

    • MIME 類型是值要匹配的資料的資料類型,當匹配資料類型時,可以使用萬用字元來匹配子類型,如earthquake/*。如果Intent Filter 制定了一種資料類型,那麼它必須匹配該Intent,如果不指定資料類型,則它會匹配所有的Intent
    • scheme 是URI的協議部分,如http: tel:
    • hostname 或者是data authority 是URI位於scheme 和path之間的部分,如 developer.android.name ,hostname想要匹配,Intent Filter的scheme必須也要匹配
    • 資料path是authority之後的內容,例如 /training。只有資料的scheme和hostname都匹配的時候,path才能匹配
  4. 當隱式啟動一個Activity的時候。如果這個進行解析出多個組件,那麼所有可能匹配的組件都會呈現給使用者。

傳遞責任

可以使用startNextMatchingActivity 方法將處理action的責任傳遞給下一個首選的Activity

Intent intent = getIntent();if(ifDuringBreak){startNextMatchingActivity(internt);}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.