android 获取application和activity下meta-data中的值

        meta-data在AndroidManifest中是以键值对的形式存在的,可以将meta-data放在application根节点下,也可以放在某个activity节点下。因为存放的位置不同,因此获取value时也要使用对应的方法,下面是我写的一个小测试。

代码如下:

先是在AndroidManifest中的application和mainActivity下添加两个meta-data属性。

[java]  view plain copy
  1. <application  
  2.     android:allowBackup="true"  
  3.     android:icon="@drawable/ic_launcher"  
  4.     android:label="@string/app_name"  
  5.     android:theme="@style/AppTheme" >  
  6.     <meta-data  
  7.         android:name="com.lzy.test"  
  8.         android:value="测试" />  
  9.   
  10.     <activity  
  11.         android:name=".MainActivity"  
  12.         android:label="@string/app_name" >  
  13.         <meta-data  
  14.             android:name="com.example.metatest.MainActivity.com.lzy.activity.test"  
  15.             android:value="Activity测试" />  
  16.   
  17.         <intent-filter>  
  18.             <action android:name="android.intent.action.MAIN" />  
  19.   
  20.             <category android:name="android.intent.category.LAUNCHER" />  
  21.         </intent-filter>  
  22.     </activity>  
  23. </application>  

接下来在mainActivity中来获取这两个属性的值。

[java]  view plain copy
  1. package com.example.metatest;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.ComponentName;  
  5. import android.content.pm.ActivityInfo;  
  6. import android.content.pm.ApplicationInfo;  
  7. import android.content.pm.PackageManager;  
  8. import android.content.pm.PackageManager.NameNotFoundException;  
  9. import android.os.Bundle;  
  10. import android.util.Log;  
  11. import android.widget.Toast;  
  12.   
  13. /** 
  14.  * meta 测试 
  15.  *  
  16.  * @author Administrator 
  17.  *  
  18.  */  
  19.   
  20. public class MainActivity extends Activity {  
  21.   
  22.     public static final String TEST = "com.lzy.test";  
  23.   
  24.     public static final String ACTIVITYTEST = MainActivity.class.getName()+".com.lzy.activity.test";  
  25.   
  26.     @Override  
  27.     protected void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.activity_main);  
  30.           
  31.         String test = getMetaDataStringApplication(TEST, null);  
  32.           
  33.         String activityTest = getMetaDataStringFromActivity(ACTIVITYTEST, null);  
  34.           
  35.         Toast.makeText(this, test+"--"+activityTest, Toast.LENGTH_LONG).show();  
  36.     }  
  37.       
  38.     /** 
  39.      * 根据key从Application中返回的Bundle中获取value 
  40.      *  
  41.      * @param key 
  42.      * @param defValue 
  43.      * @return 
  44.      */  
  45.     private String getMetaDataStringApplication(String key, String defValue) {  
  46.         Bundle bundle = getAppMetaDataBundle(getPackageManager(), getPackageName());  
  47.         if (bundle != null && bundle.containsKey(key)) {  
  48.             return bundle.getString(key);  
  49.         }  
  50.         return defValue;  
  51.     }  
  52.       
  53.     /** 
  54.      * 获取Application中的meta-data. 
  55.      *  
  56.      * @param packageManager 
  57.      * @param packageName 
  58.      * @return 
  59.      */  
  60.     private Bundle getAppMetaDataBundle(PackageManager packageManager,  
  61.             String packageName) {  
  62.         Bundle bundle = null;  
  63.         try {  
  64.             ApplicationInfo ai = packageManager.getApplicationInfo(packageName,  
  65.                     PackageManager.GET_META_DATA);  
  66.             bundle = ai.metaData;  
  67.         } catch (NameNotFoundException e) {  
  68.             Log.e("getMetaDataBundle", e.getMessage(), e);  
  69.         }  
  70.         return bundle;  
  71.     }  
  72.       
  73.     /** 
  74.      * 根据key从Activity中返回的Bundle中获取value 
  75.      *  
  76.      * @param key 
  77.      * @param defValue 
  78.      * @return 
  79.      */  
  80.     private String getMetaDataStringFromActivity(String key, String defValue) {  
  81.         Bundle bundle = getActivityMetaDataBundle(getPackageManager(), getComponentName());  
  82.         if (bundle != null && bundle.containsKey(key)) {  
  83.             return bundle.getString(key);  
  84.         }  
  85.         return defValue;  
  86.     }  
  87.       
  88.     /** 
  89.      * 获取Activity中的meta-data. 
  90.      *  
  91.      * @param packageManager 
  92.      * @param component 
  93.      * @return 
  94.      */  
  95.     private Bundle getActivityMetaDataBundle(PackageManager packageManager, ComponentName component) {  
  96.         Bundle bundle = null;  
  97.         try {  
  98.             ActivityInfo ai = packageManager.getActivityInfo(component,  
  99.                     PackageManager.GET_META_DATA);  
  100.             bundle = ai.metaData;  
  101.         } catch (NameNotFoundException e) {  
  102.             Log.e("getMetaDataBundle", e.getMessage(), e);  
  103.         }  
  104.   
  105.         return bundle;  
  106.     }  
  107.   
  108. }  

源码下载

你可能感兴趣的:(android 获取application和activity下meta-data中的值)