Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

get activityInfo metaData in onCreate method

I need to retrieve a value from the AndroidManifest.xml file, stored as a meta data:

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

In the onCreate method, I call the following method:

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

But the metaData is always null. Is it impossible to access the metaData in the onCreate method? i.e. The activity has not been fully initialized yet.

like image 291
Julien Avatar asked Sep 21 '11 13:09

Julien


3 Answers

You will need to use the flags GET_ACTIVITIES and GET_META_DATA.

ActivityInfo ai = getPackageManager()
        .getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
like image 174
jasonj Avatar answered Nov 09 '22 02:11

jasonj


If you are interested, android-metadata is a framework that makes it easier to get metadata from the Android manifest. The way you would get the meta-data above using android-metadata is:

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

Full disclosure: I'm the creator of android-metadata.

like image 23
James H. Hill Avatar answered Nov 09 '22 02:11

James H. Hill


I've tried jasonj's answer but it doesn't work. To retrieve meta-data from manifest file, I must get the following code

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

OR the Kotlin version:

val ai = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
val bundel = ai?.metaData 
like image 20
mrroboaat Avatar answered Nov 09 '22 00:11

mrroboaat