我是 android 新手,以前从未见过或听说过元数据。但是我用谷歌搜索它并在 YouTube 上搜索它,它基本上是你的对象的信息。如果我错了,请纠正我。谁能帮助我更好地理解它。
1) 什么是元数据?
2) 为什么在 Android 中使用它?
最好能举例说明为什么在 Android 中使用元数据。我在 list 的 Activity 元数据标签中看到了它们。
最佳答案
在 Android 中,您可以定义 meta-data
您的 AndroidManifest.xml
中的信息
非常基本的用法
它基本上是一个额外的选项来存储可以通过整个项目访问的信息。在这种情况下,<meta-data>
在 <activity>
之外定义标签和内部 <application>
标记。
定义:
<manifest>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<meta-data android:name="my_test_metagadata" android:value="testValue" />
<activity
android:name=".MainActivity"
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>
<manifest>
阅读:
ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
您可以保存 boolean
, 一个 int
, String
或 float 。
对库或 API 很有用
假设您创建了一个可供所有人使用的 API/LIB。但是,对于特定程序,您需要 KEY
那KEY
必须由将使用您的 API 的开发人员定义。
这样,您无法预测开发人员将共享哪个 key 。
使用 <meta-data>
,想要使用您的 API/LIB 的开发人员可以分享 KEY
与你。这样,您的 API 将配置为读取该 KEY 并在用户未定义时引发异常。
try {
ApplicationInfo ai = getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
} catch (Exception e) {
Log.e(TAG, "Dear developer. Don't forget to configure <meta-data android:name=\"my_test_metagadata\" android:value=\"testValue\"/> in your AndroidManifest.xml file.");
}
一个典型的例子是 Google Ads (Admob)。
您必须将以下行添加到您的 AndroidManifest
:
<!--This meta-data tag is required to use Google Play Services. (adMob)-->
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
这将加载 com.google.android.gms.version
用 @integer/google_play_services_version
表示的值.然后,Google Play 服务 (Admob) 可能会读取此元数据,并能够确定您在构建应用时使用的 Google Play 服务版本。
另一个例子
<meta-data>
的另一种用法是何时使用它们来配置 Activity。通过这种方式,您可以将有关您的 Activity 的有值(value)信息传递给 android,然后 Android 可以正确处理您的 Activity 。
在这种情况下,<meta-data>
标签被添加到 <activity>
标记。
我看到的第一个示例是定义搜索 Activity 时。
<manifest>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SearchableActivity" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>
</application>
<manifest>
然后,要从 Activity 标签中获取元数据,请使用以下命令:
try {
ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
if (bundle != null) {
String apiKey = bundle.getString("apikey");
Log.d(this.getClass().getSimpleName(), "apiKey = " + apiKey);
}
}
} catch (PackageManager.NameNotFoundException e) {
Utilities.log(this.getClass().getSimpleName(), "Failed to load meta-data, NameNotFound: " + e.getMessage());
} catch (NullPointerException e) {
Log.e(this.getClass().getSimpleName(), "Failed to load meta-data, NullPointer: " + e.getMessage());
}
关于android - 什么是元数据?以及它在android中的用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687159/