2011-09-21 78 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 –