AndroidManifest.xml文件詳解(data)

語法(SYNTAX):

<dataandroid:host="string"
      android:mimeType="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:port="string"
      android:scheme="string"/>

包含於(CONTAINED IN):

<intent-filter>

說明(DESCRIPTION):

這個元素用於把數據規范添加到一個Intent過濾器中,數據規范能夠隻是數據類型(mimeType屬性)、或數據位置標識(URI),也可以是數據類型和數據位置標識(URI)。一個URI(如下格式)被分成幾個獨立的屬性來分別指定:

scheme://host:port/path or pathPrefix or pathPattern

 

這些屬性是可選的,但也是相互依賴的。如果沒有給Intent過濾器指定scheme屬性,那麼所有其他的URI屬性都會被忽略。如果沒有給過濾器指定host屬性,那麼port屬性和所有的路徑屬性都會被忽略。

包含在同一個<intent-filter>元素中所有的<data>元素隻會對這個過濾器起作用,例如:

<intent-filter . . . >
    <data android:scheme="something" android:host="project.example.com" />
    . . .
</intent-filter>

等同於

<intent-filter . . . >
    <data android:scheme="something" />
    <data android:host="project.example.com" />
    . . .
</intent-filter>

可以在<intent-filter>元素內放置多個<data>元素,來給過濾器設置多個數據選項。<data>元素的屬性沒有默認值。

 

屬性(ATTRIBUTES):

android:host

這個屬性用戶定義URI授權的主機部分,除非給過濾器也指定瞭<data>元素的scheme屬性,否則這個屬性沒有意義。

註意:在Android框架中,主機名的匹配是大小寫敏感的,跟RFC格式不一樣。因此,要始終使用小寫字母來指定主機名。

android:mimeType

這個屬性用於設定數據的MIME類型,如:image/jpeg或audio/mpeg4-generic。其子類型可用星號通配符(*)來代替,指示能夠跟任何子類型匹配。

註意:在Android框架中,MIME類型的匹配是大小寫敏感的,跟RFC格式不一樣。因此,要始終使用小寫字母來指定MIME類型。

android:path

android:pathPrefix

android:pathPattern

這個三個屬性用於指定URI的路徑部分。Path屬性指定一個完整的路徑,這個路徑會跟Intent對象中的路徑進行匹配。PathPrefix屬性隻指定瞭部分路徑,它會跟Intent對象中的路徑初始部分匹配。pathPattern屬性指定一個要跟Intent對象中的路徑進行匹配的完整路徑,但是這個路徑中可以包含下列通配符:

1. 星號(*)通配符,路徑中的*星號代表任意多個星號之前的那個字符,如a*,可跟a、aa、aaa、aaaa、…字符串匹配。

2. 點跟星號的組合(.*)通配符,它可以跟任意字符串進行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。

因為系統讀取XML中的字符串時,會把’\’符號作為強制轉義字符,因此就需要兩次轉義。例如,符號”*”要被寫成”\\*”,符號’\’要被寫成”\\\\”。這與Java代碼中的寫法基本相同。

有關這三種模式的更多信息,請看PatternMatcher類中的PATTERN_LITERAL、PATTERN_PREFIX、PATTERN_SIMPLE_GLOB的說明。

http://developer.android.com/reference/android/os/PatternMatcher.html

android:port

這個屬性用於定義URI授權的端口部分。隻有給過濾器指定瞭scheme和host屬性時,這個屬性才有意義。

android:scheme

這個屬性用於設定URI的scheme部分。它是給指定URI設置的最基本的屬性,至少要給過濾器設置一個scheme屬性,否則,其他的URI屬性就沒有意義瞭。

scheme屬性值沒有”:”符號結尾(如,http,而不是http: )

如果過濾器有一個數據類型(設置瞭mimeType屬性),但沒有設置scheme屬性,那麼系統就會假定scheme是content:和file:

註意:在Android框架中,scheme的匹配時大小寫敏感的,跟RFC格式不一樣。因此,要始終使用小寫字母來指定scheme。

被引入(INTRODUCED IN):

API Level 1

 

摘自 FireOfStar的專欄

發佈留言