今天想获取清单文件的中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()+“”;




更多相关文章

  1. android之activity切换
  2. Android(安卓)游戏开发 View框架
  3. Android(安卓)判断当前线程是否是主线程的两种方法
  4. Android:解析JSON的三种方式
  5. Android集成百度定位SDK实现获取定位地址
  6. Android6.0(包括)以后获取Wifi 扫描信息列表即getScanResults()
  7. Android中获取字符串长度、宽度(所占像素宽度)
  8. eclipse build 不生成apk的办法
  9. Android(安卓)Framework层Power键关机流程(一,Power长按键操作处理

随机推荐

  1. Android开发环境的调研
  2. Android学习笔记(16):绝对布局AbsoluteLa
  3. Could not find helloworld.apk
  4. Android中如何引入Lambda表达式
  5. android 4.0动画学习
  6. Android例子—直接通过Binder的onTransac
  7. Android Interface(UI) 界面控件简单介绍
  8. Android ASE 脚本环境
  9. android 自定义导航控件
  10. android获取经纬度和地方名称