• Android 阅读Manifest在文件Application 在与其他节点meta-data定义自己的数据


    介绍

    Android提供meta-date使用键值在实现自己的自定义配置的形式。

    通常用作信道标识。它可以用在<application>,<activity>,<activity-alias> ,<provider> ,<receiver>节点下。全部的值存储在同一个Bundle里面,能够使用 PackageItemInfo.metaData渠道这些数据。

    使用形式:

    <meta-data android:name="string"
               android:resource="resource specification"
               android:value="string" />
    
    resource 和 value直接用一个就可以,可是注意假设使用

    <meta-data android:name="zoo" android:value="@string/kangaroo" />
    那么得到的是ID值,也就是在R文件中面的数字。不是实际资源值。而要使用resource来取资源值(使用getInt()获取)。

    <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节点里最后加上:
    <meta-data android:value="GOOGLEPLAY_V165" android:name="HAIWAN_CHANNEL"/>
    在自己定义的Application里面一个方法:
    /**
    	 * 获取Manifest里面配置的渠道版本号
    	 * <p>2014-11-14</p>
    	 * @return
    	 * @author RANDY.ZHANG
    	 */
    	public String getHaiwanVersion() {
    		String channel = "";
    		try {
    			channel = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA).metaData.getString("HAIWAN_CHANNEL");
    		} catch (NameNotFoundException e) {
    			e.printStackTrace();
    		}
    		return channel;
    	}
    其它节点:
    //在Activity应用<meta-data>元素。
        ActivityInfo info = this.getPackageManager()
                .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
        info.metaData.getString("meta_name");
     
        //在application应用<meta-data>元素。
        ApplicationInfo appInfo = this.getPackageManager()
                .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
        appInfo.metaData.getString("meta_name");
     
        //在service应用<meta-data>元素。
        ComponentName cn = new ComponentName(this, MetaDataService.class);
        ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
        info.metaData.getString("meta_name");
     
        //在receiver应用<meta-data>元素。
        ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
        ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
        info.metaData.getString("meta_name");

    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    bzoj1098 1301
    bzoj3237
    bzoj3170
    bzoj4008
    一些题解
    bzoj4028
    bzoj3196
    redis学习
    quartz学习
    电商618 压测、优化、降级预案
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4625936.html
Copyright © 2020-2023  润新知