在接入第三方渠道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. 使用httpClient调用接口获取响应数据

    转自:https://blog.csdn.net/shuaishuaidewo/article/details/81136088 import lombok.extern.slf4j.Slf4j; i ...

  2. django日志使用TimeRotateFileHandler

    如果使用django的settings.py设置日志会产生一些问题. 问题描述 报错信息如下: Traceback (most recent call last): File "C:\Pyt ...

  3. 【RS】Modeling User Exposure in Recommendation - 在推荐中建模用户的暴露程度

    [论文标题]Modeling User Exposure in Recommendation (2016-WWW) [论文作者]Dawen Liang,Laurent Charlin,James Mc ...

  4. iOS 开发中的 Tips(一)

    背景 学习6个小Tips 那就跟我一起学习小知识点吧.目录如下: 修改Mac终端(Terminal)里不同类型文件的显示颜色 修改Mac终端(Terminal)的提示文字 Mac终端显示/隐藏文件命令 ...

  5. 安装好php后找不到php.ini

    很多同学在安装完php后找不到php.ini而烦恼. 通常php.ini的位置在: /etc目录下或/usr/local/lib目录下. 如果你还是找不到php.ini或者找到了php.ini修改后不 ...

  6. Unicode和UTF的关系

    目录结构: contents structure [+] 什么是USC UCS的编码方式 Unicode的来源 为什么需要Unicode Unicode的方式 Unicode和UTF UTF和Unic ...

  7. Swift 基础知识

    前言 Swift 是一门强类型语言,全面支持 Unicode 编码. Swift 中的定义和实现是在同一个单元中的,通常一个 Swift 源代码单文件是以 .swift 结尾的. Swift 不需要单 ...

  8. ef 通用类

    using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.I ...

  9. Android中3种全屏方法及3种去掉标题栏的方法

    一.去掉标题栏的方法 第一种:入门的时候经常使用的一种方法 复制代码代码如下:  requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉标题栏注意这句一 ...

  10. 小而美的ghost driver

    做过selenium自动化项目的同学应该都遇到过这样的问题:测试用例太多,运行速度过慢导致团队成员怨声载道. 于是便有了selenium grid和多线程运行selenium测试用例的方法.这些方法各 ...