zoukankan      html  css  js  c++  java
  • 用meta-data配置参数

    在接入第三方渠道SDK的时候,经常会看到其配置文件AndroidManifest.xml有类似如下的定义:
    1. <!-- appid -->  
    2.        <meta-data  
    3.            android:name="APP_ID"  
    4.            android:value="037810BCE1D2260F32017643AC7D980C" />  
    5.   
    6.        <!-- 发布渠道(可选) -->  
    7.        <meta-data  
    8.            android:name="APP_CHANNEL"  
    9.            android:value="QQ_CENTER" />  

    标签<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 plaincopy
     
    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.             </intent-filter>  
    7.             <meta-data android:name="activity_name" android:value="activity_value" />  
    8.         </activity>  

    java代码如下

    [html] view plaincopy
     
    1. ActivityInfo actInfo = mContext.getPackageManager().getActivityInfo(  
    2.                     getComponentName(), PackageManager.GET_META_DATA);  
    3.             String msg = actInfo.metaData.getString("activity_name");  

    二,在service中

    xml中配置如下

    [html] view plaincopy
     
    1. <!-- 服务 -->  
    2.         <service android:name=".MyService">  
    3.             <meta-data android:name="service_name" android:value="service_value" />  
    4.         </service>  

    java代码如下

    [html] view plaincopy
     
    1. ComponentName cn = new ComponentName(this, MyService.class);  
    2.         try {  
    3.             ServiceInfo serInfo = this.getPackageManager().getServiceInfo(cn,  
    4.                     PackageManager.GET_META_DATA);  
    5.         } catch (NameNotFoundException e) {  
    6.             e.printStackTrace();  
    7.         }  
    8.         String msg = serInfo.metaData.getString("service_name");  


    三,在application中

    xml中配置如下

    [html] view plaincopy
     
    1. <!-- app -->  
    2.         <meta-data android:name="application_name" android:value="application_value" />  

    java代码如下

    [html] view plaincopy
     
    1. ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(  
    2.                     getPackageName(), PackageManager.GET_META_DATA);  
    3.             String msg = appInfo.metaData.getString("application_name");  


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

    [html] view plaincopy
     
    1. <receiver android:name=".MyReceiver">  
    2.             <meta-data android:name="receiver_name" android:value="receiver_value" />  
    3.             <intent-filter>  
    4.                 <action android:name="android.intent.action.PHONE_STATE" />  
    5.             </intent-filter>  
    6.         </receiver>  

    java代码如下

    [html] view plaincopy
     
    1. if (TextUtils.equals("android.intent.action.PHONE_STATE", intent  
    2.                 .getAction())) {  
    3.             ComponentName cn = new ComponentName(context, MyReceiver.class);  
    4.             try {  
    5.                 ActivityInfo info = context.getPackageManager().getReceiverInfo(cn,  
    6.                         PackageManager.GET_META_DATA);  
    7.             } catch (NameNotFoundException e) {  
    8.                 e.printStackTrace();  
    9.             }  
    10.             String msg = info.metaData.getString("receiver_name");  
    11.             // 打电话测试即可  
    12.             Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();  
    13.         }  

    总结:

    这个数据配置为什么要这么写,我还没发现它的好,以后慢慢领悟再来续写。

    我觉得大可以写一个ConstData类来存放id,key之类的参数。

  • 相关阅读:
    AtomicInteger
    Android利用ViewPager实现滑动广告板
    modelsim实用教程--前言
    信号的抽取和插值
    FPGA与simulink联合实时环路系列——实验三 按键key
    FPGA与simulink联合实时环路系列——实验二LED
    FPGA与simulink联合实时环路系列——实验一 测试
    FPGA与simulink联合实时环路系列—开篇
    格雷码原理与Verilog实现
    基于FPGA的飞机的小游戏
  • 原文地址:https://www.cnblogs.com/kings-boke/p/4266486.html
Copyright © 2011-2022 走看看