在 Android 的 Mainfest 清单文件中,Application,Activity,Recriver,Service 的节点中都有这个的存在。很多时候我们可以通过 meta-data 来配置一些东西,例如我们可以配一个app相应的欢迎页面跳转后的主页等等。

下面直接上代码:

AndroidMainfest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="me.fwl.metadatademo"> <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!--Application的MetaData的配置-->
<meta-data android:name="applicationMetadataKey" android:value="applicationMetadataValue"/>
<activity android:name=".MainActivity">
<!--Activity的MetaData的配置-->
<meta-data android:name="activityMetadataKey" android:value="activityMetadataValue"/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <receiver android:name=".MainReceiver">
<!--Receiver的MetaData的配置-->
<meta-data android:name="receiverMetadataKey" android:value="receiverMetadataValue"/>
</receiver>
<service android:name=".MainService">
<!--Service的MetaData的配置-->
<meta-data android:name="serviceMetadataKey" android:value="serviceMetadataValue"/>
</service>
</application> </manifest>
MainActivity.java
 public class MainActivity extends AppCompatActivity implements View.OnClickListener {

     private TextView result;
private Context mContext;
private ComponentName cn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
cn = this.getComponentName();
result = (TextView) findViewById(R.id.result);
findViewById(R.id.app).setOnClickListener(this);
findViewById(R.id.act).setOnClickListener(this);
findViewById(R.id.rec).setOnClickListener(this);
findViewById(R.id.ser).setOnClickListener(this);
} @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.app:
try {
ApplicationInfo appInfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), PackageManager.GET_META_DATA);
String appMV = appInfo.metaData.getString("applicationMetadataKey");
result.setText(appMV);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
break;
case R.id.act:
try {
ActivityInfo actInfo = mContext.getPackageManager().getActivityInfo(cn, PackageManager.GET_META_DATA);
String actMV = actInfo.metaData.getString("activityMetadataKey");
result.setText(actMV);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} break;
case R.id.rec:
ComponentName recCn = new ComponentName(mContext, MainReceiver.class);
try {
ActivityInfo recInfo = mContext.getPackageManager().getReceiverInfo(recCn, PackageManager.GET_META_DATA);
String recMV = recInfo.metaData.getString("receiverMetadataKey");
result.setText(recMV);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
break;
case R.id.ser:
ComponentName serCn = new ComponentName(mContext, MainService.class);
try {
ServiceInfo serInfo = mContext.getPackageManager().getServiceInfo(serCn, PackageManager.GET_META_DATA);
String serMV = serInfo.metaData.getString("serviceMetadataKey");
result.setText(serMV);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
break;
}
}
}

至于MainActivity对应的布局文件,还有一个Service和一个Receiver的代码就不贴了,也没啥意义,都是空的,布局文件里面就一个Textview来展示结果,和4个按钮,没了。各自YY吧。

代码也就在这里了,其实换汤不换药,只是稍微有点区别罢了,仔细看看就懂了。

2017-1-5 16:39

Android 获取meta-data中的数据的更多相关文章

  1. Vue 在beaforeCreate时获取data中的数据

    众所周知,vue在beforecreate时期是获取不到data中的 数据的 但是通过一些方法可以实现在beforecreate时获取到data中的数据 暂时想到两种放发可以实现,vue在before ...

  2. 在小程序中修改上一个页面里data中的数据调用上一个页面的方法

    //获取已经打开的页面的数组 var pages = getCurrentPages(); //获取上一个页面的所有的方法和data中的数据  var lastpage = pages[pages.l ...

  3. 项目中通过Sorlj获取索引库中的数据

    在开发项目中通过使用Solr所提供的Solrj(java客户端)获取索引库中的数据,这才是真正对项目起实质性作用的功能,提升平台的检索性能及检索结果的精确性 第一步,引入相关依赖的jar包 第二步,根 ...

  4. v-bind:value="diy" 添加到 <input type="button" /> 中可以,添加到<button />中不可以,diy是data中的数据

    v-bind:value="diy" 添加到 <input type="button" /> 中可以, 添加到<button />中不可 ...

  5. Android 读取<meta-data>元素中的数据

    众所周知, 每个组件都有<meta-data>元素, 用于接收一些外部数据(eg: appKey), 那其中的值应该怎么读取呢. 1> Application <applica ...

  6. [爬虫]通过url获取连接地址中的数据

    1. 要想获取指定连接的数据,那么就得使用HtmlDocument对象,要想使用HtmlDocument对象就必需引用using HtmlAgilityPack; 2. 详细步骤如下:     步骤一 ...

  7. asp.net网页上获取其中表格中的数据(爬数据)

    下面的方法获取页面中表格数据,每个页面不相同,获取的方式(主要是正则表达式)不一样,只是提供方法参考.大神勿喷,刚使用了,就记下来了. 其中数据怎么存,主要就看着怎么使用了.只是方便记录就都放在lis ...

  8. vue 需求 data中的数据之间的调用

    我遇到过这种情况  就是在我的data中 会有数据调用data中的其他数据 如图  我的alertInfoType需要拿到screeningCondition中type的值 用过vue的都知道 我是不 ...

  9. vue父组件中获取子组件中的数据

    <FormItem label="上传头像" prop="image"> <uploadImg :width="150" ...

  10. Mysql字符串截取_获取指定字符串中的数据

    前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index('www.sql ...

随机推荐

  1. 从备考PMP到与项目经理同呼吸

    前言 PMP是什么梗? 项目管理专业人士资格认证.它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证 ...

  2. XML技术之DOM4J解析器

    由于DOM技术的解析,存在很多缺陷,比如内存溢出,解析速度慢等问题,所以就出现了DOM4J解析技术,DOM4J技术的出现大大改进了DOM解析技术的缺陷. 使用DOM4J技术解析XML文件的步骤? pu ...

  3. 多线程爬坑之路-Thread和Runable源码解析

    多线程:(百度百科借一波定义) 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提 ...

  4. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  5. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  6. 深入学习HBase架构原理

    HBase定义 HBase 是一个高可靠.高性能.面向列.可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建 大规模结构化存储集群. HBase 是Google Bigtabl ...

  7. windows下的命令行工具babun

    什么是babun babun是windows上的一个第三方shell,在这个shell上面你可以使用几乎所有linux,unix上面的命令,他几乎可以取代windows的shell.用官方的题目说就是 ...

  8. Dancing Links and Exact Cover

    1. Exact Cover Problem DLX是用来解决精确覆盖问题行之有效的算法. 在讲解DLX之前,我们先了解一下什么是精确覆盖问题(Exact Cover Problem)? 1.1 Po ...

  9. Selenium-java-获取当前时间

    1 获取当前时间 // 获取当前时分秒 Calendar now = Calendar.getInstance(); int is = now.get(Calendar.HOUR_OF_DAY); i ...

  10. [异常特工]android常见bug跟踪

    前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...