问题
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.
回答1:
You will need to use the flags GET_ACTIVITIES
and GET_META_DATA
.
ActivityInfo ai = getPackageManager()
.getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
回答2:
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.
回答3:
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
来源:https://stackoverflow.com/questions/7500227/get-activityinfo-metadata-in-oncreate-method