2011-09-21 60 views
6

得到activityInfo元数据,我需要检索来自AndroidManifest.xml文件中的值,存储作为元数据:在onCreate方法

<meta-data android:value="3" android:name="myInterestingValue" /> 

onCreate方法,我称之为下面的方法:

private Object getMetaData(String name) { 
    try { 
     ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA); 
     Bundle metaData = ai.metaData; 
     if(metaData == null) { 
      debug("metaData is null. Unable to get meta data for " + name); 
     } 
     else { 
      Object value = (Object)metaData.get(name); 
      return value; 
     } 
    } catch (NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

metaData始终为空。 onCreate方法中无法访问metaData?即该活动尚未完全初始化。

回答

22

您将需要使用标志GET_ACTIVITIESGET_META_DATA

ActivityInfo ai = getPackageManager() 
     .getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA); 
+1

谢谢,这有帮助。你有一个错字,应该是:ActivityInfo app = getPackageManager()。getActivityInfo(this.getComponentName(),PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA); – ajh158

1

如果你有兴趣,android-metadata是一个框架,可以更容易地从Android清单获取元数据。你会得到上面使用android-metadata元数据的方式是:

int val = ManifestMetadata.get (context).getValue ("myInterestingValue", Integer.class); 

全面披露:我是Android的元数据的创造者。

+0

它是在androidannotations(https://github.com/excilys/androidannotations)框架中合并? – mrroboaat

0

我试过jasonj的答案,但它不起作用。要从清单文件检索元数据,我必须得到以下代码

ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); 
Bundle bundle = ai.metaData; 
+0

getApplicationInfo用于从元素中获取元数据。要从元素获取元数据,您必须按照描述使用getActivityInfo –