Метаданные Android из манифеста, возвращающего null
У меня есть класс с одним методом, который пытается извлечь метаданные из манифеста. Все работает отлично, за исключением того, что пакет, который я создаю из информации о приложении, возвращает нулевые значения
Здесь код:
private int getCurrentVersion(){
int currVersion = 0;
try {
ApplicationInfo app = context.getPackageManager().getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA);
Bundle bundle = app.metaData;
for (String key: bundle.keySet())
{
Log.d ("TEST", key + " is a key in the bundle");
}
Log.d("TEST","google: "+bundle.getString("com.google.android.gms.version"));
Log.d("TEST","version: "+bundle.getString("dbVersion"));
//currVersion = Integer.valueOf(bundle.getString("dbVersion"));
currVersion = 1;
} catch (NameNotFoundException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
return currVersion;
}
03-05 18:53:23.818: D/TEST(31400): com.google.android.gms.version is a key in the bundle
03-05 18:53:23.818: D/TEST(31400): dbVersion is a key in the bundle
03-05 18:53:23.828: D/TEST(31400): google: null
03-05 18:53:23.828: D/TEST(31400): version: null
Как вы можете видеть, я использую несколько журналов, чтобы увидеть, пуст ли пуст, но его нет.
Ответы
Ответ 1
В некоторых случаях вам нужно использовать метод getInt():
bundle.getInt("com.google.android.gms.version"));
потому что значение этих метаданных определяется как целое число.
Log.d("TEST","google: "+bundle.getInt("com.google.android.gms.version"));
Например, если значение, определенное в ваших метаданных, является строкой:
<meta-data
android:name="com.elenasys.a"
android:value="abcXJ434" />
использование:
bundle.getString("com.elenasys.a"));
если это целое число:
<meta-data
android:name="com.elenasys.b"
android:value="1234" />
использовать getInt()
bundle.getInt("com.elenasys.b"));
Ответ 2
Также убедитесь, что тег находится под узлом манифеста/приложения в AndroidManifest.xml, а не только под корнем:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.readmetadata"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<meta-data android:name="dbVersion" android:value="1.0" />
<activity android:name=".MainMenu" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8" />
</manifest>