AndroidManifest.xml文件詳解(meta-data)

http://blog.csdn.net/think_soft/article/details/7567189html

 

語法(SYNTAX):java

<meta-dataandroid:name="string"
           android:resource="resource specification"
           android:value="string"/>
android

被包含於(CONTAINED IN):app

<activity>ide

<activity-alias>ui

<service>this

<receiver>spa

<application>.net

<provider>
code

說明(DESCRIPTION):

這個元素用name- value對的格式給其父組件提供任意可選的數據。一個組件元素可以包含任意多個<meta-data>子元素,全部這些元素中定義的值會被 收集到一個Bundle對象中,而且提供給組件的PackageItemInfo.metaData屬性字段。

一般值是經過其value屬性來指定的。可是,也能夠使用resource屬性來代替,把一個資源ID跟值進行關聯。

例如,下面的代碼就是把存儲在@string/kangaroo資源中的值跟」zoo」名稱進行關聯:

<meta-data android:name="zoo" android:value="@string/kangaroo" />

另外一個方面,使用resource屬性會給zoo分配一個數字資源ID,而不是保存在資源中的值。例如:

<meta-data android:name="zoo" android:resource="@string/kangaroo" />

要避免使用多個獨立的<meta-data>實體來提供相關的數據。相反若是有複雜的數據要跟組件關聯,那麼把數據做爲資源來保存,並使用resource屬性,把相關的資源ID通知給組件。

屬性(ATTRIBUTES):

android:name

針對項目的一個惟一名稱。使用Java樣式的命名規則,能夠確保名稱的惟一性,例如:

com.example.project.activity.fred。

android:resource

這個屬性定義了一個要引用的資源。資源的ID會跟這個項目進行關聯。經過Bundle.getInt()方法可以從meta-data的Bundle對象中獲取這個ID。

android:value

這個屬性會給這個項目分配一個值。下表列出了可能分配的數據的數據類型,以及獲取這些數據的方法:

類型

Bundle對象方法

字符串。對於一個Unicode字符,要使用雙斜線(\\)來進行轉義,如\\n和\\uxxxx

getString()

整數值,如100

getInt()

布爾值,true或false

getBoolean()

顏色值,如#rgb、#argb、#rrggbb、#aarrggbb

getString()

浮點值,如1.23

getFloat()

被引入版本(INTRODUCED IN):

API Level 1

 

 

在AndroidManifest.xml中,<meta-data>元素能夠做爲子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,但
不一樣的父元素,在應用時讀取的方法也不一樣。

 

1 :在Activity的應用。
    xml代碼段:
   <activity...>
       <meta-data android:name="myMsg" android:value="hello my activity"></meta-data>
    </activity>
   
    java代碼段:
   ActivityInfo info=this.getPackageManager()
                          .getActivityInfo(getComponentName(),
                          PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

 

2:在application的應用。
   xml代碼段:
  <application...>
       <meta-data android:value="hello my application" android:name="myMsg"></meta-data>
   </application>
  
   java代碼段:
    ApplicationInfo appInfo = this.getPackageManager()
                                  .getApplicationInfo(getPackageName(),
                          PackageManager.GET_META_DATA);
    String msg=appInfo.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

 

3:在service的應用。
   xml代碼段:
   <service android:name="MetaDataService">
      <meta-data android:value="hello my service" 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");
    System.out.println("myMsg:"+msg);

4: 在receiver的應用。
   xml代碼段:
    <receiver android:name="MetaDataReceiver">
            <meta-data android:value="hello my receiver" 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");     System.out.println("myMsg:"+msg);

相關文章
相關標籤/搜索