我们经常会在AndroidMainfest.xml中配置meta-data
,来记录一些配置项,并且分为两种情况,一种是在Application标签中meta-data,一种是在Activity中的meta-data,如下面的代码。
1 2 3 4 5 6 7 |
<application> <activity> <meta-data android:name="ACTIVITY_META" android:value="xxx"/> </activity> <meta-data android:name="UMENG_KEY" android:value="0XFFB12871"/> </application> |
为什么UMENG_KEY要用16进制表示而不是10进制的数字串呢?此处有一坑。
读取Activity中的meta-data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public static String metaDataInActivity(Activity context, String key) { String meta = null; try { ActivityInfo info = context.getPackageManager() .getActivityInfo(context.getComponentName(), PackageManager.GET_META_DATA); Bundle metaData = info.metaData; if (metaData != null) { meta = metaData.getString(key); } } catch (NameNotFoundException e) { e.printStackTrace(); } return meta; } |
读取Applicaiton中的meta-data
那么我们如何在运行时读取Application中的meta-data
呢?非常简单看下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public static String getMetaInApplication(Context context, String packageName, String key) { String value = ""; try { ApplicationInfo info = context.getPackageManager() .getApplicationInfo(packageName, PackageManager.GET_META_DATA); Bundle bundle = info.metaData; value = bundle.getString(key); } catch (Exception e) { e.printStackTrace(); } return value; } |
总结
两种方式只有细微的差别,一个是从ActivityInfo中读取的metaData,另一个是从ApplicationInfo中读取的metaData。正如他们在与他们在XML文档中的节点层次相对应。