zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    同名覆盖引发的问题
    矩阵快速幂模板题
    矩阵快速幂模板
    常见的代码错误情况
    十进制快速幂
    用唯一分解定理求m/n
    map用法
    游戏通关
    排序
    初识《设计模式》
  • 原文地址:https://www.cnblogs.com/likeju/p/4777930.html
Copyright © 2011-2022 走看看