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

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

代码如下:

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

[java] view plaincopy
 
  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 plaincopy
 
    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. }  
原文地址:https://www.cnblogs.com/likeju/p/4777930.html