轉自http://justjavac.javaeye.com/blog/698026
如果一個
Intent
請求在一片資料上執行一個動作,
Android
如何知道哪個應用程式(和組件)能用來響應這個請求呢?
Intent Filter就是
用來註冊
Activity
、
Service
和
Broadcast Receiver
具有能在某種資料上執行一個動作的能力。
使用
Intent Filter
,應用程式組件告訴
Android
,它們能為其它程式的組件的動作請求提供服務,包括同一個程式的組件、本地的或第三方的應用程式。為了註冊一個應用程式組件為
Intent
處理者,在組件的
manifest
節點添加一個
intent-filter
標籤。
在
Intent Filter
節點裡使用下面的標籤(關聯屬性),你能指定組件支援的動作、種類和資料:
❑
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動作。(建立地震內容將在下一章節。)
- <activity android:name=”.EarthquakeDamageViewer”
android:label=”View Damage”>
- <intent-filter>
- <action android:name=”com.paad.earthquake.intent.action.SHOW_DAMAGE” />
- <category android:name=”android.intent.category.DEFAULT” />
- <category android:name=”android.intent.category.ALTERNATIVE_SELECTED” />
- <data android:mimeType=”vnd.earthquake.cursor.item/*” />
- </intent-filter>
- </activity>