2011-09-21 14 views
6

que necesito para recuperar un valor del archivo AndroidManifest.xml, almacenada como metadatos:consigo ActivityInfo metadatos en el método onCreate

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

En el método onCreate, que llamo el método siguiente:

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

Pero el metaData siempre es nulo. ¿Es imposible acceder al metaData en el método onCreate? es decir, la actividad aún no se ha inicializado por completo.

Respuesta

22

Deberá utilizar los indicadores GET_ACTIVITIES y GET_META_DATA.

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

Gracias, esto ayudó. Tiene un error tipográfico, debe ser: ActivityInfo app = getPackageManager(). GetActivityInfo (this.getComponentName(), PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA); – ajh158

1

Si usted está interesado, android-metadata es un marco que hace que sea más fácil acceder a los metadatos del manifiesto de Android. La forma en que se obtendría usando los metadatos anterior android-metadata es:

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

La revelación completa: Soy el creador del androide-metadatos.

+0

¿Se ha fusionado en androidannotations (https://github.com/excilys/androidannotations) framework? – mrroboaat

0

He intentado con la respuesta de jasonj pero no funciona. Para recuperar los metadatos del archivo de manifiesto, debo obtener el siguiente código

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

getApplicationInfo se usa para obtener metadatos del elemento . Para obtener los metadatos del elemento , debe usar getActivityInfo como se describe –

Cuestiones relacionadas