获取Manifest中标签的值

http://www.krislq.com/2013/06/get_meta-data_in_android_manifest/


在平时我们开发应用的过程中,我们可能需要设置一些动态变量值随着我们版本的变化一起变化 。在这种情况下,一般我们首先想到的办法可能就是我们申明一个静态的变量,然后在我们的应用中直接使用就行了,以后如果需要修改的时候,我们再找到这个类里面的定义的地方,再重新赋值即可。。。

当然,我们也可以通过在Menifest里面的meta-data标签来定义一个值,然后在我们的应用中直接去读取即可,这样,下次如果需要修改值,我们就不必再找到我们的代码了,而是在修改我们的版本号的时候,一起就可以修改了。更加方便与便捷。

这样的应用场景在给多市场打包的时候,你一定见过。比如友盟,有米的sdk里面就有一步为:在 application标签下定义一个meta-data来为不同的市场赋值和传入不同的appId。

那么我们的自己应用里面应该如何去定义meta-data的值呢?并且怎么在代码中取出我们要想的值 呢?

那么点击更多,跟着我一起来看看如何操作吧!!!

形如:

 
 
  1. <application ...>
  2. <meta-data android:value="12345" android:name="APPID"/>
  3. <activity ...>
  4. <meta-data android:name="data_Name" android:value="hello my activity"></meta-data>
  5. </activity>
  6. </application>

从上面可以看出,我们的meta-data不仅仅是可以放到application标签下面,也可以放到activity下面,其实也可以放到service ,receiver下面。。。

我们分别来看看如何获取的吧?

1.获取 application标签中的meta-data:
形如:

 
 
  1. <application...>
  2. <meta-data android:value="my_data" android:name="data_Name"/>
  3. </application>

代码:

 
 
  1. ApplicationInfo appInfo = context.getPackageManager()
  2. .getApplicationInfo(context.getPackageName(),
  3. PackageManager.GET_META_DATA);
  4. String dataName=appInfo.metaData.getString("data_Name");

2.获取 activity标签中的meta-data:
形如:

 
 
  1. <activity ...>
  2. <meta-data android:value="my_activity" android:name="data_Name"/>
  3. </activity>

代码:

 
 
  1. ActivityInfo activityInfo = context.getPackageManager()
  2. . getActivityInfo(activity.getComponentName(),
  3. PackageManager.GET_META_DATA);
  4. String dataName=activityInfo.metaData.getString("data_Name");

注意:activity.getComponentName()为获取activity实例的ComponentName 也可以用下面的代替:

 
 
  1. //通过指定一个activity类来生成一个新的ComponentName
  2. ComponentName componentName =new ComponentName(context, SplashActivity.class);

3.获取 service标签中的meta-data:
形如:

 
 
  1. < service ...>
  2. <meta-data android:value="my_service" android:name="data_Name"/>
  3. </service >

代码:

 
 
  1. ComponentName componentName=new ComponentName(context, MyService.class);
  2. ServiceInfo serviceInfo = context.getPackageManager()
  3. . getServiceInfo(componentName,
  4. PackageManager.GET_META_DATA);
  5. String dataName=serviceInfo.metaData.getString("data_Name");

注意:在Service里面就没有getComponentName()方法来快速获取到当前的ComponentName了,所以只能通过指定service类的方式来生成一个新的ComponentName

4.获取 receiver标签中的meta-data:
形如:

 
 
  1. < receiver ...>
  2. <meta-data android:value="my_receiver" android:name="data_Name"/>
  3. </receiver >

代码:

 
 
  1. ComponentName componentName=new ComponentName(context, MyService.class);
  2. ActivityInfo activityInfo = context.getPackageManager()
  3. . getReceiverInfo(componentName,
  4. PackageManager.GET_META_DATA);
  5. String dataName=activityInfo.metaData.getString("data_Name");

注意:在receiver可没有 ReceiverInfo了,而是用的activityInfo来处理的。

最后的注意:我们在获取值的时候都是使用的是:xxxInfo.metaData.getString(“data_Name”);把所有的值都当成是String来获取的,如果在meta-data中是int型的,如果还是使用getString()方法获取出来的值是为空的,但是metaData提供了这么多种get方法来获取 。
如果metadata 的数据类型是没办法确定的,那么可以直接使用 Object object = metaData.get(key)来获取 ,然后再转化成自己要想的数据类型。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值