首页 > 代码库 > Android-自定义meta-data扩展数据

Android-自定义meta-data扩展数据

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

标签<meta-data>是提供组件额外的数据用的,它本身就是一个键值对,可以自定义名称和值。它可以包含在以下组件当中:
<activity> 
<activity-alias> 
<application> 
<provider> 
<receiver>
 
 
给各位看一个示例吧:
这是我定义的一个AndroidMenifest.xml配置文件
 
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  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.   
  7.     <uses-sdk  
  8.         android:minSdkVersion="8"  
  9.         android:targetSdkVersion="18" />  
  10.   
  11.     <application  
  12.         android:allowBackup="true"  
  13.         android:icon="@drawable/ic_launcher"  
  14.         android:label="@string/app_name"  
  15.         android:theme="@style/AppTheme" >  
  16.         <activity  
  17.             android:name="com.wwj.metadata.MainActivity"  
  18.             android:label="@string/app_name" >  
  19.             <intent-filter>  
  20.                 <action android:name="android.intent.action.MAIN" />  
  21.   
  22.                 <category android:name="android.intent.category.LAUNCHER" />  
  23.             </intent-filter>  
  24.             <!-- 在Activity定义的meta-data -->  
  25.             <meta-data  
  26.                 android:name="myMsg"  
  27.                 android:value="hello my activity" >  
  28.             </meta-data>  
  29.         </activity>  
  30.   
  31.         <!-- 在Application定义的meta-data -->  
  32.         <meta-data  
  33.             android:name="myMsg"  
  34.             android:value="hello my application" >  
  35.         </meta-data>  
  36.     </application>  
  37.   
  38. </manifest>  


笔者这里在Application级别和Activity级别都定义了一个meta-data,我们如何来取得这两个组件的值呢?如下:
 
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.wwj.metadata;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.pm.ActivityInfo;  
  5. import android.content.pm.PackageManager;  
  6. import android.content.pm.PackageManager.NameNotFoundException;  
  7. import android.os.Bundle;  
  8.   
  9. public class MainActivity extends Activity {  
  10.   
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.activity_main);  
  15.         //在Activity的应用  
  16.         try {  
  17.             ActivityInfo info = this.getPackageManager().getActivityInfo(  
  18.                     getComponentName(), PackageManager.GET_META_DATA);  
  19.             String msg = info.metaData.getString("myMsg");  
  20.             System.out.println("myMsg:" + msg);  
  21.         } catch (NameNotFoundException e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
  25.       
  26.       
  27. /*  1 :在Activity的应用。 
  28.     xml代码段: 
  29.    <activity...> 
  30.        <meta-data android:name="myMsg" android:value="http://www.mamicode.com/hello my activity"></meta-data> 
  31.     </activity> 
  32.      
  33.     java代码段: 
  34.    ActivityInfo info=this.getPackageManager() 
  35.                           .getActivityInfo(getComponentName(), 
  36.                           PackageManager.GET_META_DATA); 
  37.     String msg=info.metaData.getString("myMsg"); 
  38.     System.out.println("myMsg:"+msg); 
  39. 2:在application的应用。 
  40.    xml代码段: 
  41.   <application...> 
  42.        <meta-data android:value="http://www.mamicode.com/hello my application" android:name="myMsg"></meta-data> 
  43.    </application> 
  44.     
  45.    java代码段: 
  46.     ApplicationInfo appInfo = this.getPackageManager() 
  47.                                   .getApplicationInfo(getPackageName(),  
  48.                           PackageManager.GET_META_DATA); 
  49.     String msg=appInfo.metaData.getString("myMsg"); 
  50.     System.out.println("myMsg:"+msg); 
  51. 3:在service的应用。 
  52.    xml代码段: 
  53.    <service android:name="MetaDataService"> 
  54.       <meta-data android:value="http://www.mamicode.com/hello my service" android:name="myMsg"></meta-data> 
  55.    </service> 
  56.    java代码段: 
  57.    ComponentName cn=new ComponentName(this, MetaDataService.class); 
  58.    ServiceInfo info=this.getPackageManager() 
  59.                         .getServiceInfo(cn, PackageManager.GET_META_DATA); 
  60.     String msg=info.metaData.getString("myMsg"); 
  61.     System.out.println("myMsg:"+msg); 
  62. 4: 在receiver的应用。 
  63.    xml代码段: 
  64.     <receiver android:name="MetaDataReceiver"> 
  65.             <meta-data android:value="http://www.mamicode.com/hello my receiver" android:name="myMsg"></meta-data> 
  66.             <intent-filter> 
  67.                 <action android:name="android.intent.action.PHONE_STATE"></action> 
  68.             </intent-filter> 
  69.     </receiver> 
  70.    java代码段: 
  71.     ComponentName cn=new ComponentName(context, MetaDataReceiver.class); 
  72.     ActivityInfo info=context.getPackageManager() 
  73.                              .getReceiverInfo(cn, PackageManager.GET_META_DATA); 
  74.     String msg=info.metaData.getString("myMsg"); 
  75.     System.out.println("myMsg:"+msg);*/  
  76.   
  77. }  

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