Android实现获取元数据和build.gradle的值

  

有时候会用到元数据中的参数,比如定义的渠道号,类似友盟统计。也会用到定义在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的值