Android 之 Metadata简析

在AndroidMainfest.xml中:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android=“http://schemas.android.com/apk/res/android”

package=“me.fwl.metadatademo”>

<application

android:allowBackup=“true”

android:icon=“@mipmap/ic_launcher”

android:label=“@string/app_name”

android:supportsRtl=“true”

android:theme=“@style/AppTheme”>

在mainActivity中:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private TextView result;

private Context mContext;

private ComponentName cn;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext = this;

cn = this.getComponentName();

result = (TextView) findViewById(R.id.result);

findViewById(R.id.app).setOnClickListener(this);

findViewById(R.id.act).setOnClickListener(this);

findViewById(R.id.rec).setOnClickListener(this);

findViewById(R.id.ser).setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.app:

try {

ApplicationInfo appInfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), PackageManager.GET_META_DATA);

String appMV = appInfo.metaData.getString(“applicationMetadataKey”);

result.setText(appMV);

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

break;

case R.id.act:

try {

ActivityInfo actInfo = mContext.getPackageManager().getActivityInfo(cn, PackageManager.GET_META_DATA);

String actMV = actInfo.metaData.getString(“activityMetadataKey”);

result.setText(actMV);

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

break;

case R.id.rec:

ComponentName recCn = new ComponentName(mContext, MainReceiver.class);

try {

ActivityInfo recInfo = mContext.getPackageManager().getReceiverInfo(recCn, PackageManager.GET_META_DATA);

String recMV = recInfo.metaData.getString(“receiverMetadataKey”);

result.setText(recMV);

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

break;

case R.id.ser:

ComponentName serCn = new ComponentName(mContext, MainService.class);

try {

ServiceInfo serInfo = mContext.getPackageManager().getServiceInfo(serCn, PackageManager.GET_META_DATA);

String serMV = serInfo.metaData.getString(“serviceMetadataKey”);

result.setText(serMV);

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

break;

}

}

}

运行结果:

05-22 21:21:04.624 14238-14238/com.fedming.notches D/fdm: meta_app : value from meta_app

05-22 21:21:04.625 14238-14238/com.fedming.notches D/fdm: meta_act_id : 2131427357, meta_act_string : Notche

可以看到,我们在manifest中配置了,并在Activity中获取了这些配置的信息。

我们点进去看一下源码,metaData到底是什么?本质上就是个Bundle。

在这里插入图片描述

实际应用

在系统属性配置、配置屏幕支持比例,配置SearchableActivity等方面都有运用。

分享时:

<meta-data

android:name=“UMENG_APPKEY”

android:value=“000011111” />

配置桌面快捷方式时:

<meta-data

android:name=“android.app.shortcuts”

android:resource=“@xml/shortcuts” />

屏幕适配时:

<meta-data

android:name=“android.max_aspect”

android:value=“2.1” />

配置地图API时:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值