получить метаданные activityInfo в методе onCreate - PullRequest
8 голосов
/ 21 сентября 2011

Мне нужно получить значение из файла 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? т.е. действие еще не полностью инициализировано.

Ответы [ 3 ]

24 голосов
/ 10 ноября 2011

Вам нужно будет использовать флаги GET_ACTIVITIES и GET_META_DATA.

ActivityInfo ai = getPackageManager()
        .getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
1 голос
/ 01 августа 2014

Я попробовал ответ Джейсона, но он не работает.Чтобы получить метаданные из файла манифеста, я должен получить следующий код

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 
1 голос
/ 12 марта 2014

Если вам интересно, android-metadata - это инфраструктура, облегчающая получение метаданных из манифеста Android. Вы можете получить метаданные выше, используя android-метаданные :

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

Полное раскрытие: я создатель андроид-метаданных.

...