您的位置:首页 > 移动开发 > Android开发

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

2015-05-29 14:46 567 查看
转自:http://www.it165.net/pro/html/201411/26936.html

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

使用形式:

view
sourceprint?

1.
<meta-data
android:name=
"string"


2.
android:resource=
"resource
specification"


3.
android:value=
"string"
/>


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

view
sourceprint?

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


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

view
sourceprint?

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节点里最后加上:

view
sourceprint?

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


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

view
sourceprint?

01.
/**


02.
*
获取Manifest里面配置的渠道版本


03.
*
<p>2014-11-14</p>


04.
*
@return


05.
*
@author RANDY.ZHANG


06.
*/


07.
public
String
getHaiwanVersion() {


08.
String
channel =
""
;


09.
try
{


10.
channel
=
this
.getPackageManager().getApplicationInfo(getPackageName(),
PackageManager.GET_META_DATA).metaData.getString(
"HAIWAN_CHANNEL"
);


11.
}
catch
(NameNotFoundException
e) {


12.
e.printStackTrace();


13.
}


14.
return
channel;


15.
}


其他节点:

view
sourceprint?

01.
//在Activity应用<meta-data>元素。


02.
ActivityInfo
info =
this
.getPackageManager()


03.
.getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);


04.
info.metaData.getString(
"meta_name"
);


05.


06.
//在application应用<meta-data>元素。


07.
ApplicationInfo
appInfo =
this
.getPackageManager()


08.
.getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);


09.
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"
);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: