android开发中获取<meta-data>数据

  在 AndroidManifest.xml 中,<meta-data>元素是一个键值对,往往被包含在<application> 、<activity>、<service>和<receiver>等元素中,但是不同父元素中<meta-data>读取方法也不同。

  <meta-data>基本结构:<meta-data android:name="string" android:resource="resource specification" android:value = "string" /> (其中resource、value两者选其一),一个组件元素能够包含任意数量的<meta-data>子元素,它们所有的值都会被收集在Bundle对象中,作为组件的 PackageItemInfo.metaData 字段。 

  android:name 元数据项的名字,需保证唯一性。

  android:resource 资源的一个引用,指定给这个项的值是该资源的id。该id可通过bundle.getInt()从<meta-data>中获取。

  android:value 指定给这一项的值,可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法如下。

 数据类型  示例 获取方法
 字符串  "abcd"  getString()
 整数  "1"  getInt()
 布尔  "true"  getBoolean()
 颜色  "#rgb", "#argb", "#rrggbb"  getInt()
 浮点  "1.1"  getFloat()

 

  

 

 

 

  

  一般的值可以通过value属性来指定,但是如果要指定一个资源id作为一个值,那么就要用resource属性来代替。假如 <meta-data android:name="test_name" android:value="test_value" />,则在不同父元素中读取方法如下所示:

1、读取<application>中的<meta-data>
 1 import android.content.pm.ApplicationInfo;
 2 import android.content.pm.PackageManager;
 3 import android.content.pm.PackageManager.NameNotFoundException;
 4 try
 5 {
 6   ApplicationInfo info = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
 7   String value = info.metaData.getString("test_name");
 8 }
 9 catch (NameNotFoundException e)
10 {
11   e.printStackTrace();
12 }
View Code
2、读取<activity>中的<meta-data> 
 1 import android.content.pm.ActivityInfo;
 2 import android.content.pm.PackageManager;
 3 import android.content.pm.PackageManager.NameNotFoundException;
 4 try
 5 {
 6   ActivityInfo info = this.getPackageManager().getActivityInfo(getPackageName(), PackageManager.GET_META_DATA);
 7   String value = info.metaData.getString("test_name");
 8 }
 9 catch (NameNotFoundException e)
10 {
11   e.printStackTrace();
12 } 
View Code
3、读取<service>中的<meta-data>
1 ComponentName cn = new ComponentName(this, MetaDataService.class);
2 ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
3 String value = info.metaData.getString("test_name");
View Code
4、读取<receiver>中的<meta-data>
1 ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
2 ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
3 String value = info.metaData.getString("test_name");
View Code
posted @ 2016-05-12 15:06  gaoyanglao  阅读(1338)  评论(0编辑  收藏  举报