標籤:
介紹
Android在 提供了meta-date使用索引值對的形式實現自訂配置。一般使用中作為渠道標識。可以用 在<application>,<activity>,<activity-alias> ,<provider> ,<receiver>節點下。所有的值儲存在同一個Bundle裡面,可以使用 PackageItemInfo.metaData渠道這些資料。
使用形式:
1 <meta-data android:name="string" 2 android:resource="resource specification" 3 android:value="string" />
resource 和 value直接用一個即可,但是注意如果使用
1 <meta-data android:name="zoo" android:value="@string/kangaroo" />
那麼得到的是ID值,也就是在R檔案裡面的數字,不是實際資源值。而要使用resource來取資源值(使用getInt()擷取)。
1 <meta-data android:name="zoo" android:resource="@string/kangaroo" />
android:name:確保是唯一的就OK了。
android:value:值可以是:
1.字串 使用getString()擷取
2.整數 如“100” 使用getInt()擷取
3.布爾值:“true”,"false" 使用getBoolean()擷取
4.顏色值: "#rgb", "#argb", "#rrggbb", 或者 "#aarrggbb" 使用getInt()擷取
5.浮點值 :“1.2” 使用getFloat()
注意:Bundle中使用的是return (String) o;來擷取的代碼擷取一個StringValue值的,如果你配置的想配置的一個字串的值是“000”時,但是在將metadata封裝成bundle 的時候,"000"被解析成整數0,所以使用getString()擷取的會是null。
執行個體:
在Manifest節點裡最後加上:
1 <meta-data android:value="GOOGLEPLAY_V165" android:name="HAIWAN_CHANNEL"/>
在自訂的Application裡面一個方法
1 public String getHaiwanVersion() {2 String channel = "";3 try {4 channel = this.getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA).metaData.getString("HAIWAN_CHANNEL");5 } catch (NameNotFoundException e) {6 e.printStackTrace();7 }8 return channel;9 }
其他節點:
1 //在Activity應用<meta-data>元素。 2 ActivityInfo info = this.getPackageManager() 3 .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA); 4 info.metaData.getString("meta_name"); 5 6 //在application應用<meta-data>元素。 7 ApplicationInfo appInfo = this.getPackageManager() 8 .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA); 9 appInfo.metaData.getString("meta_name");10 11 //在service應用<meta-data>元素。12 ComponentName cn = new ComponentName(this, MetaDataService.class);13 ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);14 info.metaData.getString("meta_name");15 16 //在receiver應用<meta-data>元素。17 ComponentName cn = new ComponentName(context, MetaDataReceiver.class);18 ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);19 info.metaData.getString("meta_name");
Android讀取Manifest檔案下Application等節點下的metadata自訂資料