Android 如何獲取 umeng 的 渠道資訊
阿新 • • 發佈:2019-01-08
今天想獲取清單檔案的中UMENG_CHANNAL 的值但是 Debug 的時候,老是報 null.
<meta-data android:name="UMENG_CHANNEL" android:value="test" />
一般的方法:
抽取之後:<span style="font-size:18px;"><span style="font-size:18px;">/** * 獲取渠道名 * @param ctx 此處習慣性的設定為activity,實際上context就可以 * @return 如果沒有獲取成功,那麼返回值為空 */ public static String getChannelName(Activity ctx) { if (ctx == null) { return null; } String channelName = null; try { PackageManager packageManager = ctx.getPackageManager(); if (packageManager != null) { //注意此處為ApplicationInfo 而不是 ActivityInfo,因為友盟設定的meta-data是在application標籤中,而不是某activity標籤中,所以用ApplicationInfo ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null) { if (applicationInfo.metaData != null) { channelName = applicationInfo.metaData.getString(""); } } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return channelName; }</span></span>
<span style="font-size:18px;"><span style="font-size:18px;"> /** * 獲取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; }</span></span>
總結:
在 Debug模式下打印不出來渠道的資訊! 但是在釋出的版本就可以 打印出資訊!
總結中的問題: 已經解決了?
思考: 之所以出現這種問題, 是因為 在 Debug 模式下, applicationInfo.metaData.getString() 當出現
<meta-data
android:name="UMENG_CHANNEL" android:value="360" />
的時候, 這樣 系統就會 自動的 判斷 360 是int型,這個時候只能使用 applicationInfo.metaData.getInt() 方法獲取。
解決方案:
這兩種方式可以解決, 但是 需要判斷 感覺麻煩。
所以 最佳的解決方案:
MyAplication.umeng_channal = applicationInfo.metaData.get()+“”;