在接入第三方渠道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. Javascript中类型的判断

    数据类型的判断有这么几种方式 1.一元运算符 typeOf 2.关系运算符 instanceof 3.constructor 属性 4.prototype属性 一.typeof typeof的返回值有 ...

  2. java实现https ssl请求url

    import java.io.*;import java.net.*;import java.security.*;import java.security.cert.*;import java.ut ...

  3. Fedora23 chrome 安装

    添加FZUG源终端:进入到root1.下载google-chrome.repo并保存$wget http://repo.fdzh.org/chrome/google-chrome-mirrors.re ...

  4. Vue.js 综合

    <!DOCTYPE HTML> <html> <head> <title>vue.js 处理用户输入</title> <script ...

  5. Android启动过程深入解析

    本文由 伯乐在线 - 云海之巅 翻译.未经许可,禁止转载!英文出处:kpbird.欢迎加入翻译小组. 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Li ...

  6. 【MAVEN】如何在Eclipse中创建MAVEN项目

    目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...

  7. 【Oracle】Oracle中常用的系统函数

    Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果.在Oracle还可以自定义函数,关于更多信息可以查 ...

  8. Git 分支(分布式版本控制系统)

    前言 几乎所有的版本控制系统都以某种形式支持分支.使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是一个略微低效的过程--常常需要完全创建一个源代码目录的 ...

  9. git使一个非仓库型的工程可以推送

    git config receive.denycurrentbranch false

  10. Groovy 学习手册(7)

    10. Groovy GPars GPars 一开始在 Groovy 中作为一个单独的项目,同时带来了很多并发的机制.它包含了很多并行的map/redue,Actors,以及其他很多并发的模块. 1. ...