日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

3.1 Android组件intent filter

發布時間:2024/9/20 Android 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3.1 Android组件intent filter 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3.1.0 Intent filter基本概念

前面章節我們說到了Intent,Intent對象中除了ComponentName可以直接指定目標組件外,其它的屬性都無法直接指定目標組件。當然我們這里不指使用Activity的內部方法如startActivity或者intent的setClass方法可以指定目標組件。單獨的屬性是無法確定目標組件的。那Android怎么辦呢?Android如何根據一個intent對象找到目標組件呢?Intent在系統中,從概念上分為顯示intent和隱式intent。其中顯示intent,就是前面所說的通過指定intent的目標組件名稱來實現,這種intent需要知道目標組件名稱。另一種所謂隱式intent,這種intent用intent filter進行處理。Android對每個組件設置intent filter來訂閱intent 消息屬性。這個有點類似于Linux IPC消息,發送者將消息發到Kernel,然后由組件通過intent filter從Kernel上取得消息。

顯示intent和隱式intent在具體應用中,通常是針對不同的場景來進行應用,如顯示intent通常是在一個應用的內部組件之間,這樣可以知道具體目標組件的類名。而隱式intent就不一定了,通常可以打開如電話、短信等基礎Android應用。前面我們說intent filter是針對隱式intent,為了組件能夠匹配到具體合適的intent。Android內部的intent解析機制是通過查找已注冊在AndroidManifest.xml中的所有IntentFilter及其定義的Intent,最終找到匹配的intent。在這個解析過程中,Android通過intent的Action、Category和Data這三個屬性來進行判斷,并且是都滿足的情況才可啟動這個組件。如果一個filter的Action可以,但是category不對,也不行的。

如上圖所示,對intent filter來說,進行ACTION, DATA,CATEGORY的分析比較是一個intent filter的基本機制。下面分述如下:

【1】Action

如果一個組件想要接收某個intent,那么它的intent filter中action元素必有與這個intent相同的action(在定義action的前提下)。Intentfilter中定義的action,不再像前面使用縮寫的常量,需要使用android.intent.action.EDIT之類。創建一個Intent filter非常簡單,只需要在Activity 的子元素中定義,如下圖所示:

接著定義Activity和Intent.將intent的Action設為其中一個Action.

【2】Category

同前面Action一樣,一個組件想要響應一個intent就必須與這個intent具有相同的Category,但是通常有些intent對DEFAULT Category 都不設置,默認就是這個Category,但是對Intent filter那是不可以的,一定要有DEFAULT Category設置。如前面所述,Android 2.2以后,對intent filter要求更加嚴格,也就是說,前面的Action一定要存在。否則無法查找到相應的組件。如下所示定義一個Intent的一個自定義ACTION和一個CATEGORY。

接著再定義一個intent filter用來匹配對應用的intent.

?

【3】Data

Data屬性是Android要訪問的數據,和前面兩個屬性一樣,在intent filter中也可以聲明Data屬性。聲明Data屬性需要同時指定訪問數據的URI和MIME類型。在Intent filter中Data 屬性分為四個獨立的屬性進行設置,共同組成一個URI:scheme://host:port/path

從這里可以看出intent filter在匹配data時候的一些規則的不同,它是以intent filter為最大集,比喻說intent filter定義了http://www.sina.com.cn,但實際上它是可以匹配http://www.sina.com.cn/boke等子路徑的。同樣對MIME類型,更是如此,它可以支持通配符如"text/*”或者“audio/*”等。Data屬性匹配規則如下:

【1】如果intent 對象中沒有包含data,<intent-filter>列表中也沒有包含DATA,這種情況下一般通過ACTION來匹配。

【2】如果Intent 對象包含URI但是沒包括類型,并且類型不能從URI中自動識別,那么<intent-filter>列表中也只能包含URI,才能匹配

【3】相反,如果Intent對象只包含類型,不包含URI,那么<intent-filter>也只能含類型,不含 URI

【4】如果Intent 對象中既包含URI又包括Type,那么在<intent-filter>中也必須二者都包含。

創建一個Intent時設置data 屬性,如下所示,使用Uri類進行parse.

在<intent-filter>中使用data屬性進行匹配。

3.1.1 Intent filter 類及packageManager

前面我們著重談到的都是通過在xml文件中定義intent filter,實際上intent filter也是一個類,如下圖所示。它可以在receiver中直接注冊使用。

從類中,你可以使用add方法將相關屬性填入其中。

轉載于:https://blog.51cto.com/acreep/677525

總結

以上是生活随笔為你收集整理的3.1 Android组件intent filter的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。