Manifest中meta-data擴展元素數據的配置與獲取

 在AndroidManifest.xml清單文件中 咱們有時會看到以下相似的<meta-data ... >元素開始的配置內容:html

[html]  view plain  copy
 
  1. <meta-data  
  2.     android:name="com.google.android.maps.v2.API_KEY"  
  3.     android:value="AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo" />  
  4. <meta-data  
  5.     android:name="com.google.android.gms.version"  
  6.     android:value="@integer/google_play_services_version" />  

標籤<meta-data>是提供組件額外的數據用的,它自己就是一個鍵值對,能夠自定義名稱和值。它能夠包含在如下組件當中:
<activity>、<application> 、<service> 和 <receiver>java

 

1、如何配置<mate-data...>元素:android

標籤<meta-data>元素的配置語法以下:api

[html]  view plain  copy
 
  1. <meta-data android:name="string"  
  2.      android:resource="resource specification"  
  3.      android:value="string" />  

說明:通常的值能夠經過value屬性來指定,可是若是要指定一個資源的id,則須要使用resource屬性來配置。app

 

如如下配置內容:this

[html]  view plain  copy
 
  1. <meta-data android:name="api_key" android:value="@string/api_key" />  

指定的api_key值爲存儲在資源文件string中的api_key值 如:AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo

如如下配置內容:google

[html]  view plain  copy
 
  1. <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

[html]  view plain  copy
 
  1. <application...>  
  2.     .....  
  3.     <meta-data  
  4.           android:name="api_key"  
  5.           android:value="AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo" />  
  6. </application>  

Java代碼段:.net

[java]  view plain  copy
 
  1. try {  
  2.     ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),  
  3.             PackageManager.GET_META_DATA);  
  4.     String value = appInfo.metaData.getString("api_key");  
  5.     Log.d("Tag", " app key : " + value);  // Tag﹕ app key : AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo  
  6. catch (PackageManager.NameNotFoundException e) {  
  7.     e.printStackTrace();  
  8. }  


二、在<activity...>元素下配置<mate-data...>元素
xml代碼段:xml

[html]  view plain  copy
 
  1. <activity ...>  
  2.     .....  
  3.     <meta-data android:name="resource_id"  
  4.           android:resource="@string/ice" />  
  5. </activity>  

Java代碼段:

[java]  view plain  copy
 
  1. try {  
  2.     ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(),  
  3.             PackageManager.GET_META_DATA);  
  4.     // 獲取到的是 @string/ice 對應的資源id值  
  5.     int value = activityInfo.metaData.getInt("resource_id");  
  6.     Log.d("Activity Tag", "resource_id : " + value);  // Activity Tag﹕ resource_id : 2131361808  
  7. catch (PackageManager.NameNotFoundException e) {  
  8.     e.printStackTrace();  
  9. }  

 

三、在<service...>元素下配置<mate-data...>元素

xml代碼段:

[html]  view plain  copy
 
  1. <service android:name="MetaDataService">  
  2.       .....  
  3.       <meta-data android:name="service_meta_data" android:value="xxxxxxx" />  
  4. </service>  

Java代碼段:

[java]  view plain  copy
 
  1. try {  
  2.      ComponentName cn=new ComponentName(this, MetaDataService.class);  
  3.      ServiceInfo info=this.getPackageManager()  
  4.                 .getServiceInfo(cn, PackageManager.GET_META_DATA);  
  5.      String value = info.metaData.getString("service_meta_data");  
  6.      Log.d("Service TAG", " value == " + value);  
  7. catch (PackageManager.NameNotFoundException e) {  
  8.      e.printStackTrace();  
  9. }  


四、在<receiver...>元素下配置<mate-data...>元素
xml代碼段:

[html]  view plain  copy
 
  1. <receiver android:name="MetaDataReceiver">  
  2.       .....  
  3.       <meta-data android:name="receiver_meta_data" android:value="xxxxxxx" />  
  4. </receiver>  

Java代碼段:

[java]  view plain  copy
 
  1. try {  
  2.      ComponentName cn=new ComponentName(this, MetaDataReceiver.class);  
  3.      ActivityInfo info=context.getPackageManager()  
  4.                              .getReceiverInfo(cn, PackageManager.GET_META_DATA);  
  5.      String value = info.metaData.getString("receiver_meta_data");  
  6.      Log.d("Receiver TAG", " value == " + value);  
  7. catch (PackageManager.NameNotFoundException e) {  
  8.      e.printStackTrace();  
  9. }  
相關文章
相關標籤/搜索