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

2024-01-02

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

1)什么是元数据?

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

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


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

这是码头链接 https://developer.android.com/guide/topics/manifest/meta-data-element.html

非常基本的用法

它基本上是存储可通过整个项目访问的信息的附加选项。在这种情况下,<meta-data>定义在外部<activity>标签和里面<application> tag.

定义:

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

Reading:

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

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

它对于库或 API 很有用

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

Using <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 Services (Admob) 可能会读取此内容metadata并且它将能够确定您在构建应用程序时使用的 Google Play 服务版本。

另一个例子

另一种用法是<meta-data>是时候使用它们来配置活动。通过这种方式,您可以将有关您的活动的有价值的信息传递给 Android,然后 Android 可以正确处理您的活动。 在这种情况下,<meta-data>标签被添加到里面<activity> tag.

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

<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());
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是元数据?它在android中有什么用 的相关文章

随机推荐

  • jMeter Cookie Manager 不存储所有 cookie

    在阅读了互联网上的文档和帖子后 我仍然无法解决 jMeter 中 Cookie Manager 的问题 我在响应标头中获得了 sid ID 但它没有存储在我的 cookie 管理器中 以下是我的测试计划和 connect sid 响应的屏幕
  • mySQL select count,多个表

    我有三张桌子 table1 table2 table3 我试图获取每个表中的总行数以及价格列的总和 例如 r count total rows of all 3 tables combined r price sum of all pric
  • 在 Roslyn 的 .net core 中动态选择引用

    TL DR 如何让运行时在 NET Core 5 中为运行时编译的涉及 NET 4 7 2 代码的 C 插件选择正确的程序集 Context 我有一个 NET 4 7 2 应用程序 其中某些模块根据某些可配置插件的行为有所不同 我在 NET
  • 获取包含 10 种以上语言的所有维基数据项目?

    我正在尝试使用 SPARQL 从 Wikidata 获取世界上最著名的电影 我有以下查询 SELECT item WHERE item wdt P31 wd Q11424 SERVICE wikibase label bd serviceP
  • 在 scikit-learn 中使用相似矩阵代替 MDS 的相异矩阵

    我想可视化文本文档的相似性 我使用 scikit learn 的 TfidfVectorizer 作为tfidf TfidfVectorizer decode error ignore max df 3 fit transform data
  • 如何将委托作为参数传递以作为事件处理程序进行订阅?

    我有一个提供事件的外部应用程序StkQuit 我在一个静态类中订阅此事件 该类处理我的应用程序和外部应用程序之间的所有通信 我想订阅StkQuit使用位于我的表单类上的另一个处理程序的事件 该处理程序将通知用户外部应用程序已关闭 我想在静态
  • golang 生成的 WebAssembly 上的 Websocket?

    是否可以在 wasm 中而不是 go 中编写 Websocket 客户端 我尝试过使用gorilla websocket 但没有成功 func main ws func this js Value inputs js Value inter
  • SQOOP增量导入:当从数据库中删除一行时,它如何处理数据?

    假设我有一个包含列 emp id emp name emp age emp update ts 的员工表 如果表上有更新 则 updat ts 字段每次都会自动更新为当前时间戳 现在我的问题是 当我更新 插入表中的行并使用lastmodif
  • NSSplitViewController 导致包含的视图绘制在窗口角上

    I m trying to create a little Finder clone using Cocoa I m placing a source list table view to act as a sidebar and a st
  • 如何使用 Tensorboard 在同一图上绘制不同的汇总指标?

    我希望能够绘制每批次训练损失和average验证损失用于 Tensorboard 中同一图上的验证集 当我的验证集太大而无法放入内存时 我遇到了这个问题 因此需要批处理并使用tf metrics更新操作 这个问题可能适用于您想要显示在 Te
  • UIPageViewController 内的 UISlider

    我有一个 PageViewController 其初始化如下 self pageViewController UIPageViewController alloc initWithTransitionStyle UIPageViewCont
  • 设置独立的 cygwin 应用程序

    我想设置一组最小的 cygwin 应用程序 ls diff path find grep 以便它们在没有完整 cygwin 安装的计算机上运行 我假设我需要的只是相关的 exe 文件和 dll 到目前为止 这就是我所拥有的 到目前为止它有效
  • 井字游戏评价棋盘算法

    我已经用人工智能实现了井字棋 但现在面临一个问题 如何评价井字棋游戏的棋盘 也许一开始我会描述它应该如何工作 我们有 n 个井字棋游戏板 有不同的变体 我们的人工智能应该评估哪个棋盘最适合继续前进 最适合对手 Ai 通过极小极大算法计算移动
  • data.table 通过带空格的列名进行操作失败

    可重现的例子 Use the Iris data set library data table iris colnames iris 3 lt Petal Length iris lt as data table iris 访问没有空格的列
  • 如何调整/更改滚动条宽度

    有没有办法暂时改变滚动条宽度当我测试一些布局代码时 在 FF 或 IE 中 我记得不久前读过一些关于这与分辨率有关的内容 但不太记得了 我尝试更改计算机本身的分辨率 尝试增加浏览器字体大小 但都不起作用 Update我遇到过描述了如何在 F
  • 有没有办法在 PHP 中将 json 转换为 xml?

    有什么办法可以转换吗json to xml in PHP 我知道xml到json是很有可能的 如果您愿意使用XML序列化器 http pear php net package XML Serializer从 PEAR 中 您可以通过两个简单
  • 有没有办法包含来自不同目录的子 Rmd 文件

    我有一个主降价文件 例如 Parent Rmd 以及许多子文档 其中包含 r child introduction Rmd echo FALSE r child chapter2 Rmd echo FALSE 看来我应该能够做到 r chi
  • 样式表单错误消息 - bootstrap/rails

    我的 Rails 表单的错误消息在引导程序中看起来很糟糕 有谁知道更好 好看 错误消息的解决方案 我使用 Rails 和 Bootstrap 我的表格 它是一个助手 是这样的 div h2 prohibited this user from
  • 按钮.Visible = true;在功能内激活时无法将按钮设置为可见

    我找不到其他人遇到同样的问题 所以希望有人能有一些想法或能够向我指出另一个答案 当通过按下表单上的按钮来运行函数时 另一个按钮应该变得可见 然而 即使按钮是函数中的第一个按钮 它也永远不会显示 该函数中的所有其他代码都可以完美运行 这是代码
  • 什么是元数据?它在android中有什么用

    我是 Android 新手 之前没有见过或听说过元数据 然而我用谷歌搜索并在 YouTube 上搜索它 它基本上是你的对象的信息 如果我错了请纠正我 任何人都可以帮助我以更好的方式理解它 1 什么是元数据 2 为什么在Android中使用它