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. }  

源码下载

时间: 2024-12-20 16:32:37

android 获取application和activity下meta-data中的值的相关文章

android获取当前运行Activity名字的方法_Android

本文实例讲述了android获取当前运行Activity名字的方法,可以避免即时聊天再出现通知的情况.分享给大家供大家参考.具体方法如下: 最近在做IM时需要知道当前Activity是哪一个Activity.自己整理一下两种方法 第一种:要方便一点(Service中无法使用) 复制代码 代码如下: private String getRunningActivityName() {          String contextString = context.toString();       

android获取当前运行Activity名字的方法

本文实例讲述了android获取当前运行Activity名字的方法,可以避免即时聊天再出现通知的情况.分享给大家供大家参考.具体方法如下: 最近在做IM时需要知道当前Activity是哪一个Activity.自己整理一下两种方法 第一种:要方便一点(Service中无法使用) 复制代码 代码如下:private String getRunningActivityName() {          String contextString = context.toString();        

jQuery获取(选中)单选,复选框,下拉框中的值

 本篇文章主要是对jQuery获取(选中)单选,复选框,下拉框中的值的实现方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 实例如下:    代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>MyHtml.html</title>   <meta http-equiv="

android 获取上一个activity返回值的方法_Android

activity A和B A 获取数据的activity  B返回数据的activity 点击A上的按钮,在A的textview上显示B中的联系人列表选中的数据 用到baseadapter 1:在主配置文件中声明Bactivity 和 注册通讯录的读写权限 [html] 复制代码 代码如下: <span style="font-size:18px;"> <!-- 注册通讯录的读写权限 -->  <uses-permission android:name=&

android 获取上一个activity返回值的方法

activity A和B A 获取数据的activity  B返回数据的activity 点击A上的按钮,在A的textview上显示B中的联系人列表选中的数据 用到baseadapter 1:在主配置文件中声明Bactivity 和 注册通讯录的读写权限 [html]复制代码 代码如下:<span style="font-size:18px;"> <!-- 注册通讯录的读写权限 -->  <uses-permission android:name=&qu

request-后台获取&amp;amp;lt;input &amp;amp;gt;元素中的值

问题描述 后台获取<input >元素中的值 <input type="button" value="创建问卷" name="sendBtn" id="sendBtn" class="butn" isDraft=0>; <input type="button" value="存草稿" name="workBTN" id

springmvc-velocity页面怎么获取List&amp;amp;lt;Map&amp;amp;gt;中的值,就是获取list集合中的值

问题描述 velocity页面怎么获取List<Map>中的值,就是获取list集合中的值 @RequestMapping("my-team") public String myTeam(ModelMap model){ this.setLayout(LayoutType.STUDENT); String employeeCode= CurrentUserUtil.getCurrentUserName(); List list=employeePhotoService.qu

如何获取GridView编辑状态下单元格里的值?

还在使用这样的代码吗? var txtName = grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName") as TextBox;if (txtName != null){ // 读取值 //} 其实这些工作(在单元格中查找控件,并尝试获取其中的值)已经被封装了 .现在,只要调用 ExtractValuesFromCell 方法即可. 而该方法也被很多种列类型所支持: DataControlField, BoundField, Au

jQuery获取(选中)单选,复选框,下拉框中的值_jquery

实例如下: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>MyHtml.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><m