meta-data就像其名同樣,主要用來定義一些組件相關的配置值。 html
按照官方定義,metadata是一組供父組件使用的名值對(name-value pair),所以相應的meta-data元素應該定義在相應的組件中。即若是想在activity中使用metadata,那麼meta-data必須定義在AndroidManifest.xml的activity聲明中。 java
全部的名值對被包裝成Bundle供組件使用,所以使用方式同Bundle。metadata普通值由value屬性給出,資源ID由resource屬性給出。
好比咱們定義資源 android
<string name="x_key">resource key</string> //R public static final int ic_launcher=0x7f020000;定義metadata
<meta-data android:name="com.xesam.key_1" android:value="x_key" /> <meta-data android:name="com.xesam.key_2" android:value="@string/x_key" /> <meta-data android:name="com.xesam.img" android:resource="@drawable/ic_launcher" />
那麼有: app
metadata.getString("com.xesam.key_1") ==> "x_key" metadata.getString("com.xesam.key_2") ==> "resource key" metadata.getInt("com.xesam.img") ==> 0x7f020000因爲resource指向資源ID,所以用metadata能夠定義一些稍微複雜的值。
int imageId = meta.getInt("com.xesam.img"); ((ImageView) findViewById(R.id.img)).setImageResource(imageId);
形如: this
<meta-data android:name="com.xesam.key_1" android:value="000" />相似這樣的值若是使用bundle.getString()的話是不起做用的,由於Bundle中使用的是形如:
return (String) o;
爲了不這種狀況:
1,能夠在形如000的字符串前面放個\0空字符,強迫android按照字符串解析000。
2,在資源文件中指定須要的值,而後在metadata的value中引用此值。 spa
附: code
//在Activity應用<meta-data>元素。 ActivityInfo info = this.getPackageManager() .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA); info.metaData.getString("meta_name"); //在application應用<meta-data>元素。 ApplicationInfo appInfo = this.getPackageManager() .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA); appInfo.metaData.getString("meta_name"); //在service應用<meta-data>元素。 ComponentName cn = new ComponentName(this, MetaDataService.class); ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA); info.metaData.getString("meta_name"); //在receiver應用<meta-data>元素。 ComponentName cn = new ComponentName(context, MetaDataReceiver.class); ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA); info.metaData.getString("meta_name");