读取AndroidManifest文件的meta-data数据

AndroidManifest.xml中可以添加meta-data标签来定义一些配置数据,app中可以读取这些数据。
meta-data标签定义了一组键值对,分别为name和value。虽然meta-data没有定义数据类型的属性,但实际上meta-data数据是有数据类型的,而这个类型是由value的数据自动推导出来的。常用的类型如下:纯数字就属于int类型,带有非数字的字符就属于String类型,如果字符串是true或false就属于boolean类型。

举例如下:
AndroidManifest.xml中定义:

<application>
<meta-data
    android:name="test_int"
    android:value="2147483647" />
<meta-data
    android:name="test_string"
    android:value="abcdefg" />
<meta-data
    android:name="test_boolean"
    android:value="true" />
</application>

java中解析:

private void getMeta() {
    try {
        ApplicationInfo appInfo = context.getPackageManager()
                .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
        int testInt = appInfo.metaData.getInt("test_int");
        String testString = appInfo.metaData.getString("test_string", "");
        boolean testBoolean = appInfo.metaData.getBoolean("test_boolean", false);
        Log.d(TAG, "getMeta testInt=" + testInt + ",testString=" + testString + ",testBoolean=" + testBoolean);
    } catch (Exception x) {
        Log.e(TAG, "getMeta error=" + x);
    }
}

注:
1.meta-data数据是有数据类型的,如果没有按照正确的数据类型来取数据,则得不到预期的数据。
2.某些数据类型在定义数据时,需要特别注意数据的取值范围。比如int类型,其最大值是2^31-1,亦即:2147483647。如果定义的数据大于这个值,也将得不到预期的数据。那如何得到超出取值范围的数据呢?有一个方法是添加前缀字符串使其转换为字符串类型,在解析时按照字符串类型来读取,然后去掉前缀,从而得到预期的数据。
3.在定义boolean类型数据时,可以在忽略大小写的情况下定义value数据,比如:true、True、TRUE、false、False、FALSE都可以正确解析。
4.meta-data数据在AndroidManifest.xml中可以定义在<application>、<activity>、<activity-alias>、<service>、<receiver>、<provider>标签中,本文举例处于最常用的<application>标签中。当然每种情况的解析方法是不同的,本文暂不做详细介绍。

猜你喜欢

转载自blog.csdn.net/chenzhengfeng/article/details/110093807