我需要从AndroidManifest.xml
文件中检索一个值,存储为元数据:
<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
始终为空。是否无法访问metaData
方法中的onCreate
?即活动尚未完全初始化。
答案 0 :(得分:23)
您需要使用标记GET_ACTIVITIES
和GET_META_DATA
。
ActivityInfo ai = getPackageManager()
.getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
答案 1 :(得分:1)
如果您有兴趣,android-metadata是一个框架,可以更轻松地从Android清单中获取元数据。使用android-metadata获取上述元数据的方式是:
int val = ManifestMetadata.get (context).getValue ("myInterestingValue", Integer.class);
完全披露:我是android-metadata的创建者。
答案 2 :(得分:1)
我已经尝试过jasonj的答案,但它没有用。要从清单文件中检索元数据,我必须得到以下代码
ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
或Kotlin版本:
val ai = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
val bundel = ai?.metaData