Android获取渠道名称

有时候因为业务需求,需要在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计。那么就需要在和服务器交互之前,先获取应用软件的渠道标识,才能进一步完成后续地相关操作。

《Android获取渠道名称》 渠道名称图

1. 设置渠道号
<manifest ... >
  ...
  <application ... >    
    <meta-data
        android:name="UMENG_APPKEY"
        android:value="xxxxxxxxxxxxxxxx" />
    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="${ChannelName}" />     
     ...
  </application/>
</manifest>

2. 获取渠道名

① 使用友盟自己的API方法获取

public static String getChannelName(Context ctx){
    String channelName = AnalyticsConfig.getChannel(ctx);
    return channelName;
}

② 友盟统计 + Gradle配置多渠道打包的方式获取

1)Gradle多渠道配置
Android Studio多渠道打包、自定义APK打包名称

2)获取application中的meta-data数据

/**
  * 获取application中指定的meta-data
  * @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
  */
public static String getAppMetaData(Context ctx, String key) {
    if (ctx == null || TextUtils.isEmpty(key)) {
        return null;
    }
    String resultData = null;
    try {
        PackageManager packageManager = ctx.getPackageManager();
        if (packageManager != null) {
            //注意此处为ApplicationInfo,因为友盟设置的meta-data是在application标签中
            ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
            if (applicationInfo != null) {
                if (applicationInfo.metaData != null) {
                    //key要与manifest中的配置文件标识一致
                    resultData = applicationInfo.metaData.getString(key);
                }
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    return resultData;
}

★ 对比上述两种方法,方法一虽然简单,但是有一定的局限性;而方法二,先获取PackageMananger,再去获取 Application中的信息,进而获取 meta-data中的数据,这样我们不仅能拿到渠道标识,而且还可以获取其他信息做更多的事情。

    原文作者:翻译不了的声响
    原文地址: https://www.jianshu.com/p/7972a0eed4b4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞