• Android读取Manifest文件下Application等节点下的metadata自定义数据


    介绍

    Android在 提供了meta-date使用键值对的形式实现自定义配置。一般使用中作为渠道标识。可以用 在<application>,<activity>,<activity-alias> ,<provider> ,<receiver>节点下。所有的值存储在同一个Bundle里面,可以使用 PackageItemInfo.metaData渠道这些数据。

    使用形式:

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

    resource 和 value直接用一个即可,但是注意如果使用

     1 <meta-data android:name="zoo" android:value="@string/kangaroo" /> 

    那么得到的是ID值,也就是在R文件里面的数字,不是实际资源值。而要使用resource来取资源值(使用getInt()获取)。

     1 <meta-data android:name="zoo" android:resource="@string/kangaroo" /> 

    android:name:确保是唯一的就OK了。

    android:value:值可以是:

    1.字符串 使用getString()获取

    2.整数 如“100” 使用getInt()获取

    3.布尔值:“true”,"false" 使用getBoolean()获取

    4.颜色值: "#rgb", "#argb", "#rrggbb", 或者 "#aarrggbb" 使用getInt()获取

    5.浮点值 :“1.2” 使用getFloat()

    注意:Bundle中使用的是return (String) o;来获取的代码获取一个StringValue值的,如果你配置的想配置的一个字符串的值是“000”时,但是在将metadata包装成bundle 的时候,"000"被解析成整数0,所以使用getString()获取的会是null。

    实例:

    在Manifest节点里最后加上:

     1 <meta-data android:value="GOOGLEPLAY_V165" android:name="HAIWAN_CHANNEL"/> 

    在自定义的Application里面一个方法

    1 public String getHaiwanVersion() {
    2         String channel = "";
    3         try {
    4             channel = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA).metaData.getString("HAIWAN_CHANNEL");
    5         } catch (NameNotFoundException e) {
    6             e.printStackTrace();
    7         }
    8         return channel;
    9     }

    其他节点:

     1 //在Activity应用<meta-data>元素。
     2     ActivityInfo info = this.getPackageManager()
     3             .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
     4     info.metaData.getString("meta_name");
     5  
     6     //在application应用<meta-data>元素。
     7     ApplicationInfo appInfo = this.getPackageManager()
     8             .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
     9     appInfo.metaData.getString("meta_name");
    10  
    11     //在service应用<meta-data>元素。
    12     ComponentName cn = new ComponentName(this, MetaDataService.class);
    13     ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
    14     info.metaData.getString("meta_name");
    15  
    16     //在receiver应用<meta-data>元素。
    17     ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
    18     ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
    19     info.metaData.getString("meta_name");
  • 相关阅读:
    .NET.GC 浅谈.net托管程序中的资源释放问题 (转帖)
    VB 中实现 For Each
    创建 ODBC 数据源以连接到 Windows CE 设备上的Sybase数据库
    VB 调用水晶报表2
    VC数据类型
    对.Net 垃圾回收Finalize 和Dispose的理解
    C# 播放器
    [转载]帮助C#菜鸟进入GDI+开发
    线程间操作无效: 从不是创建控件 的线程访问它
    VB.Net 中 WithEvents、AddHandler
  • 原文地址:https://www.cnblogs.com/eachann/p/4558553.html
Copyright © 2020-2023  润新知