【问题标题】:get activityInfo metaData in onCreate method在 onCreate 方法中获取 activityInfo 元数据
【发布时间】:2021-08-13 16:08:38
【问题描述】:

我需要从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 始终为空。 onCreate方法中是不是不能访问metaData?即活动尚未完全初始化。

【问题讨论】:

    标签: android metadata android-manifest oncreate


    【解决方案1】:

    您需要使用标志GET_ACTIVITIESGET_META_DATA

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

    【讨论】:

    • 谢谢,这有帮助。你有一个错字,应该是:ActivityInfo app = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_ACTIVITIES|PackageManager.GET_META_DATA);
    【解决方案2】:

    如果您有兴趣,android-metadata 是一个框架,可以更轻松地从 Android 清单中获取元数据。使用android-metadata 获取上述元数据的方式是:

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

    完全披露:我是 android-metadata 的创建者。

    【讨论】:

    【解决方案3】:

    我试过 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 
    

    【讨论】:

    • getApplicationInfo 用于从 元素中获取元数据。要从 元素中获取元数据,您必须按照描述使用 getActivityInfo
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多