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

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中的数据,这样我们不仅能拿到渠道标识,而且还可以获取其他信息做更多的事情。
网友评论