当前位置:   article > 正文

AndroidManifest.xml中的meta-data标签、gradle中的manifestPlaceholder的应用_activity标签中的meta-data

activity标签中的meta-data

参考链接:

1,Android开发之修改Manifest中meta-data的数据_今人不见古时月,今月曾经照古人的博客-CSDN博客

2,AndroidManifest中meta-data动态修改的问题_今人不见古时月,今月曾经照古人的博客-CSDN博客 

一、manifest中的元数据标签

在Android中环可以在manifest设置元信息meta-data为四大组件配置元信息,然后通过Java代码读取的来使用。

语法格式

  1. <meta-data android:name="string"
  2. android:resource="resource specification"
  3. android:value="string" />

1.Activity标签中:

  1. <activity...>
  2. <meta-data android:name="sex" android:value="man"></meta-data>
  3. </activity>

在代码中动态获取:

  1. ActivityInfo info=this.getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
  2. String msg =info.metaData.getString("sex");

2.application标签中:

  1. <application...>
  2. <meta-data android:name="sex" android:value="man"></meta-data>
  3. </application>

在代码中动态获取:

  1. ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
  2. String msg=appInfo.metaData.getString("sex");

3.在service标签中:

  1. <service android:name="MetaDataService">
  2. <meta-data android:name="sex" android:value="man"></meta-data>
  3. </service>

在代码中获取:

  1. ComponentName cn=new ComponentName(this, MetaDataService.class);
  2. ServiceInfo info=this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
  3. String msg=info.metaData.getString("sex");

4.在receive标签中:

  1. <receiver android:name="MetaDataReceiver">
  2. <meta-data android:name="sex" android:value="man"></meta-data>
  3. <intent-filter>
  4. <action android:name="android.intent.action.PHONE_STATE"></action>
  5. </intent-filter>
  6. </receiver>

在代码中获取:

  1. ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
  2. ActivityInfo info=context.getPackageManager()
  3. .getReceiverInfo(cn, PackageManager.GET_META_DATA);
  4. String msg=info.metaData.getString("sex");

二、AndroidGradle为我们提供了非常便捷的方式让我们来替换AndroidManifest文件中的内容,他就是manifestPlacholder、Manifest占位符。

ManifestPlaceholders 是 ProductFlavor 的一个属性,ProductFlavorsandroid的一个属性,可以再android闭包中配置,ProductFlavors同时又是ProductFlavor的一个容器,可以在ProductFlavors的闭包参数中配置任意个ProductFlavor

  1. apply plugin: 'command.android.application'
  2. android {
  3. compileSdkVersion 28
  4. defaultConfig {...}
  5. buildTypes {...}
  6. flavorDimensions "api"
  7. productFlavors {
  8. xiaomi {
  9. dimension "api"
  10. manifestPlaceholders.put("sex","男")
  11. }
  12. huawei {
  13. dimension "api"
  14. applicationIdSuffix ".demo"
  15. manifestPlaceholders.put("sex","女")
  16. }
  17. full {
  18. dimension "api"
  19. applicationIdSuffix ".full"
  20. versionNameSuffix "-full"
  21. }
  22. tetd {
  23. dimension "api"
  24. }
  25. }
  26. }
  27. dependencies {...}

三、AndroirdManifest.xmlgradlejava代码三者结合,针对appliation中的meta-data举例

1.在AndroirdManifest.xml中的application节点中添加

  1. <application...>
  2. <meta-data android:name="sex" android:value="$sexValue"></meta-data>
  3. </application>

2.在profuctFlavor中设置占位符的值。比如小米版本的设置为,华为版本的设置为

  1. productFlavors {
  2. xiaomi {
  3. dimension "api"
  4. manifestPlaceholders.put("sexValue","男")
  5. }
  6. huawei {
  7. dimension "api"
  8. applicationIdSuffix ".demo"
  9. manifestPlaceholders.put("sexValue","女")
  10. }
  11. }

3.在Java代码中

  1. ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
  2. String msg=appInfo.metaData.getString("sex");

这样取值因版本而已,比如小米版本取出来的值就是,华为版本取出来的就是。 #四、实际案例 参考有梦多渠道打包


转载于:https://juejin.cn/post/6844903747944988686

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/265432
推荐阅读
相关标签
  

闽ICP备14008679号