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

Posted

技术标签:

【中文标题】什么是元数据?以及它在android中的用途是什么【英文标题】:What is metadata ? And what is the use of it in android 【发布时间】:2016-12-05 20:15:19 【问题描述】:

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

1) 什么是元数据?

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

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

【问题讨论】:

它们仅用于将数据存储在可以从父组件调用的键值对中。这么多知识就够了,探索没有尽头。 【参考方案1】:

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

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");

您可以保存booleanintString 或浮点数。

对库或 API 很有用

假设您创建了一个可供所有人使用的 API/LIB。但是,对于特定过程,您需要 KEY 并且 KEY 必须由将使用您的 API 的开发人员定义。 这样,您无法预测开发人员将共享哪个密钥。

使用&lt;meta-data&gt;,想要使用您的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 服务版本。

另一个例子

&lt;meta-data&gt; 的另一个用途是何时使用它们来配置 Activity。通过这种方式,您可以将有关您的活动的有价值信息传递给 android,然后 Android 可以正确处理您的活动。 在这种情况下,&lt;meta-data&gt; 标记被添加到 &lt;activity&gt; 标记内。

我看到的第一个示例是定义搜索活动时。

<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>

然后,要从活动标签中获取元数据,请使用以下命令:

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());
    

【讨论】:

您好,我们还可以在string 资源中声明密钥,那么meta-data 有什么特别之处?意思就像你上面提到的&lt;meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /&gt; 我可以使用字符串资源&lt;string name="com.google.android.gms.version"&gt;3.4&lt;/string&gt; 声明相同,那么meta-data 有什么特别之处? @AsifMushtaq 想象一下,您曾经编写过一个 Android 库,许多开发人员都会使用它。您的图书馆需要一些密钥来处理数据。在这种情况下,使用您的库的开发人员只需将这些键添加到应用清单中作为元数据。您的库将使用该键希望它有意义 此外,元数据可以被其他应用程序读取,只需包名。 可以以编程方式启用/禁用meta-data 标记吗?例如,一个实现WebView 的网络浏览器应用程序为用户提供opt-in/out of Google metrics collection 的能力。 @W0rmH0le,我们可以动态应用元数据吗(不在 Manifest 中声明)?【参考方案2】:

让我举一个简单的例子。它有助于查找附加信息——是元数据的基本解释。

317-745-4618

如果我添加元数据,它是一个电话号码,而不是你知道的或者可以从中找出地理区域。如果我没有说明它是电话号码,那么您没有足够的元数据来知道这是什么对象。它可能是美国 SSN,也可能是其他东西。

它在 Android 中用于将对象添加到清单中,例如,如果使用 Google 服务,则会添加它以指定应用绑定到的 Google 服务版本。

【讨论】:

【参考方案3】:

元数据是描述其他数据以告知其他应用程序如何使用数据本身的数据。

Android 使用情况: Intent 就是一个很好的例子——如果你想在 Intent 中传递数据,它必须是原始的,因为 Android 只有关于这些对象的预构建元数据。 (字符串和整数具有不同的二进制结构,系统知道如何使用)。

Intents 还允许您通过 Parcel 类为自定义对象构建自己的元数据(这个手动构建您自己的元数据的过程称为 marshalling)

【讨论】:

以上是关于什么是元数据?以及它在android中的用途是什么的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight - 为啥在 worklight.js 中使用 sql 查询以及它在应用程序中的用途

什么是亚克力板材塑料,它有什么特性和用途?

MySQL metadata lock

什么是元数据 (MetaData)

什么是支持向量机(SVM)以及它的用途?

JAVA的主要用途是哪个方面