我是Android的新手,之前我还没有看到或听说过元数据。然而,我谷歌并在YouTube上搜索它,它基本上是你的对象的信息。如果我错了,请纠正我。任何人都可以帮助我以更好的方式理解它。
1)什么是元数据?
2)为什么在Android中使用它?
如果解释为什么在Android中使用元数据的示例将会很好。我在manifest的活动元数据标签中看到过它们。
答案 0 :(得分:67)
在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
或浮动。
它对图书馆或API非常有用
我们假设您创建了一个可供所有人使用的API / LIB。但是,对于特定的过程,您需要KEY
,KEY
必须由将使用您的API的开发人员定义。
这样,您就无法预测开发人员将共享哪个密钥。
使用<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>
的另一种用法是何时使用它们来配置活动。通过这种方式,您可以将有价值的信息传递到Android有关您的活动,然后Android可以正确处理您的活动。
在这种情况下,<meta-data>
标记内添加了<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());
}
答案 1 :(得分:5)
让我举一个简单的例子。它有助于查找其他信息 - 是元数据的基本解释。
317-745-4618
如果我添加的元数据是您所知道的电话号码,或者可以从中找出地理区域。如果我没有说明它的电话号码比你没有足够的元数据来知道这是什么对象。它可能是美国的SSN,也可能是其他东西。
它在Android中用于向清单添加对象,例如,如果使用Google服务,则会添加它以指定应用绑定的Google服务版本。
答案 2 :(得分:3)
元数据是描述其他数据的数据,以通知其他应用程序如何使用数据本身。
Android用法:
Intent就是很好的例子 - 如果你想在意图中传递数据,它必须是原始的,因为Android只有关于那些对象的预构建元数据。 (字符串和整数具有不同的二进制结构,系统知道如何使用)。
意图还允许您通过Parcel类(您手动构建自己的名为marshalling的元数据的过程)为自定义对象构建自己的元数据