Android获取meta-data和build.gradle的值

有时候会用到meta-data中的参数,比如定义的渠道号,类似友盟统计。也会用到定义在build.gradle文件中android标签下的defaultConfig标签下,添加manifestPlaceholders标签中,有可能也会用到渠道值。

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="0"/>

首先获取meta-data中的值,直接看方法:

 /**
     * 不同的类型要区别获取,以下是String类型的
     * @param context  上下午
     * @param metaName  meta-data定义的名字
     * @param defaultValue  默认值
     * @return
     */
    public static String getAppMetaDataString(Context context, String metaName, String defaultValue) {
        try {
            //application标签下用getApplicationinfo,如果是activity下的用getActivityInfo
            //Sting类型的用getString,Boolean类型的getBoolean,其他具体看api
            String value = context.getPackageManager()
                       .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA)
                    .metaData.getString(metaName, defaultValue);
            return value;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return defaultValue;
        }
    }

获取build.gradle中的值:

 manifestPlaceholders = [
                JPUSH_PKGNAME : applicationId,
                JPUSH_APPKEY : "xxxxxxxxxxxxxxxxx", //JPush上注册的包名对应的appkey.
                JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
        ]

原理是一样的,manifestPlaceholders标签下的值需要在清单文件AndroidManifest.xml中占位显示,这里占位极光渠道号(ps:不知道极光文档有没有直接获取的):

这里 name 为 名字随意,不重复就行,value 为manifestPlaceholders下的定义的值,必须采用 ${变量值}

<meta-data android:name="JPUSH_CHANNEL"
                   android:value="${JPUSH_CHANNEL}"/>

同用方法

 /**
     * 获取MetaData信息
     *
     * @param name
     * @param def
     * @return
     */
    public static String getMetaDataValue(Context context, String name,
                                          String def) {
        String value = getMetaDataValue(context, name);
        return (value == null) ? def : value;
    }

    public static String getMetaDataValue(Context context, String name) {
        Object value = null;
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo applicationInfo;
        try {
            applicationInfo = packageManager.getApplicationInfo(
                    context.getPackageName(), PackageManager.GET_META_DATA);
            if (applicationInfo != null && applicationInfo.metaData != null) {
                value = applicationInfo.metaData.get(name);
            }
        } catch (PackageManager.NameNotFoundException e) {
            throw new RuntimeException(
                    "Could not read the name in the manifest file.", e);
        }
        if (value == null) {
            throw new RuntimeException("The name '" + name
                    + "' is not defined in the manifest file's meta data.");
        }
        return value.toString();
    }

所以又回到了上一步,去获取meta-data中的值了。说到底还是熟不熟悉PackageManager

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值