Android開發--Intent-filter屬性詳解

如果一個 Intent 請求在一片數據上執行一個動作, Android 如何知道哪個應用程序(和組件)能用來響應這個請求呢?

Intent Filter就是 用來注冊 Activity 、 Service 和 Broadcast Receiver 具有能在某種數據上執行一個動作的能力。
使用 Intent Filter ,應用程序組件告訴 Android ,它們能為其它程序的組件的動作請求提供服務,包括同一個程序的組
件、本地的或第三方的應用程序。

為了注冊一個應用程序組件為 Intent 處理者,在組件的 manifest 節點添加一個 intent-filter 標簽。

在 Intent Filter 節點里使用下面的標簽(關聯屬性),你能指定組件支持的動作、種類和數據:
1.動作測試
<intent-filter>元素中可以包括子元素<action>,比如:
view source print ?

  1. < intent-filter >
  2. < action android:name="com.example.project.SHOW_CURRENT" />
  3. < action android:name="com.example.project.SHOW_RECENT" />
  4. < action android:name="com.example.project.SHOW_PENDING" />
  5. </ intent-filter >
    一條<intent-filter>元素至少應該包含一個<action>,否則任何Intent請求都不能和該<intent-filter>匹配。如果Intent
    請求的Action和<intent-filter>中個某一條<action>匹配,那么該Intent就通過了這條<intent-filter>的動作測試。如果
    Intent請求或<intent-filter>中沒有說明具體的Action類型,那么會出現下面兩種情況。
    (1) 如果<intent-filter>中沒有包含任何Action類型,那么無論什么Intent請求都無法和這條<intent-filter>匹配;
    (2) 反之,如果Intent請求中沒有設定Action類型,那么只要<intent-filter>中包含有Action類型,這個Intent請求就將順
    利地通過<intent-filter>的行為測試。

2.類別測試
<intent-filter>元素可以包含<category>子元素,比如:
view source print ?

  1. < intent-filter . . . >
  2. < category android:name="android.Intent.Category.DEFAULT" />
  3. < category android:name="android.Intent.Category.BROWSABLE" />
  4. </ intent-filter >
    只有當Intent請求中所有的Category與組件中某一個IntentFilter的<category>完全匹配時,才會讓該 Intent請求通過測試
    ,IntentFilter中多余的<category>聲明并不會導致匹配失敗。一個沒有指定任何類別測試的 IntentFilter僅僅只會匹配沒
    有設置類別的Intent請求。

3.數據測試
數據在<intent-filter>中的描述如下:
view source print ?

  1. < intent-filter . . . >
  2. < data android:type="video/mpeg" android:scheme="http" . . . />
  3. < data android:type="audio/mpeg" android:scheme="http" . . . />
  4. </ intent-filter >
    <data>元素指定了希望接受的Intent請求的數據URI和數據類型,URI被分成三部分來進行匹配:scheme、 authority和path
    。其中,用setData()設定的Inteat請求的URI數據類型和scheme必須與IntentFilter中所指定的一致。若IntentFilter中還指定了authority或path,它們也需要相匹配才會通過測試。

? action
使用 android:name 特性來指定對響應的動作名。動作名必須是獨一無二的字符串,所以,一個好的習慣是使用基于 Java 包的命名方式的命名系統。

? category
使用 Android:category 屬性用來指定在什么樣的環境下動作才被響應。每個 Intent Filter 標簽可以包含多個 category 標簽。你可以指定自定義的種類或使用 Android 提供的標準值,如下所示:

? ALTERNATIVE
你將在這章的后面所看到的,一個 Intent Filter 的用途是使用動作來幫忙填入上下文菜單。 ALTERNATIVE 種類指定,在某種數據類型的項目上可以替代默認執行的動作。例如,一個聯系人的默認動作時瀏覽它,替代的可能是去編輯或刪除它。

? SELECTED_ALTERNATIVE
與 ALTERNATIVE 類似,但 ALTERNATIVE 總是使用下面所述的 Intent 解析來指向單一的動作。SELECTED_ALTERNATIVE在需要一個可能性列表時使用。

? BROWSABLE
指定在瀏覽器中的動作。當 Intent 在瀏覽器中被引發,都會被指定成 BROWSABLE 種類。

? DEFAULT
設置這個種類來讓組件成為 Intent Filter 中定義的 data 的默認動作。這對使用顯式 Intent 啟動的 Activity 來說也是必要的。

? GADGET
通過設置 GADGET 種類,你可以指定這個 Activity 可以嵌入到其他的 Activity 來允許。

? HOME
HOME Activity 是設備啟動(登陸屏幕)時顯示的第一個 Activity 。通過指定 Intent Filter 為 HOME 種類而不指定動作的話,你正在將其設為本地 home 畫面的替代。

? LAUNCHER
使用這個種類來讓一個 Activity 作為應用程序的啟動項。

? data
data 標簽允許你指定組件能作用的數據的匹配;如果你的組件能處理多個的話,你可以包含多個條件。你可以使用下面屬性的任意組合來指定組件支持的數據:

? android:host
指定一個有效的主機名(例如, com.google )。

? android:mimetype
允許你設定組件能處理的數據類型。例如,<type android:value=”vnd.android.cursor.dir/*”/>能匹配任何 Android 游標。

? android:path
有效地 URI 路徑值(例如, /transport/boats/ )。

? android:port
特定主機上的有效端口。

? android:scheme
需要一個特殊的圖示(例如, content 或 http )。

接下來的代碼片段顯示了如何配置 Activity 的 Intent Filter ,使其以在特定數據下的默認的或可替代的動作的身份來執行 SHOW_DAMAGE動作.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容