在AndroidManifest.xml清單文件中 咱們有時會看到以下相似的<meta-data ... >元素開始的配置內容:html
- <meta-data
- android:name="com.google.android.maps.v2.API_KEY"
- android:value="AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo" />
- <meta-data
- android:name="com.google.android.gms.version"
- android:value="@integer/google_play_services_version" />
標籤<meta-data>是提供組件額外的數據用的,它自己就是一個鍵值對,能夠自定義名稱和值。它能夠包含在如下組件當中:
<activity>、<application> 、<service> 和 <receiver>java
1、如何配置<mate-data...>元素:android
標籤<meta-data>元素的配置語法以下:api
- <meta-data android:name="string"
- android:resource="resource specification"
- android:value="string" />
說明:通常的值能夠經過value屬性來指定,可是若是要指定一個資源的id,則須要使用resource屬性來配置。app
如如下配置內容:this
- <meta-data android:name="api_key" android:value="@string/api_key" />
指定的api_key值爲存儲在資源文件string中的api_key值 如:AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo
如如下配置內容:google
- <meta-data android:name="resId" android:resource="@string/res_id" />
指定的resId值則是爲res_id的資源id號 而不是string中的res_id值
2、如何獲取<mate-data...>元素配置的值:
一、在<application...>元素下配置<mate-data...>元素
xml代碼段:spa
- <application...>
- .....
- <meta-data
- android:name="api_key"
- android:value="AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo" />
- </application>
Java代碼段:.net
- try {
- ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),
- PackageManager.GET_META_DATA);
- String value = appInfo.metaData.getString("api_key");
- Log.d("Tag", " app key : " + value);
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
二、在<activity...>元素下配置<mate-data...>元素
xml代碼段:xml
- <activity ...>
- .....
- <meta-data android:name="resource_id"
- android:resource="@string/ice" />
- </activity>
Java代碼段:
- try {
- ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(),
- PackageManager.GET_META_DATA);
-
- int value = activityInfo.metaData.getInt("resource_id");
- Log.d("Activity Tag", "resource_id : " + value);
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
三、在<service...>元素下配置<mate-data...>元素
xml代碼段:
- <service android:name="MetaDataService">
- .....
- <meta-data android:name="service_meta_data" android:value="xxxxxxx" />
- </service>
Java代碼段:
- try {
- ComponentName cn=new ComponentName(this, MetaDataService.class);
- ServiceInfo info=this.getPackageManager()
- .getServiceInfo(cn, PackageManager.GET_META_DATA);
- String value = info.metaData.getString("service_meta_data");
- Log.d("Service TAG", " value == " + value);
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }
四、在<receiver...>元素下配置<mate-data...>元素
xml代碼段:
- <receiver android:name="MetaDataReceiver">
- .....
- <meta-data android:name="receiver_meta_data" android:value="xxxxxxx" />
- </receiver>
Java代碼段:
- try {
- ComponentName cn=new ComponentName(this, MetaDataReceiver.class);
- ActivityInfo info=context.getPackageManager()
- .getReceiverInfo(cn, PackageManager.GET_META_DATA);
- String value = info.metaData.getString("receiver_meta_data");
- Log.d("Receiver TAG", " value == " + value);
- } catch (PackageManager.NameNotFoundException e) {
- e.printStackTrace();
- }