问题背景
昨天有同事出现很奇怪的问题,就是AndroidManifest中的meta-data值读取不到了,简直就像灵异事件,以前都没有问题,他把问题给我描述之后我觉得不可能。于是去看了一下他的代码。一眼就找出了病根。他的代码如下。
1 2 3 4 5 |
<application> <meta-data android:name="UMENG_KEY" android:value="123412334"/> </application> |
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; } |
问题分析
注意看上面的两段代码,android:value=”123412334”,纯数字组成的字符串作为meta-data的value。而获取meta-data的时候是通过getString读取的,这就是问题的根源了。因为Android在处理meta-data的时候如果value可以转化为数值类型,那么它将会被转型。在代码中就无法通过getString获取到这个值了。
问题解决
要解决这个问题非常简单,可以讲value采用非数值类型,或者将数值类型转换为带0X的16进制表示。也可以在代码中使用getInt这样的方法来取值。