<meta-data>是对外界开放的,是向系统注册的信息,系统及外界是可以通过PackageInfo相关API获取到meta-data的信息。
在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,但不同的父元素,在应用时读取的方法也不同。
<meta-data>元素用name-value对的格式给其父组件提供任意可选的数据。一个组件元素能够包含任意多个<meta-data>子元素,所有这些元素中定义的值会被收集到一个Bundle对象中,并且提供给组件的PackageItemInfo.metaData属性字段。通常值是通过其value属性来指定的。但是,也可以使用resource属性来代替,把一个资源ID跟值进行关联。
1.在Activity的应用。
xml代码段:
- <activity>
- <meta-data android:name="myMsg" android:value="hello"></meta-data>
- </activity>
java代码段:
- ActivityInfo info=this.getPackageManager()
- .getActivityInfo(getComponentName(),
- PackageManager.GET_META_DATA);
- String msg=info.metaData.getString("myMsg");
2.在application的应用。
xml代码段:
- <application>
- <meta-data android:value="hello" android:name="myMsg"></meta-data>
- </application>
java代码段:
- ApplicationInfo appInfo = this.getPackageManager()
- .getApplicationInfo(getPackageName(),
- PackageManager.GET_META_DATA);
- String msg=appInfo.metaData.getString("myMsg");
3.在service的应用。
xml代码段:
- <service android:name="MetaDataService">
- <meta-data android:value="hello" android:name="myMsg"></meta-data>
- </service>
java代码段:
- ComponentName cn=new ComponentName(this, MetaDataService.class);
- ServiceInfo info=this.getPackageManager()
- .getServiceInfo(cn, PackageManager.GET_META_DATA);
- String msg=info.metaData.getString("myMsg");
4.在receiver的应用。
xml代码段:
- <receiver android:name="MetaDataReceiver">
- <meta-data android:value="hello" android:name="myMsg"></meta-data>
- <intent-filter>
- <action android:name="android.intent.action.PHONE_STATE"></action>
- </intent-filter>
- </receiver>
java代码段:
- ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
- ActivityInfo info=context.getPackageManager()
- .getReceiverInfo(cn, PackageManager.GET_META_DATA);
- String msg=info.metaData.getString("myMsg");