现在的位置: 首页 > 综合 > 正文

android学习笔记—60_meta-data的使用,在清单文件中是用来给activity,service,receiver提供参数

2018年04月05日 ⁄ 综合 ⁄ 共 3796字 ⁄ 字号 评论关闭

2013/5/19
Java技术qq交流群:JavaDream:251572072
60_meta-data的使用
-----------------------------------------------
1.可以用于activity,服务,广播接收节点下,它的作用是为组件提供额外的参数数据
  参数数据由程序员定义的
------------------------------------
2.这里可以打开帮助文档查看使用方法
G:\android\android-sdk-windows\docs\guide\topics\manifest\meta-data-element.html
  语法:
  <meta-data android:name="string"
           android:resource="resource specification"
           android:value="string" />
-------------------------------------------
3.contained in:
  <activity>
  <activity-alias>
  <service>
  <receiver>
可以用到这些的底下.用于为组件提供自己定义的参数
----------------------------------------------
4.下面是使用<meta-data>传递参数的所有源码:
  metadata新建这个android项目
------------------------------------------
a./metadata/src/com/crdream/metadata/MetadataActivity.java
  package com.crdream.metadata;

import android.app.Activity;
import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.widget.Toast;

public class MetadataActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       //1.这里获取meta-data对应的参数的值.
        try {
         //2.首先获取包管理器,通过包管理器,取得组件信息.
         //3..getActivityInfo(第一个参数,取得组件的名称.
         //new ComponentName(this, MetadataActivity.class)用来获取这个组件的信息.
         //PackageManager.GET_META_DATA指定取得信息的类型.
         ActivityInfo activityInfo = this.getPackageManager().getActivityInfo(
     new ComponentName(this, MetadataActivity.class), PackageManager.GET_META_DATA);
         Bundle bundle = activityInfo.metaData;//返回一个Bundle对象.
         //从bundle获取,<meta-data>设定的值.
         String name = bundle.getString("cn.credream.name");
         String app = bundle.getString("cn.credream.app");
         int age = bundle.getInt("cn.credream.age");
         int sourceid = bundle.getInt("cn.credream.id");
         //通过吐司打印出来<meta-data>设定的值.
         Toast.makeText(this, "name="+ name+ ",age="+ age
           + ",app="+ app+ ",sourceid="+ sourceid, 1).show();
  } catch (NameNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    }
}
--------------------------------------------------------------
b./metadata/AndroidManifest.xml
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.crdream.metadata"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MetadataActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- 可以放在activity中. 在这个activity组件中可以定义多个
            meta-data
            运行过程:当这个activity组件运行的时候,系统会读取  meta-data参数,
                               然后把参数存放在Bundle对象中
                               然后在把这个Bundle对象,存放在组件的信息对象中的Info.metaData对象中.
                                在取得的时候,只要先取得这个组件的信息对象Info然后在取得信息对象的metaData
                                变量就可以取得参数了.
            -->
    
      <meta-data android:name="cn.credream.name" android:value="lidewei"/>
            <meta-data android:name="cn.credream.age" android:value="5"/>
         <!--  //这里引用的参数是在string.xml文件中定义的 -->
            <meta-data android:name="cn.credream.app" android:value="@string/hello"/>
           <!--  android:resource="@string/hello"/>得到表达式的id,也就是得到hello的id
           取得这一项,在xml中的什么位置 -->
            <meta-data android:name="cn.credream.id" android:resource="@string/hello"/>
           
        </activity>
       
           
    </application>

</manifest>

抱歉!评论已关闭.