http://blog.csdn.net/think_soft/article/details/7567189
語法(SYNTAX):
被包含於(CONTAINED IN):
<activity>
<activity-alias>
<service>
<receiver>
<application>
<provider>
說明(DESCRIPTION):
這個元素用name- value對的格式給其父組件提供任意可選的數據。一個組件元素能夠包含任意多個<meta-data>子元素,所有這些元素中定義的值會被 收集到一個Bundle對象中,並且提供給組件的PackageItemInfo.metaData屬性字段。
通常值是通過其value屬性來指定的。但是,也可以使用resource屬性來代替,把一個資源ID跟值進行關聯。
例如,下面的代碼就是把存儲在@string/kangaroo資源中的值跟”zoo”名稱進行關聯:
<meta-data android:name="zoo" android:value="@string/kangaroo" />
另一個方面,使用resource屬性會給zoo分配一個數字資源ID,而不是保存在資源中的值。例如:
<meta-data android:name="zoo" android:resource="@string/kangaroo" />
要避免使用多個獨立的<meta-data>實體來提供相關的數據。相反如果有復雜的數據要跟組件關聯,那么把數據作為資源來保存,並使用resource屬性,把相關的資源ID通知給組件。
屬性(ATTRIBUTES):
android:name
針對項目的一個唯一名稱。使用Java樣式的命名規則,可以確保名稱的唯一性,例如:
com.example.project.activity.fred。
android:resource
這個屬性定義了一個要引用的資源。資源的ID會跟這個項目進行關聯。通過Bundle.getInt()方法能夠從meta-data的Bundle對象中獲取這個ID。
android:value
這個屬性會給這個項目分配一個值。下表列出了可能分配的數據的數據類型,以及獲取這些數據的方法:
類型 |
Bundle對象方法 |
字符串。對於一個Unicode字符,要使用雙斜線(\\)來進行轉義,如\\n和\\uxxxx |
getString() |
整數值,如100 |
getInt() |
布爾值,true或false |
getBoolean() |
顏色值,如#rgb、#argb、#rrggbb、#aarrggbb |
getString() |
浮點值,如1.23 |
getFloat() |
被引入版本(INTRODUCED IN):
API Level 1
在AndroidManifest.xml中,<meta-data>元素可以作為子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,但
不同的父元素,在應用時讀取的方法也不同。
1 :在Activity的應用。
xml代碼段:
<activity...>
<meta-data android:name="myMsg" android:value="hello my activity"></meta-data>
</activity>
java代碼段:
ActivityInfo info=this.getPackageManager()
.getActivityInfo(getComponentName(),
PackageManager.GET_META_DATA);
String msg=info.metaData.getString("myMsg");
System.out.println("myMsg:"+msg);
2:在application的應用。
xml代碼段:
<application...>
<meta-data android:value="hello my application" android:name="myMsg"></meta-data>
</application>
java代碼段:
ApplicationInfo appInfo = this.getPackageManager()
.getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA);
String msg=appInfo.metaData.getString("myMsg");
System.out.println("myMsg:"+msg);
3:在service的應用。
xml代碼段:
<service android:name="MetaDataService">
<meta-data android:value="hello my service" android:name="myMsg"></meta-data>
</service>
java代碼段:
ComponentName cn=new ComponentName(this, MetaDataService.class);
ServiceInfo info=this.getPackageManager()
.getServiceInfo(cn, PackageManager.GET_META_DATA);
String msg=info.metaData.getString("myMsg");
System.out.println("myMsg:"+msg);
4: 在receiver的應用。
xml代碼段:
<receiver android:name="MetaDataReceiver">
<meta-data android:value="hello my receiver" android:name="myMsg"></meta-data>
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>
java代碼段:
ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
ActivityInfo info=context.getPackageManager()
.getReceiverInfo(cn, PackageManager.GET_META_DATA);
String msg=info.metaData.getString("myMsg");
System.out.println("myMsg:"+msg);