關於多渠道打包獲取渠道為null的坑!
阿新 • • 發佈:2019-02-13
1:清單檔案寫入
2:獲得channel的方法
2.1簡單的方法
private String getChannel() {
try {
PackageManager pm = getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
return appInfo.metaData.getString("UMENG_CHANNEL");
} catch (PackageManager.NameNotFoundException ignored) {
}
return "";
}
2.2.稍微麻煩的但是全面的方法
/**
* 獲取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 applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
resultData = applicationInfo.metaData.getString(key);
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return resultData;
}
3:最後你會發現如果你的values值是拼音或字串還行,但是純數字轉換會出現問題例如你們會用1001代表應用寶渠道
系統就會 自動的 判斷 1001 是int型,這個時候只能使用 applicationInfo.metaData.getInt() 方法獲取
4:解決辦法:
MyAplication.umeng_channal = applicationInfo.metaData.get()+“”;