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>