1. 程式人生 > >關於AndroidManifest.xml中activity標籤

關於AndroidManifest.xml中activity標籤

        一般情況下,在新建一個activity後,為了使intent可以呼叫此活動,我們要在androidManifest.xml檔案中新增一個<activity>標籤,<activity>標籤的一般格式如下:

        <activity
            android:name="my.test.intents.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        其中,"android:name"是活動對應的類名稱,"android:label"是活動標題欄顯示的內容,<intent-filter>是意圖篩選器,<action>是動作名稱,是指intent要執行的動作,<category>是類別名稱,一般情況下,每個<intent-filter> 中都要顯示指定一個預設的類別名稱,即<category android:name="android.intent.category.DEFAULT" />,但是上面的程式碼中沒有指定預設類別名稱,這是一個例外情況,因為其<intent-filter> 中的<action>是"android.intent.action.MAIN",意思是這項活動是應用程式的入口點,這種情況下可以不加預設類別名稱。

        當然,除<action>和<category>以外,<intent-filter>中還有很多其他元素,在這裡不詳述。

        上面的程式碼是androidManifest.xml中定義程式入口活動的例子,下面我們寫一個自定義的例子:

        <activity
            android:name=".MyBrowserActivity"
            android:label="My Activity" >
            <intent-filter>
                <action android:name="my.test.MyBrowser"/>
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="http"/>
            </intent-filter>
        </activity>
        在這個<activity>標籤中,我們指定活動的類為MyBrowserActivity.class,活動的標題顯示為"My Activity",<action android:name="my.test.MyBrowser"/>意味著其他活動可以通過my.test.MyBrowser動作來呼叫這個活動,"my.test.MyBrowser"只是我們定義的一個動作的名稱,寫成包的形式是因為這樣使我們更容易理解它的含義,如果我們把"my.test.MyBrowser"改成任意的內容如:"somethingelse",同樣,我們可以通過這個新的動作名稱,來呼叫這個活動。<data> 元素指定了活動期望的資料型別,在這裡,它期望的資料要以http://字首開頭。

        正如前文所說,一般情況下,每個<intent-filter>中都要顯示地指定一個預設的類別名稱,在我們自定義的活動中,我們指定了這個預設類別,假如沒有這行程式碼,這個活動將不能被其他活動呼叫,一旦呼叫,就會導致程式的崩潰。這裡有個小技巧,我們可以通過使用createChooser()來防止這種原因的崩潰,如下所示:

	public void onClick(View view){
		Intent i = new Intent("my.test.MyBrowser");
		i.setData(Uri.parse("http://www.baidu.com"));
		startActivity(Intent.createChooser(i, "Open URL using..."));
	}
        上面的函式實現點選按鈕開啟瀏覽器並瀏覽百度主頁的功能,如果我們註釋掉androidManifest.xml中對應activity的預設類別名稱,在呼叫這個活動時(點選Launch My Browser按鈕),不會產生崩潰,而是會彈出一個選擇框,標題為"Open URL using...",內容為“無法找到應用程式以執行該操作”,如下圖所示:

        以上是對androidManifest.xml中的<activity>標籤的一點總結,那麼究竟哪種情況下需要指定預設類別,哪種請款下不需要指定呢,以及使用intent呼叫活動的整個流程是什麼樣的呢?詳見http://blog.csdn.net/iverain/article/details/38660271