有时候会用到元数据中的参数,比如定义的渠道号,类似友盟统计。也会用到定义在build.gradle文件中android标签下的defaultConfig标签下,添加manifestPlaceholders标签中,有可能也会用到渠道值。
& lt;元数据 android: name=" UMENG_CHANNEL " android:价值=" https://www.yisu.com/zixun/0 "/祝辞
<强>首先获取中元数据的值,直接看方法:强>
/* * *不同的类型要区别获取,以下是字符串类型的 * @param上下文上下午 * @param metaName元数据定义的名字 * @param defaultValue默认值 * @return */公共静态字符串getAppMetaDataString (metaName上下文语境,字符串,字符串defaultValue) { 尝试{//应用程序标签下用getApplicationinfo,如果是活动下的用getActivityInfo//刺类型的用getString,布尔类型的getBoolean,其他具体看api 字符串值=https://www.yisu.com/zixun/context.getPackageManager () PackageManager.GET_META_DATA .getApplicationInfo (context.getPackageName ()) . metadata。getString (metaName defaultValue); 返回值; }(PackageManager。NameNotFoundException e) { e.printStackTrace (); 返回defaultValue; } }
<强>获取build.gradle中的值:强>
manifestPlaceholders=[ JPUSH_PKGNAME: applicationId, JPUSH_APPKEY:“xxxxxxxxxxxxxxxxx ",//JPush上注册的包名对应的appkey。 JPUSH_CHANNEL:“developer-default ",//暂时填写默认值即可。 )
原理是一样的,manifestPlaceholders标签下的值需要在清单文件AndroidManifest.xml中占位显示,这里占位极光渠道号(ps:不知道极光文档有没有直接获取的):
这里的名字为名字随意,不重复就行,值为manifestPlaceholders下的定义的值,必须采用${变量值}
& lt;元数据android: name=" JPUSH_CHANNEL " android: value=" https://www.yisu.com/zixun/$ {JPUSH_CHANNEL} "/祝辞
<强>同用方法强>
/* * *获取元数据信息 * * @param名字 * @param def * @return */公共静态字符串getMetaDataValue(上下文语境、字符串名称 字符串def) { 字符串值=https://www.yisu.com/zixun/getMetaDataValue(上下文名称); 返回(值==null) ?def:价值; } 公共静态字符串getMetaDataValue(上下文语境,字符串名称){ 对象价值=零; PackageManager PackageManager=context.getPackageManager (); ApplicationInfo ApplicationInfo; 尝试{ applicationInfo=packageManager.getApplicationInfo ( context.getPackageName (), PackageManager.GET_META_DATA); 如果(零& & applicationInfo applicationInfo !=T?=null) { 值=applicationInfo.metaData.get(名称); } }(PackageManager。NameNotFoundException e) { 把新RuntimeException(“不会读书清单文件中的名称。”,e); } 如果(value=https://www.yisu.com/zixun/=null) { 把新的RuntimeException(“名称”+名字 + " '不是在清单文件中定义的元数据"); } 返回value.toString (); } >之前所以又回到了上一步,去获取元数据中的值了。说到底还是熟不熟悉PackageManager
<强> android元数据值获取的坑强>
获取元数据的时候,正常的非纯数字的字符串,设置在价值里面,用getString获取是正常的。
但是如果含有纯数字的字符串,用getString获取返回为null。也许你会想到用getInt, getLong获取,很抱歉,也可能是null。
<强>一。强>
继续使用价值=" https://www.yisu.com/zixun/1234567890 ",但是在纯数字字符串开头加上“\”(反斜杠+空格)这样系统会自动读取为字符串而不是其他格式,形如
& lt;元数据 android: name=" appkey " 1234567890 android: value=" https://www.yisu.com/"/祝辞<强>二。>强使用资源属性通过getInt获取资源id,再获取资源id对应的值,这种方式可扩展性很强,可以获取所有资源而不只是字符串,形如
& lt;元数据 android: name=" appkey " android:资源=癅string/AppKey”/祝辞在strings.xml中定义AppKey的值为
& lt;字符串名称=癆ppKey”在1234567890 & lt;/string>
Android实现获取元数据和build.gradle的值