zoukankan      html  css  js  c++  java
  • Android-自定义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>是提供组件额外的数据用的,它本身就是一个键值对,可以自定义名称和值。它可以包含在以下组件当中:
     
     
    给各位看一个示例吧:
    这是我定义的一个AndroidMenifest.xml配置文件
     
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     package="com.wwj.metadata"  
    4.     android:versionCode="1"  
    5.     android:versionName="1.0" >  
    6.   
    7.     <uses-sdk  
    8.         android:minSdkVersion="8"  
    9.         android:targetSdkVersion="18" />  
    10.   
    11.     <application  
    12.         android:allowBackup="true"  
    13.         android:icon="@drawable/ic_launcher"  
    14.         android:label="@string/app_name"  
    15.         android:theme="@style/AppTheme" >  
    16.         <activity  
    17.             android:name="com.wwj.metadata.MainActivity"  
    18.             android:label="@string/app_name" >  
    19.             <intent-filter>  
    20.                 <action android:name="android.intent.action.MAIN" />  
    21.   
    22.                 <category android:name="android.intent.category.LAUNCHER" />  
    23.             </intent-filter>  
    24.             <!-- 在Activity定义的meta-data -->  
    25.             <meta-data  
    26.                 android:name="myMsg"  
    27.                 android:value="hello my activity" >  
    28.             </meta-data>  
    29.         </activity>  
    30.   
    31.         <!-- 在Application定义的meta-data -->  
    32.         <meta-data  
    33.             android:name="myMsg"  
    34.             android:value="hello my application" >  
    35.         </meta-data>  
    36.     </application>  
    37.   
    38. </manifest>  


    笔者这里在Application级别和Activity级别都定义了一个meta-data,我们如何来取得这两个组件的值呢?如下:
     
    1. package com.wwj.metadata;  
    2.   
    3. import android.app.Activity;  
    4. import android.content.pm.ActivityInfo;  
    5. import android.content.pm.PackageManager;  
    6. import android.content.pm.PackageManager.NameNotFoundException;  
    7. import android.os.Bundle;  
    8.   
    9. public class MainActivity extends Activity {  
    10.   
    11.     @Override  
    12.     protected void onCreate(Bundle savedInstanceState) {  
    13.         super.onCreate(savedInstanceState);  
    14.         setContentView(R.layout.activity_main);  
    15.         //在Activity的应用  
    16.         try {  
    17.             ActivityInfo info = this.getPackageManager().getActivityInfo(  
    18.                     getComponentName(), PackageManager.GET_META_DATA);  
    19.             String msg = info.metaData.getString("myMsg");  
    20.             System.out.println("myMsg:" + msg);  
    21.         } catch (NameNotFoundException e) {  
    22.             e.printStackTrace();  
    23.         }  
    24.     }  
    25.       
    26.       
    27. /*  1 :在Activity的应用。 
    28.     xml代码段: 
    29.    <activity...> 
    30.        <meta-data android:name="myMsg" android:value="hello my activity"></meta-data> 
    31.     </activity> 
    32.      
    33.     java代码段: 
    34.    ActivityInfo info=this.getPackageManager() 
    35.                           .getActivityInfo(getComponentName(), 
    36.                           PackageManager.GET_META_DATA); 
    37.     String msg=info.metaData.getString("myMsg"); 
    38.     System.out.println("myMsg:"+msg); 
    39. 2:在application的应用。 
    40.    xml代码段: 
    41.   <application...> 
    42.        <meta-data android:value="hello my application" android:name="myMsg"></meta-data> 
    43.    </application> 
    44.     
    45.    java代码段: 
    46.     ApplicationInfo appInfo = this.getPackageManager() 
    47.                                   .getApplicationInfo(getPackageName(),  
    48.                           PackageManager.GET_META_DATA); 
    49.     String msg=appInfo.metaData.getString("myMsg"); 
    50.     System.out.println("myMsg:"+msg); 
    51. 3:在service的应用。 
    52.    xml代码段: 
    53.    <service android:name="MetaDataService"> 
    54.       <meta-data android:value="hello my service" android:name="myMsg"></meta-data> 
    55.    </service> 
    56.    java代码段: 
    57.    ComponentName cn=new ComponentName(this, MetaDataService.class); 
    58.    ServiceInfo info=this.getPackageManager() 
    59.                         .getServiceInfo(cn, PackageManager.GET_META_DATA); 
    60.     String msg=info.metaData.getString("myMsg"); 
    61.     System.out.println("myMsg:"+msg); 
    62. 4: 在receiver的应用。 
    63.    xml代码段: 
    64.     <receiver android:name="MetaDataReceiver"> 
    65.             <meta-data android:value="hello my receiver" android:name="myMsg"></meta-data> 
    66.             <intent-filter> 
    67.                 <action android:name="android.intent.action.PHONE_STATE"></action> 
    68.             </intent-filter> 
    69.     </receiver> 
    70.    java代码段: 
    71.     ComponentName cn=new ComponentName(context, MetaDataReceiver.class); 
    72.     ActivityInfo info=context.getPackageManager() 
    73.                              .getReceiverInfo(cn, PackageManager.GET_META_DATA); 
    74.     String msg=info.metaData.getString("myMsg"); 
    75.     System.out.println("myMsg:"+msg);*/  
    76.   
    77. }  

    转自:http://blog.csdn.net/wwj_748/article/details/25079991

  • 相关阅读:
    ModelMap和ModelAndView的作用
    jquery 临时存值
    条件sql ibatis
    IBATIS动态SQL
    MyEclipse 快捷键
    jquery $用法
    弹窗案例
    Ibatis sql语句1
    Ibatis sql语句
    jQuery的三种$()
  • 原文地址:https://www.cnblogs.com/oakpip/p/3718997.html
Copyright © 2011-2022 走看看