1. 程式人生 > >Android 如何獲取 umeng 的 渠道資訊

Android 如何獲取 umeng 的 渠道資訊

今天想獲取清單檔案的中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()+“”;