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

Fai*_*med 47 android metadata android-manifest android-activity

我是android新手,我之前没有看到或听说过元数据.然而,我谷歌并在YouTube上搜索它,它基本上是你的对象的信息.如果我错了,请纠正我.任何人都可以帮助我以更好的方式理解它.

1)什么是元数据?

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

如果解释为什么在Android中使用元数据的示例将会很好.我在manifest的活动元数据标签中看到过它们.

W0r*_*0le 79

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

这里是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>
Run Code Online (Sandbox Code Playgroud)

读:

ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myApiKey = bundle.getString("my_test_metagadata");
Run Code Online (Sandbox Code Playgroud)

您可以保存一个boolean,一个int,String或浮动.

它对库或API很有用

假设您创建了一个可供所有人使用的API/LIB.然而,对于一个特定的程序,你需要KEYKEY必须由谁将会使用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.");
}
Run Code Online (Sandbox Code Playgroud)

一个典型的例子是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" />
Run Code Online (Sandbox Code Playgroud)

这将加载com.google.android.gms.version由表示的值@integer/google_play_services_version.然后,Google Play服务(Admob)可能会阅读此元数据,并且可以确定您在构建应用时使用的Google Play服务版本.

另一个例子

另一种用法<meta-data>是何时使用它们来配置Activity.通过这种方式,您可以将有价值的信息传递到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>
Run Code Online (Sandbox Code Playgroud)

然后,要从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());
    }
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我们也可以在字符串资源中声明密钥,然后在元数据中有什么特别之处?正如您在上面提到的意思`&lt;元数据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;`,那么“元数据”有何特殊之处? (2认同)

Fre*_*ott 5

让我举一个简单的例子.它有助于查找其他信息 - 是元数据的基本解释.

317-745-4618

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

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