微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用meta-data配置参数

转自:http://www.voidcn.com/article/p-qpyivlfn-nh.html


故事是这样的,那天我看一个第三方平台提供的demo,发现manifest里面有几个Meta-data标签,不知道什么意思。虽然大致猜到了是用来配置参数常量的,但还是想探个究竟。它是这么写的<!-- 配置的第三方参数属性 -->

<Meta-data android:name="appid" android:value="b03c5cfef65ed30108f0a3fd82c3f6b4" />
<Meta-data android:name="appsecret" android:value="LWLPg7pU4cwrcyy8PwDeGuaY0BHUoX" />

<Meta-data android:name="appkey" android:value="110000" />

这三个标签是写在application下面的。后来我又搜了一下,Meta-data还可以出现在activity,receiver,service标签中。包括上面的application中。一共有四个地方可以使用到。

一,在activity中

xml中配置如下

[html]  view plain copy
  1. <!-- Activity -->  
  2.         <activity android:name=".MyActivity" android:label="@string/app_name">  
  3.             intent-filter>  
  4.                 action android:name="android.intent.action.MAIN" />  
  5.                 category android:name="android.intent.category.LAUNCHER" />  
  6.             </Meta-data android:name="activity_name" android:value="activity_value" activity>  
java代码如下

copy

    ActivityInfo actInfo = mContext.getPackageManager().getActivityInfo(  
  1.                     getComponentName(), PackageManager.GET_Meta_DATA);  
  2.             String msg = actInfo.MetaData.getString("activity_name");  


二,在service中

copy

    <!-- 服务 -->  
  1. service android:name=".MyService"Meta-data android:name="service_name" android:value="service_value" servicecopy
    ComponentName cn = new ComponentName(this, MyService.class);  
  1.         try {  
  2.             ServiceInfo serInfo = this.getPackageManager().getServiceInfo(cn,  
  3.                     PackageManager.GET_Meta_DATA);  
  4.         } catch (NameNotFoundException e) {  
  5.             e.printstacktrace();  
  6.         }  
  7.         String msg = serInfo.MetaData.getString("service_name");  

三,在application中 copy
    <!-- app -->  
  1. Meta-data android:name="application_name" android:value="application_value" />  
copy
    ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(  
  1.                     getPackageName(),108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important">             String msg = appInfo.MetaData.getString("application_name");  

四,在receiver中,也就是广播接收者(拨打电话的时候会看到toast消息)

xml中配置如下

copy
    receiver android:name=".MyReceiver"Meta-data android:name="receiver_name" android:value="receiver_value" action android:name="android.intent.action.PHONE_STATE" receivercopy
      if (TextUtils.equals("android.intent.action.PHONE_STATE", intent  
    1.                 .getAction())) {  
    2.             ComponentName cn = new ComponentName(context, MyReceiver.class);  
    3.             try {  
    4.                 ActivityInfo info = context.getPackageManager().getReceiverInfo(cn,248)">                         PackageManager.GET_Meta_DATA);  
    5.             } catch (NameNotFoundException e) {  
    6.                 e.printstacktrace();  
    7.             }  
    8.             String msg = info.MetaData.getString("receiver_name");  
    9.             // 打电话测试即可  
    10.             Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();  
    11.         }  

    这个数据配置为什么要这么写,我还没发现它的好,以后慢慢领悟再来续写。我觉得大可以写一个ConstData类来存放id,key之类的参数。

    下载demo:http://download.csdn.net/detail/r8hzgemq/4815141

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。