在接入第三方渠道SDK的时候,经常会看到其配置文件AndroidManifest.xml有类似如下的定义:
  1. <!-- appid -->
  2. <meta-data
  3. android:name="APP_ID"
  4. android:value="037810BCE1D2260F32017643AC7D980C" />
  5. <!-- 发布渠道(可选) -->
  6. <meta-data
  7. android:name="APP_CHANNEL"
  8. android:value="QQ_CENTER" />

标签<meta-data>是提供组件额外的数据用的,它本身就是一个键值对,可以自定义名称和值。它可以包含在以下组件当中:

 
 
给各位看一个示例吧:
这是我定义的一个AndroidMenifest.xml配置文件
 
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.wwj.metadata"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="18" />
  9. <application
  10. android:allowBackup="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:theme="@style/AppTheme" >
  14. <activity
  15. android:name="com.wwj.metadata.MainActivity"
  16. android:label="@string/app_name" >
  17. <intent-filter>
  18. <action android:name="android.intent.action.MAIN" />
  19. <category android:name="android.intent.category.LAUNCHER" />
  20. </intent-filter>
  21. <!-- 在Activity定义的meta-data -->
  22. <meta-data
  23. android:name="myMsg"
  24. android:value="hello my activity" >
  25. </meta-data>
  26. </activity>
  27. <!-- 在Application定义的meta-data -->
  28. <meta-data
  29. android:name="myMsg"
  30. android:value="hello my application" >
  31. </meta-data>
  32. </application>
  33. </manifest>
笔者这里在Application级别和Activity级别都定义了一个meta-data,我们如何来取得这两个组件的值呢?如下:
 
  1. package com.wwj.metadata;
  2. import android.app.Activity;
  3. import android.content.pm.ActivityInfo;
  4. import android.content.pm.PackageManager;
  5. import android.content.pm.PackageManager.NameNotFoundException;
  6. import android.os.Bundle;
  7. public class MainActivity extends Activity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. //在Activity的应用
  13. try {
  14. ActivityInfo info = this.getPackageManager().getActivityInfo(
  15. getComponentName(), PackageManager.GET_META_DATA);
  16. String msg = info.metaData.getString("myMsg");
  17. System.out.println("myMsg:" + msg);
  18. } catch (NameNotFoundException e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. /*  1 :在Activity的应用。
  23. xml代码段:
  24. <activity...>
  25. <meta-data android:name="myMsg" android:value="hello my activity"></meta-data>
  26. </activity>
  27. java代码段:
  28. ActivityInfo info=this.getPackageManager()
  29. .getActivityInfo(getComponentName(),
  30. PackageManager.GET_META_DATA);
  31. String msg=info.metaData.getString("myMsg");
  32. System.out.println("myMsg:"+msg);
  33. 2:在application的应用。
  34. xml代码段:
  35. <application...>
  36. <meta-data android:value="hello my application" android:name="myMsg"></meta-data>
  37. </application>
  38. java代码段:
  39. ApplicationInfo appInfo = this.getPackageManager()
  40. .getApplicationInfo(getPackageName(),
  41. PackageManager.GET_META_DATA);
  42. String msg=appInfo.metaData.getString("myMsg");
  43. System.out.println("myMsg:"+msg);
  44. 3:在service的应用。
  45. xml代码段:
  46. <service android:name="MetaDataService">
  47. <meta-data android:value="hello my service" android:name="myMsg"></meta-data>
  48. </service>
  49. java代码段:
  50. ComponentName cn=new ComponentName(this, MetaDataService.class);
  51. ServiceInfo info=this.getPackageManager()
  52. .getServiceInfo(cn, PackageManager.GET_META_DATA);
  53. String msg=info.metaData.getString("myMsg");
  54. System.out.println("myMsg:"+msg);
  55. 4: 在receiver的应用。
  56. xml代码段:
  57. <receiver android:name="MetaDataReceiver">
  58. <meta-data android:value="hello my receiver" android:name="myMsg"></meta-data>
  59. <intent-filter>
  60. <action android:name="android.intent.action.PHONE_STATE"></action>
  61. </intent-filter>
  62. </receiver>
  63. java代码段:
  64. ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
  65. ActivityInfo info=context.getPackageManager()
  66. .getReceiverInfo(cn, PackageManager.GET_META_DATA);
  67. String msg=info.metaData.getString("myMsg");
  68. System.out.println("myMsg:"+msg);*/
  69. }

转自:http://blog.csdn.net/wwj_748/article/details/25079991

Android Manifest <meta-data>的更多相关文章

  1. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  2. Android manifest之系统自带的permission

    Android manifest之系统自带的permission 本文描述Android系统自带的permission.点击查看:“关于permission的原始定义和说明”.点击查看:“Androi ...

  3. Android Manifest.xml文件的结构及作用

    原文链接:http://android.eoe.cn/topic/android_sdk 每一个应用程序在工程的根目录下必须要有一个AndroidManifest.xml文件(一定要用这个名称).这个 ...

  4. Android manifest文件中的标签详细介绍

    官方文档 概要 每一个Android应用都应该包含一个manifest文件,即AndroidManifest.xml.它包含了程序运行的一些必备信息,比如:--为Java应用程序指定一个独一无二的名字 ...

  5. 【记】研究Sharding-JDBC遇到的一个异常(Caused by: io.shardingsphere.core.exception.ShardingException: Cannot get uniformed table structure for `t`. The different meta data of actual tables are as follows)

    一.异常信息 Caused by: io.shardingsphere.core.exception.ShardingException: Cannot get uniformed table str ...

  6. Android manifest 获取源代码

    /********************************************************************************* * Android manifes ...

  7. Android API之android.provider.ContactsContract.Data

    android.provider.ContactsContract.Data Constants for the data table, which contains data points tied ...

  8. android Manifest.xml选项

    结构 继承关系 public final class Manifest extends Object java.lang.Object android.Manifest 内部类 class  Mani ...

  9. Viewpager+Fragment 跳转Activity报错android.os.TransactionTooLargeException: data parcel size xxxxx bytes

    Viewpager + Fragment 跳转Activity报错android.os.TransactionTooLargeException: data parcel size xxxxx byt ...

  10. Android Manifest.xml详解

    一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...

随机推荐

  1. 【laravel5.*】添加ide_helper.php 助手

    1.参照文档:https://github.com/barryvdh/laravel-ide-helper#automatic-phpdoc-generation-for-laravel-facade ...

  2. Android短信管家视频播放器代码备份

    自己保留备份,增强记忆   这是video的类 public class VideoActivity extends Activity { /** * 解析网络页面 */ private WebVie ...

  3. JavaScript HTML DOM 入门详解

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过 ...

  4. memcached缓存基本概念

    Memcached是一套分布式内存对象缓存系统. 用于在动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升网站系统性能的目的:memcached在企业应用场景中一般是用来作为数据库的cac ...

  5. 软件公司的两种管理方式 总体来说,这个世界上存在两种不同的软件公司的组织结构。我把他们叫做 Widget Factory(小商品工厂) 和 Film Crews(电影工作组

    软件公司的两种管理方式 一个简单的回答应该是——“因为在我们的社会里,我们总是会认为薪水和会和职位的层次绑在一起”.但是,这个答案同时也折射出一个事实——我们的薪资是基于我们的所理解的价值,但这并没有 ...

  6. Ubuntu菜鸟入门(十一)—— windows 和 ubuntu时间冲突解决

    一.问题原由 Ubuntu和Windows默认的时间管理方式不同,所以双系统发生时间错乱是正常的 Ubuntu默认时间是把BIOS时间当成GMT+0时间,也就是世界标准时,而我国在东八区(GMT+8) ...

  7. 配置Hadoop1.2.1

    1.从Apache官网上下载1.2.1,地址:http://apache.dataguru.cn/hadoop/common/2.拷贝文件到虚拟机下(vm9下直接拖拽就可以)3.到Hadoop的目录下 ...

  8. Linux下通过关键字模糊查找搜索文件

    [背景] 想要在Linux下面,找之前不知道放到哪里的一个tomcat的文件. [折腾过程] 1.最后是参考: linux查找文件命令find – 发芽的石头 – 博客频道 – CSDN.NET 去搜 ...

  9. Junit 4.x 单元测试,参数化测试,套件测试 实例

    对下面三个类进行单元测试 ,组成套件测试. public class Calculate { public int add(int a, int b) { return a + b; } public ...

  10. Google大数据技术架构探秘

    原文地址:https://blog.csdn.net/bingdata123/article/details/79927507 Google是大数据时代的奠基者,其大数据技术架构一直是互联网公司争相学 ...