2011-09-21 9 views
6

Ho bisogno di recuperare un valore dal file AndroidManifest.xml, memorizzato come meta dati:ottenere activityInfo metadati nel metodo onCreate

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

Nel metodo onCreate, che io chiamo il seguente metodo:

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

Ma lo metaData è sempre nullo. È impossibile accedere allo metaData nel metodo onCreate? Ad esempio, l'attività non è stata ancora completamente inizializzata.

risposta

22

È necessario utilizzare le bandiere GET_ACTIVITIES e GET_META_DATA.

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

Grazie, questo ha aiutato. Dovresti avere un errore di battitura: ActivityInfo app = getPackageManager(). GetActivityInfo (this.getComponentName(), PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA); – ajh158

1

Se siete interessati, android-metadata è un framework che rende più facile per ottenere i metadati dal manifest di Android. Il modo in cui si dovrebbe ottenere i metadati sopra utilizzando android-metadata è:

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

Full disclosure: io sono il creatore di Android-metadati.

+0

È unificato nel framework androidannotations (https://github.com/excilys/androidannotations)? – mrroboaat

0

Ho provato la risposta di jasonj ma non funziona. Per recuperare i meta-dati dal file manifest, devo ottenere il seguente codice

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

getApplicationInfo viene utilizzato per ottenere i metadati dall'elemento . Per ottenere i metadati dall'elemento devi usare getActivityInfo come descritto –

Problemi correlati