获取不到AndroidManifest中的meta-data

avatar
avatar
kktoo
45
文章
12
评论
2020年3月20日20:43:06 评论 2,000 1270字阅读4分14秒

现象描述

最近在项目中接入穿山甲广告的sdk,快速实现了核心功能验证。接下来就准备规范代码正式使用,却掉了一个坑,略做记录。

穿山甲sdk提供了一个appid的参数,不同渠道包是不同的,所以将其配入了gradle的productFlavors部分,即如下所示中的TT_APPID:

productFlavors {
        version_vivo {
            dimension "default"
            applicationIdSuffix ".vivo"

            manifestPlaceholders = [CHANEL_ID: "vivo1000",

                                    //穿山甲广告
                                    TT_APPID    : "5657678"
            ]
        }
}

再在AndroidManifest.xml中配置meta数据:

<meta-data
    android:name="CHANEL_ID"
    android:value="${CHANEL_ID}" />

 <meta-data
    android:name="TT_APPID"
    android:value="${TT_APPID}" />

初始化穿山甲sdk的时候获取meta数据:

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
AppUtil.CHANEL_ID = appInfo.metaData.getString("CHANEL_ID");
AppUtil.TT_APPID = appInfo.metaData.getString("TT_APPID");

这一系列步骤看起来完美无缺,但偏偏当信心满满run起来的时候,发现获取不到TT_APPID。

检查了下代码,发现CHANEL_ID都能获取到,偏偏获取不到TT_APPID,这不科学啊!

气死我也,本来如行云流水的敲代码过程就被中断了。

深呼吸,一顿各种检查,各种log查看,谷歌加百度支援,终于解决了问题。

问题分析

Android在处理meta-data的时候如果value可以转化为数值类型,那么它将自动被转换为数值类型。在代码中通过getString是无法获取到这个值的。而本案例中的CHANEL之所以可以获取到,因为不可转化为数值类型,而TT_APPID是可以转化为数值类型的

解决方法

  • 将value改用非数值类型
  • 也可以将数值类型转换为带0X的16进制表示
  • 或者使用getInt方法取值

 

我选用的是第3个解决方法

ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); 
AppUtil.CHANEL_ID =appInfo.metaData.getString("CHANEL_ID"); 
AppUtil.TT_APPID = "" + appInfo.metaData.getInt("TT_APPID");

 

 

 

继续阅读
avatar
  • 文本由 发表于 2020年3月20日20:43:06
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Android实现定位的解决方案 Android

Android实现定位的解决方案

1 前言 相当数量的app应用和游戏,都需要用到定位功能。主要有两类实现思路:一是使用Android自带的位置服务;二是接入第三方SDK,常见的有百度地图,高德地图,腾讯地图等等; 开门见山,先说结论...
Unity接入安卓SDK(3)厘清Gradle的版本 Android

Unity接入安卓SDK(3)厘清Gradle的版本

接入过程中,很多人遇到gradle的各种错误,由于对各种gradle版本的概念不甚了了,模模糊糊一顿操作猛如虎,糊弄的能编译通过就万事大吉,下次再遇到又是一脸懵逼。所以我们还是一起先厘清gradle的...
华为渠道接入的小细节 Android

华为渠道接入的小细节

一、集成HMS SDK 3.0报错AGConnectInitializeProvider 现象: 华为渠道接入使用的maven仓,兴冲冲配置完毕之后,一运行就crash了,真扫兴,查看logcat: ...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: