Android-自定義meta-data擴展數據

在接入第三方渠道SDK的時候,常常會看到其配置文件AndroidManifest.xml有相似以下的定義:
[html]   view plain copy 在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>是提供組件額外的數據用的,它自己就是一個鍵值對,能夠自定義名稱和值。它能夠包含在如下組件當中:
 
 
給各位看一個示例吧:
這是我定義的一個AndroidMenifest.xml配置文件
 
[html]   view plain copy 在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 plain copy 在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="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="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="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="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/25079991html

相關文章
相關標籤/搜索