在 AndroidManifest.xml 中,<meta-data>元素是一个键值对,往往被包含在<application> 、<activity>、<service>和<receiver>等元素中,但是不同父元素中<meta-data>读取方法也不同。

  <meta-data>基本结构:<meta-data android:name="string" android:resource="resource specification" android:value = "string" /> (其中resource、value两者选其一),一个组件元素能够包含任意数量的<meta-data>子元素,它们所有的值都会被收集在Bundle对象中,作为组件的 PackageItemInfo.metaData 字段。

  android:name 元数据项的名字,需保证唯一性。

  android:resource 资源的一个引用,指定给这个项的值是该资源的id。该id可通过bundle.getInt()从<meta-data>中获取。

  android:value 指定给这一项的值,可以作为值来指定的数据类型并且组件用来找回那些值的Bundle方法如下。

 数据类型  示例 获取方法
 字符串  "abcd"  getString()
 整数  "1"  getInt()
 布尔  "true"  getBoolean()
 颜色  "#rgb", "#argb", "#rrggbb"  getInt()
 浮点  "1.1"  getFloat()

  

  

  一般的值可以通过value属性来指定,但是如果要指定一个资源id作为一个值,那么就要用resource属性来代替。假如 <meta-data android:name="test_name" android:value="test_value" />,则在不同父元素中读取方法如下所示:

1、读取<application>中的<meta-data>
 import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
try
{
  ApplicationInfo info = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
  String value = info.metaData.getString("test_name");
}
catch (NameNotFoundException e)
{
  e.printStackTrace();
}
2、读取<activity>中的<meta-data> 
 import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
try
{
  ActivityInfo info = this.getPackageManager().getActivityInfo(getPackageName(), PackageManager.GET_META_DATA);
  String value = info.metaData.getString("test_name");
}
catch (NameNotFoundException e)
{
  e.printStackTrace();
}
3、读取<service>中的<meta-data>
 ComponentName cn = new ComponentName(this, MetaDataService.class);
ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
String value = info.metaData.getString("test_name");
4、读取<receiver>中的<meta-data>
 ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
String value = info.metaData.getString("test_name");

android开发中获取<meta-data>数据的更多相关文章

  1. Android开发中Bundle用法包裹数据(转)

    Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ...

  2. Android 开发中使用Intent传递数据的方法

    Activity之间通过Intent传递值,支持基本数据类型和String对象及 它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.shor ...

  3. Android开发之获取xml文件的输入流对象

    介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...

  4. android开发中的5种存储数据方式

    数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...

  5. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  6. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  7. Android开发中,那些让您觉得相见恨晚的方法、类或接口

    Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...

  8. 【转】Android开发中Handler的使用

    在Android开发中,我们经常会遇到这样一种情况:在UI界面上进行某项操作后要执行一段很耗时的代码,比如我们在界面上点击了一个”下载“按钮,那么我们需要执行网络请求,这是一个耗时操作,因为不知道什么 ...

  9. Android编程中的5种数据存储方式

    Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...

随机推荐

  1. AssetBundle in Unity 5.0

    http://forum.unity3d.com/threads/new-assetbundle-build-system-in-unity-5-0.293975/

  2. 获取ip的ip138.com

    代码: function get_onlineip() { $ch = curl_init('http://iframe.ip138.com/ic.asp'); curl_setopt($ch, CU ...

  3. mysql的Replication机制

    mysql的Replication机制 参考文档:http://www.doc88.com/p-186638485596.html Mysql的 Replication 是一个异步的复制过程. 从上图 ...

  4. Winform端上传图片到服务器

    转载自  在winform实现文件上传到服务器 webform上传文件可能大家都写过很多,一个HtmlInputFile.PostedFile.SaveAs就搞定了,不过不知道大家有没有在winfor ...

  5. TFS2012 安装 配置笔记

    TFS2012安装   具体请看文档..   http://yunpan.cn/cmt4X6S7TjEgq  访问密码 464e     TFS2012配置 环境:VS2012  SQL2008  T ...

  6. SqlServer 18456 错误解决方案

    sqlserver 安装需注意事项:  不要选择,否则运行一段时间后sqlserver登录时会出现18456错误. 发生18456错误(sa 可登录的情况下)解决本地用户登录问题的方案: <1& ...

  7. CentOs图形界面的开启与关闭

    1.1 shell中运行 init 3  进入文本模式,同时会关闭相关的服务(Xserver 肯定关闭) 1.2 Alt+Ctrl+F1~F6到字符界面,root登陆,ps aux|grep /usr ...

  8. RTX二次开发(一)(基于ASP.NET)

    腾讯通RTX是(Real Time eXpert)是腾讯公司推出的企业级实时通信平台,致力于帮助企业提高运作效率.降低沟通成本.拓展商业机会,是一种高度可管理.低成本.易部署的IT平台.RTX集成了丰 ...

  9. winform 开发心得~

    winform自适应不同分辨率 不同dpi 1.窗体AutoScaleMode属性 使用None 2.自定义控件 AutoScaleMode 使用Inherit 3.所有控件窗体字体使用px为单位

  10. 【转载】Unity 优雅地管理资源,减少占用内存,优化游戏

    转自:星辰的<Unity3D占用内存太大的解决方法> 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D  ...