感覺上,Manifest 檔案有點像是 Java Servlet 的設定檔案,都是用來告訴系統自己的存在以及有哪些功能,應該被如何呼叫、啟動裡面的函數。
在 Android 的四種元素中,Activity、Service、Content Provider都是需要被定義在這個用 XML 格式寫成的設定檔中,否則系統是不承認的,結果就是無法被呼叫、執行。唯一的例外是 Broadcast receiver,它可以在程式執行途中被建立、註冊到系統上,使用一個叫作 registerReceiver() 的方法。
也就是說,必須在 Manifest 定義,否則無法使用 Intent 啟動 Activity 和 Service。
除了定義 Activity 之外,Manifest 也定義這個應用程式需要的系統的配置,像是程式需要有相機鏡頭或是藍牙連線功能,或是最低的 API Level 也就是這個程式最低需要的 Android 第幾版,如︰2.2 版之後機器。每一個釋出的版本,都有對應的一個 API Level 編號,像是 2.2 對應到 API Level 8。
由此看得出, Android 是設計向下相容的。不過支援度如何,就有待之後的驗證了。像是最新蜂巢3.x 能不能完整支援 2.x 版的程式,個人抱著懷疑的態度。
Manifest所定義的資料, Android 系統只把它作為一個「額外的資訊」,只有 Market 才會讀取它,讓搜尋的過程中不會出現不符使用者裝置的應用軟體被裝入。所以,如果直接拿 apk 安裝的話,應該就不會作阻擋的動作。
Manifest 的另一個功能,則是定義 Intent filter(意圖過濾?),也就是之前文章中提到的問題。藉由定義的字串(如︰send 表示發出郵件)表示功能需求,讓自己的應用程式也可以去「處理」這件事情。當 Android 發現有兩個以上程式可以處理,就會出現選單讓使用者進行選擇。一個常見的例子為︰當使用者安裝其它瀏覽器後,當使用者發出「瀏覽網頁」的意圖(Intent)時,系統就會列出既有的和新裝入的瀏覽器讓使用者選擇。
沒有留言:
張貼留言