Android学习之 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. }  


生活不易,全靠努力,谢谢支持了


猜你喜欢

转载自blog.csdn.net/u011652925/article/details/79391443