1. 程式人生 > >關於多渠道打包獲取渠道為null的坑!

關於多渠道打包獲取渠道為null的坑!

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()+“”;