在接入第三方渠道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. cnpm不是内部或外部命令 cnpm: command not found

    问题是处在于 你没用用淘宝的镜像 安装cnpm 不信 你打下cnpm -v,  看是  是不是也不是内部命令: 好了,那就安装下吧 npm install cnpm -g --registry=htt ...

  2. Emacs中Golang的设置

    欲善其事,先利其器.下面记录一些使用Emacs24做golang开发中的一些有用设置,备忘用. 一,golang中的代码跳转 emacs24的go-mode中默认用godef-describe,god ...

  3. iOS App转让流程详情教程篇

    最近对公司旗下两款app进行转让,正好记一下操作流程: 1.登录iTunes发布网站,找到app,查看App信息下方有个[转让 App] 按钮. 2.点进去,是如下界面,里面包含是否满足转让条件,理论 ...

  4. ILP32、ILP64、LP64、LLP64、64位系统

    Data Type     ILP32      ILP64     LP64      LLP64char              8             8            8     ...

  5. [转]HTML DIV+CSS 命名规范大全

    原文链接 常用DIV+CSS命名大全集合,即CSS命名规则 我们开发CSS+DIV网页(Xhtml)时候,比较困惑和纠结的事就是CSS命名,特别是新手不知道什么地方该如何命名,怎样命名才是好的方法. ...

  6. SqlServer2005 海量数据 数据表分区解决难题

    超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算.而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长.这不但影响着数据库的运行效率,也增大数据库的维护难度.除了表的数据量外,对表 ...

  7. 【MySQL】MySQL支持的数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3 ...

  8. 在Linux CentOS 6.6上安装RedisLive

    Real time dashboard for redis 安装必须软件 1.安装pip到指定的python版本下面: curl -O https://bootstrap.pypa.io/get-pi ...

  9. 算法中的 log 到底是什么?

    之前一直不解为何算法中经常会看到 log 今天看<数据结构与算法分析 Java 语言描述>(第 3 版)2.4.3 节 求最大子序列和的分治算法实现时才注意到原因 翻看第 29 页的最后一 ...

  10. 让Label等控件支持HTML格式的代码? 使用NSAttributedString:

    > 如何让Label等控件支持HTML格式的代码? 使用NSAttributedString: NSString *htmlString = @"<div>Tate< ...