android meta-data作用,关于Android Manifest中的<meta-data>

语法

android:name="string"

android:resource="resource specification"

android:value="string" />

是一个键值对,用来为父控件存储多余的数据。一个控件可以包含任意数量的,这些值都存储在单个Bundle对象中,并作为PackageItemInfo.metaData字段提供给父控件。

属性

android:name:该item的唯一名称。为了保证其名字唯一性,可以使用 Java 命名风格

android:resource:对资源的引用。其值为资源的ID,可以通过该Bundle的 Bundle.getIn()方法获取其ID值

android:value:分配给该item的值。更多类型及介绍见官网文档

用法

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

基本用法

最基本的用法增加item用来存储信息,且该信息可以被整个项目所使用。这时,定义在外面,且在内,例如:

android:icon="@drawable/icon"

android:label="@string/app_name">

android:name=".MainActivity"

android:label="@string/app_name">

读取时如下:

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

Bundle bundle = ai.metaData;

String myApiKey = bundle.getString("my_test_metagadata");

其中,可以存储的类型还包括boolean, int, string, float

用于第三方库或APIs

项目中经常需要引用第三方库或使用其API,但对于详细的产品,需要一个KEY来识别,例如:判断不同的使用者或不同的机型,这个KEY必须由开发者定义,并使用相应API,但由于安全性,这个KEY不可能被共享。

通过使用,开发人员可以与使用者共享第三方库或APIs的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 in your AndroidManifest.xml file.");

}

例如,为了能够使用 HockeyApp 的 crash report功能,需要在AndroidManifest中添加如下代码:

这行代码会在加载 net.hockeyapp.android.appIdentifier时使用value值为${HOCKEYAPP_APP_ID}的数据,所以,HockeyApp 可以知道是哪一台设备请求获取crash report功能。

配置Activity

的另一个应用是配置Activity,通过这种方式,可以为当前Acitivity配置数据,项目能够更好的处理Activity。这时,标签在标签内。例如:

android:icon="@drawable/icon"

android:label="@string/app_name">

android:name=".MainActivity"

android:label="@string/app_name">

android:resource="@xml/searchable"/>

从标签内读取数据可以通过如下方式:

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());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值