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


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

[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>

 

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

標簽<meta-data>元素的配置語法如下:

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

說明:一般的值可以通過value屬性來指定,但是如果要指定一個資源的id,則需要使用resource屬性來配置。

 

如以下配置內容:

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

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

如以下配置內容:

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

指定的resId值則是為res_id的資源id號 而不是string中的res_id值


二、如何獲取<mate-data...>元素配置的值:
1、在<application...>元素下配置<mate-data...>元素
xml代碼段:

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

Java代碼段:

[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. }  


2、在<activity...>元素下配置<mate-data...>元素
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. }  

 

3、在<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. }  


4、在<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. }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM