安卓app/framework开发中meta-data数据剖析作用及实战

背景:

在做安卓app开发时候,特别是经常接入人家某些公司sdk时候经常会要求在AndroidManifest.xml中使用到一个标签meta-data,
相信大家如果不是之前没有深入接触过meta-data相关知识时候可能还是会比较陌生。
那么本文就来带大家学习一下meta-data真实作用和相关实战。

官方解释:

参考链接:
https://developer.android.com/guide/topics/manifest/meta-data-element

https://developer.android.google.cn/guide/topics/manifest/meta-data-element?hl=zh-cn
在这里插入图片描述
辅助解释

meta-data一般在AndroidManifest使用语法:

<meta-data android:name="string"
           android:resource="resource specification"
           android:value="string" />

这个meta-data标签可以包含在下面几个标签

<activity>
<activity-alias>
<application>
<provider>
<receiver>
<service> 

meta-data的作用说明:
meta-data(元数据),主要用来定义一些组件相关的额外附加配置键值。AndroidManifests.xml下的meta-data是对外界开放的,是向系统注册的信息,系统及外界是可以通过相关API获取到meta-data的信息。因为AndroidManifest.xml组件相关的标签都是固定,不允许额外添加针对这个组件相关的标签和数据,所以这个时候如果有想要针对某一组件设置额外的数据,那么就需要使用到meta-data标签数据。

相关案例:
屏幕适配

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

设置桌面快捷方式:

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

还有接入一些地图sdk情况

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

那么接下来实战展示一下使用meta-data

实战开发使用meta-data

第1步:
AndroidManifest中定义相关meta-data

在这里插入图片描述

第2步:
程序中读取Manifest中配置meta-data


    String getActivityMetaData() {
        String value ="";
        try {
            ActivityInfo info = getPackageManager().getActivityInfo(this.getComponentName(),PackageManager.GET_META_DATA);
            value = info.metaData.getString("com.test.anrdemo");
        }catch (Exception e) {
            e.printStackTrace();
        }
        return value;
    }

    String getApplicationMetaData() {
        String value ="";
        try {
            ApplicationInfo info = getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
            value = info.metaData.getString("com.test.anrdemo");
        }catch (Exception e) {
            e.printStackTrace();
        }
        return value;
    }

然后通过TextView进行展示

otherDisplayWindow.setText(" activity meta value = " +getActivityMetaData() + 
" \n application meta value = "+getApplicationMetaData());

运行结果:
在这里插入图片描述

这里只展示出来了自己应用获取自己配置的meta-data,其实还有更多场景是system_server也可以使用和读取
系统端获取meta-data情况:
获取meta-data代码修改:
frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
中的startActivityUnchecked加入如下代码

        ActivityInfo activityInfo = mService.getPackageManagerInternalLocked().getActivityInfo(r.mActivityComponent,PackageManager.GET_META_DATA,0,0);
        android.util.Log.i("lsm88888888","getActivityInfo "+activityInfo + " meta-data "+activityInfo.metaData);

结果打印如下:
在这里插入图片描述

总结:

meta-data其实无论在普通app开发还是系统开发过程中都是非常重要的,可以在app的AndroidManifest中配置相关的自定义数据,然后在代码中可以获取到AndroidManifest配置的meta-data数据,不仅仅app进程自己可以获取到这个数据,其他进程也可以获取到这个meta-data数据,这样对于系统识别一些Activity特性时候就提供了重要的依据。

文章参考来源:https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw
更多framework相关技术干货,请关注下面“千里马学框架”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值