android - 什么是元数据?以及它在android中的用途是什么

标签 android android-activity android-manifest metadata

我是 android 新手,以前从未见过或听说过元数据。但是我用谷歌搜索它并在 YouTube 上搜索它,它基本上是你的对象的信息。如果我错了,请纠正我。谁能帮助我更好地理解它。

1) 什么是元数据?

2) 为什么在 Android 中使用它?

最好能举例说明为什么在 Android 中使用元数据。我在 list 的 Activity 元数据标签中看到了它们。

最佳答案

在 Android 中,您可以定义 meta-data您的 AndroidManifest.xml 中的信息

HERE IS THE DOCK LINK

非常基本的用法

它基本上是一个额外的选项来存储可以通过整个项目访问的信息。在这种情况下,<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。但是,对于特定程序,您需要 KEYKEY必须由将使用您的 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/

相关文章:

android - Facebook Messenger 如何绘制聊天头? (安卓)

android - 返回到特定 Activity

java - Android - Activity 构造函数与 onCreate

android - 我的所有 android studio 项目和所有新项目都会给我带来来自调试 android list 文件的错误

xml - 使用PowerShell脚本从Android list XML文件中删除权限

Android,如何围绕固定点旋转箭头(图像)?

android - react native |向文本上下文菜单添加选项

java - 报错java.lang.runtimeexception view is not a sliding drawer

android - 外部库和 Android list

android - svg 和 png img 之间有什么区别吗?