安卓manifest中的meta-data及其应用

这篇具有很好参考价值的文章主要介绍了安卓manifest中的meta-data及其应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在日常的Android开发中,AndroidManifest中总会出现一些< meta-data>标签,或是第三方SDK配置信息,或是系统配置,那么< meta-data>到底是什么?有什么用?怎么用?有哪些应用场景?


一、meta-data简介

< meta-data>

直译为“元数据”,该标签可为< activity>、< activity-alias>、< application>、< provider>、< receiver>、< service>等组件提供附加数据项。
组件元素可以包含任意数量的< meta-data>子元素。系统将meta-data配置的数据存储于一个Bundle对象中,可以通过PackageItemInfo.metaData字段获取。

语法配置

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string" />
  • android:name
    分配给该标签的键,即唯一名称。为确保名称唯一应使用Java风格命名约定,如“ com.example.project.activity.fred”。
  • android:resource
    对资源的引用,如“@string/app_name”。该资源ID可以通过该metaData.getInt()方法获取 。
  • android:value
    分配给该标签的值,如String、Boolean等。

二、meta-data用法

正如前文所说,< meta-data>可用于常见的组件,那么在程序中应该如何配置,并获取这些配置好的外部数据呢?
配置示例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:sharedUserId="android.uid.system">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />


    <uses-permission
        android:name="android.permission.PACKAGE_USAGE_STATS"
        tools:ignore="ProtectedPermissions" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.Light"
        tools:targetApi="31">
        <activity
            android:name="com.android.henrytest.iccpanelActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data
                android:name="meta_act"
                android:resource="@string/app_name" />
        </activity>
        <meta-data
            android:name="meta_app"
            android:value="value from meta_app" />
    </application>

</manifest>

获取配置信息示例:

public class testActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ......
        String meta_app = getMetaDataFromApp();
        int meta_act = getMetaDataIdFromAct();
        Log.d("henry", "meta_app: " + meta_app + " meta_act: " + meta_act);
    }


    //获取value
    private String getMetaDataFromApp() {
        String value = "";
        try {
            ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),
                    PackageManager.GET_META_DATA);
            value = appInfo.metaData.getString("meta_app");
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return value;
    }

    //获取resource id
    private int getMetaDataIdFromAct() {
        int resId = 0;
        try {
            ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(),
                    PackageManager.GET_META_DATA);
            resId = activityInfo.metaData.getInt("meta_act");
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return resId;
    }
}

运行结果:
安卓manifest中的meta-data及其应用,安卓基础知识,android

可以看到,我们在manifest中配置了< meta-data>,并在Activity中获取了这些配置的信息。
点进去看一下源码,metaData到底是什么?如图:本质上就是个Bundle罢了。
安卓manifest中的meta-data及其应用,安卓基础知识,android

三、meta-data应用场景

讲到这里,可能就会有人问了,这个东西什么用啊?我自己程序里用这个配置拿自己的数据,那不是脱裤子放屁?
别急…一开始就说到了< meta-data>这个标签经常是在接入第三方SDK时见到,那么它的应用场景肯定跟SDK开发有关啊!并且在系统属性配置上也有应用,比如配置屏幕支持比例,配置SearchableActivity等等。来看几个示例:
示例一:某分享

< meta-data
android:name="UMENG_APPKEY"
android:value="oooooooooooooxxxxxxxxxxxx" />

示例二:桌面快捷方式

< meta-data
       android:name="android.app.shortcuts"
       android:resource="@xml/shortcuts" />

示例三:18:9屏幕适配

< meta-data
      android:name="android.max_aspect"
      android:value="2.1" />

示例四:某地图

< meta-data
      android:name="com.amap.api.v2.apikey"
      android:value="oooooooooooooxxxxxxxxxxxx" />

我们接入某分享、某地图、其他私有第三方SDK时,一般都要先申请一个账号,用于接入配置。SDK则会在内部代码中读取这些数据,通过这些key标记来源的信息,分辨接入方,进行访问控制、数据统计等。
其实不知不觉之中,开发者接入了这些SDK,App运营中产生的一些数据也就分享给SDK开发商了,包括使用频率、用户画像等等。

我们在开发自己的SDK过程中,也可以使用这种方法控制访问。通过分配账号的方式要求接入方配置相关信息,并在SDK中读取配置好的< meta-data>信息,用于对比鉴权,若无相关匹配账号,则直接抛异常或者返回相关返回码。当然了,账号分配这一步也可以放到后台做,然而并不是所有的SDK接入都需要后台接入,比如分享SDK。

参考链接:

谷歌开发者------元数据文章来源地址https://www.toymoban.com/news/detail-861380.html

到了这里,关于安卓manifest中的meta-data及其应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算中的边缘计算技术及其应用

      随着互联网的发展,数据中心的规模不断扩大,云计算也成为了越来越受欢迎的计算模式。但是,云计算存在着一些问题,比如延迟较高,网络瓶颈,数据隐私和安全性等等。为了解决这些问题,边缘计算应运而生。边缘计算是一种分布式计算模式,它将计算任务从云端移

    2024年02月05日
    浏览(15)
  • Java中的回调函数 (callback) 及其应用

    回调函数在编程中是一种常见的设计模式,它允许一个函数在特定的时刻或条件下调用另一个函数。在Java中,我们可以通过接口和匿名内部类实现回调函数。本文将详细介绍Java中的回调函数,并提供相关代码示例。 回调函数是一种将函数作为参数传递给另一个函数的方法。

    2024年01月24日
    浏览(19)
  • Docker介绍及其在WSL中的应用

    1 什么是Docker? Docker是一种开源的容器化平台,用于构建、交付和运行应用程序。它提供了一种轻量级的容器化技术,可以将应用程序及其依赖项打包成一个独立的可执行单元,称为Docker容器。每个容器都运行在一个隔离的环境中,共享主机操作系统的内核,从而实现了高效、

    2024年02月08日
    浏览(10)
  • 数据分片技术及其在HBase中的应用

    作者:禅与计算机程序设计艺术 HBase是一个开源的分布式NoSQL数据库系统,可以用于海量结构化和半结构化的数据存储。相比于传统的关系型数据库系统,HBase在很多方面都优秀,例如高速读写、高容错性和动态伸缩等,但同时也存在一些不足。比如它的查询延迟较长,因为它

    2024年02月10日
    浏览(16)
  • 深入理解JSON及其在Java中的应用

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏: MySQL学习 🥭本文内容: 深入理解JSON及其在Java中的应用 📚个人知识库: [Leo知识库]https://gaoziman.gitee.io/blogs/),欢

    2024年02月04日
    浏览(12)
  • 云计算中的网络安全技术及其应用

    云计算已经成为当今企业信息化的主要选择之一。它提供了可靠的数据存储和处理能力,同时降低了企业的IT成本。然而,云计算的安全问题也随之而来。网络安全技术的应用对于保护云计算的安全至关重要。本文将探讨云计算中的网络安全技术及其应用,以帮助大家更好地

    2024年02月05日
    浏览(15)
  • 布隆过滤器及其在Java中的实际应用

    布隆过滤器一直是面试中的重点,本篇文章将深入探讨Java中的布隆过滤器的底层思想,包括它的工作原理、优缺点等。同时,我们将结合一个小实际案例,来给大家展示布隆过滤器在解决实际问题中的应用。 在数据处理领域,我们经常需要判断一个元素是否在一个集合中。

    2024年02月05日
    浏览(18)
  • 机器学习以及其在云计算中的应用

    作者:禅与计算机程序设计艺术 ​ 随着科技的飞速发展,计算机技术已经渗透到我们的生活中。机器学习、深度学习、大数据分析等技术的发展让计算机“能懂”“能做”“能看”,这些技术的出现使得人们可以用机器的方式进行各种高级活动。而云计算也经历了几十年的

    2024年02月08日
    浏览(16)
  • 常见的 HTML<meta> 标签的 name 属性及其作用

    HTML中的 meta 标签可以通过 name 属性提供元数据,这些元数据可以用于指定有关文档的信息,以及控制浏览器和搜索引擎的行为。 name 属性通常与其他属性一起使用,如 content 、 charset 、 http-equiv 等,以提供更具体的元数据信息。 以下是一些常见的 meta 标签的 name 属性及其作

    2024年02月11日
    浏览(11)
  • 探究弹性伸缩技术在云计算中的应用及其挑战

    随着云计算技术的不断发展,人们对于云计算的认识和理解也在不断深入。作为云计算核心技术之一,弹性伸缩是云计算中一个重要的概念。它是指根据需求对云计算资源进行自动化的增加或减少,以实现资源的最佳利用和效率。弹性伸缩是云计算中实现高度可用性、可扩展

    2024年02月08日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包