<manifest>
首先,我們的根標(biāo)簽就是 manifest,有開始標(biāo)簽就有結(jié)束標(biāo)簽,所以每個(gè)標(biāo)簽都是成對(duì)出現(xiàn)的。
在我們的根標(biāo)簽中,需要指定package,應(yīng)用的包名,具有唯一性。還需要指定應(yīng)用當(dāng)前的版本號(hào)versionCode和版本名稱versionName;我們可以看到關(guān)于Android的屬性都會(huì)有android:這樣的前綴,這個(gè)是標(biāo)準(zhǔn)寫法,我們每次敲完前綴之后可以通過代碼提示功能來查看可以添加的屬性,如下圖:
<uses-sdk>
uses-sdk是為了程序兼容而存在的,它是如何做兼容的呢?也許從三個(gè)子項(xiàng)的名字上就可以猜測出來。
minSdkVersion:若手機(jī)或平板的API level低于apk的minSdkVersion,系統(tǒng)不能安裝這個(gè)應(yīng)用。
targetSdkVersion:API level在minSdkVersion和targetSdkVersion之間的版本可以直接執(zhí)行程序(不需要打開任何兼容項(xiàng))。若手機(jī)或平板的API level大于程序的targetSdkVersion,Android運(yùn)行環(huán)境就需要模擬之前版本API的行為,這個(gè)稱之為兼容。程序開發(fā)者如何確定這個(gè)值呢?自然是在對(duì)應(yīng)平臺(tái)上測試,具體的過程是:遞增targetSdkVersion,每遞增一次測試一次。
maxSdkVersion:若手機(jī)或平板的API level 大于maxSdkVersion,程序不能安裝或使用。google文檔說不推薦這個(gè)子項(xiàng),因?yàn)锳ndroid 2.0.1后不檢查這一項(xiàng)了,只有g(shù)oogle play還會(huì)check這一項(xiàng)。
<uses-permission>
這個(gè)配置是標(biāo)識(shí)該應(yīng)用申請(qǐng)系統(tǒng)授權(quán)具體的權(quán)限。
|值 | 說明 |
|:: | :: |
|android.permission.ACCESS_CHECKIN_PROPERTIES |允許讀寫訪問”properties”表在checkin數(shù)據(jù)庫中,改值可以修改上傳|
|android.permission.ACCESS_COARSE_LOCATION|允許一個(gè)程序訪問CellID或WiFi來獲取粗略的位置|
| android.permission.ACCESS_FINE_LOCATION |允許一個(gè)程序訪問精良位置(如GPS)|
|android.permission.ACCESS_LOCATION_EXTRA_COMMANDS | 允許應(yīng)用程序訪問額外的位置提供命令|
| android.permission.ACCESS_MOCK_LOCATION|允許程序創(chuàng)建模擬位置用于測試|
|android.permission.ACCESS_NETWORK_STATE|允許程序訪問有關(guān)的網(wǎng)絡(luò)信息|
|android.permission.ACCESS_SURFACE_FLINGER|允許程序使用SurfaceFlinger底層特性|
|android.permission.ACCESS_WIFI_STATE|允許程序訪問Wi-Fi網(wǎng)絡(luò)狀態(tài)信息|
|android.permission.ACCOUNT_MANAGER|允許一個(gè)應(yīng)用程序啟動(dòng)賬戶認(rèn)證,該權(quán)限只能系統(tǒng)去設(shè)置|
|android.permission.AUTHENTICATE_ACCOUNTS|允許應(yīng)用程序的驗(yàn)證賬戶扮演一個(gè)賬戶管理者|
|android.permission.BATTERY_STATS|允許程序更新手機(jī)電池統(tǒng)計(jì)信息|
|android.permission.BIND_APPWIDGET|允許應(yīng)用告訴AppWidget哪個(gè)應(yīng)用能夠訪問該AppWidget的數(shù)據(jù)|
|android.permission.BIND_DEVICE_ADMIN|必須通過關(guān)機(jī)接收者的請(qǐng)求,來確保只有系統(tǒng)能夠與之交互|
|android.permission.BIND_INPUT_METHOD|必須通過InputMethodService的請(qǐng)求,來確保只有系統(tǒng)能夠與之綁定|
|android.permission.BIND_WALLPAPER|必須通過WallpaperService的請(qǐng)求,來確保只有系統(tǒng)能夠與之綁定|
|android.permission.BLUETOOTH|允許程序連接到已配對(duì)的藍(lán)牙設(shè)備|
|android.permission.BLUETOOTH_ADMIN|允許程序發(fā)現(xiàn)和配對(duì)藍(lán)牙設(shè)備|
|android.permission.BRICK|請(qǐng)求能夠禁用設(shè)備(非常危險(xiǎn))|
|android.permission.BROADCAST_PACKAGE_REMOVED|允許應(yīng)用發(fā)出一個(gè)程序包被移除的廣播消息|
|android.permission.BROADCAST_SMS|允許應(yīng)用發(fā)出一個(gè)收到短信的消息|
|android.permission.BROADCAST_STICKY|允許應(yīng)用發(fā)出一個(gè)與intent相連的消息|
|android.permission.BROADCAST_WAP_PUSH|允許應(yīng)用發(fā)出一個(gè)收到WAP PUSH的廣播消息|
|android.permission.CALL_PHONE|允許一個(gè)程序初始化一個(gè)電話撥號(hào),不需通過撥號(hào)用戶界面需要用戶確認(rèn)|
|android.permission.CALL_PRIVILEGED|允許一個(gè)程序撥打任何號(hào)碼,包含緊急號(hào)碼無需通過撥號(hào)用戶界面需要用戶確認(rèn)|
|android.permission.CAMERA|請(qǐng)求訪問使用照相設(shè)備|
|android.permission.CHANGE_COMPONENT_ENABLED_STATE|允許一個(gè)程序是否改變一個(gè)組件或其他的啟用或禁用|
|android.permission.CHANGE_CONFIGURATION|允許一個(gè)程序修改當(dāng)前設(shè)置,如本地化|
|android.permission.CHANGE_NETWORK_STATE|允許程序改變網(wǎng)絡(luò)連接狀態(tài)|
|android.permission.CHANGE_WIFI_STATE|允許程序改變Wi-Fi連接狀態(tài)|
|android.permission.CLEAR_APP_CACHE|允許一個(gè)程序在設(shè)備中清除所有安裝的程序的緩存|
|android.permission.CLEAR_APP_USER_DATA|允許一個(gè)程序清除用戶數(shù)據(jù)|
|android.permission.CONTROL_LOCATION_UPDATES|允許啟用禁止位置更新提示從無線模塊|
|android.permission.DELETE_CACHE_FILES|允許程序刪除緩存文件|
|android.permission.DELETE_PACKAGES|允許一個(gè)程序刪除包|
|android.permission.DEVICE_POWER|允許訪問底層電源管理|
|android.permission.DIAGNOSTIC|允許程序RW診斷資源|
|android.permission.DISABLE_KEYGUARD|允許程序禁用鍵盤鎖|
|android.permission.DUMP|允許程序返回狀態(tài)抓取信息從系統(tǒng)服務(wù)
|android.permission.EXPAND_STATUS_BAR|允許一個(gè)程序擴(kuò)展收縮在狀態(tài)欄,android開發(fā)網(wǎng)提示應(yīng)該是一個(gè)類似Windows Mobile中的托盤程序|
|android.permission.FACTORY_TEST|作為一個(gè)工廠測試程序,運(yùn)行在root用戶|
|android.permission.FLASHLIGHT|允許訪問閃光燈,其中HTC Dream不包含閃光燈|
|android.permission.FORCE_BACK|允許應(yīng)用強(qiáng)制執(zhí)行返回操作而不論是不是最終的activity|
|android.permission.GET_ACCOUNTS|允許訪問在Accounts Service中的一個(gè)帳戶列表|
|android.permission.GET_PACKAGE_SIZE|允許一個(gè)程序獲取任何package占用空間容量|
|android.permission.GET_TASKS|允許一個(gè)程序獲取信息有關(guān)當(dāng)前或最近運(yùn)行的任務(wù),一個(gè)縮略的任務(wù)狀態(tài),是否活動(dòng)等等|
|android.permission.GLOBAL_SEARCH|可以被內(nèi)容提供者用來允許使用全程搜索他們的數(shù)據(jù)|
|android.permission.HARDWARE_TEST|允許訪問硬件|
|android.permission.INJECT_EVENTS|允許一個(gè)程序截獲用戶事件如按鍵、觸摸、軌跡球等等到一個(gè)時(shí)間流|
|android.permission.INSTALL_PACKAGES|允許一個(gè)程序安裝packages|
|android.permission.INTERNAL_SYSTEM_WINDOW|允許打開窗口使用系統(tǒng)用戶界面|
|android.permission.INTERNET|允許程序打開網(wǎng)絡(luò)sockets|
|android.permission.KILL_BACKGROUND_PROCESSES|允許應(yīng)用去呼叫killBackgroundProcesses方法|
|android.permission.MANAGE_ACCOUNTS|允許程序去管理賬戶列表(在賬戶管理者中)|
|android.permission.MANAGE_APP_TOKENS|允許程序管理(創(chuàng)建、催后、 z- order默認(rèn)向z軸推移)程序引用在窗口管理器中|
|android.permission.MASTER_CLEAR|目前還沒有明確的解釋|
|android.permission.MODIFY_AUDIO_SETTINGS|允許程序修改全局音頻設(shè)置|
|android.permission.MODIFY_PHONE_STATE|允許修改話機(jī)狀態(tài),如電源,人機(jī)接口等|
|android.permission.MODIFY_FORMAT_FILESYSTEMS|允許格式化可移除的存儲(chǔ)倉庫的文件系統(tǒng)|
|android.permission.MOUNT_UNMOUNT_FILESYSTEMS|允許掛載和反掛載文件系統(tǒng)可移動(dòng)存儲(chǔ)|
|android.permission.PERSISTENT_ACTIVITY|允許一個(gè)程序設(shè)置他的activities顯示|
|android.permission.PROCESS_OUTGOING_CALLS|允許程序監(jiān)視、修改有關(guān)播出電話|
|android.permission.READ_CALENDAR|允許程序讀取用戶日歷數(shù)據(jù)|
|android.permission.READ_CONTACTS|允許程序讀取用戶聯(lián)系人數(shù)據(jù)|
|android.permission.READ_FRAME_BUFFER|允許程序屏幕波或和更多常規(guī)的訪問幀緩沖數(shù)據(jù)|
|android.permission.READ_HISTORY_BOOKMARKS|允許應(yīng)用去讀取(非寫)用戶瀏覽歷史和書簽|
|android.permission.READ_INPUT_STATE|允許程序返回當(dāng)前按鍵狀態(tài)|
|android.permission.READ_LOGS|允許程序讀取底層系統(tǒng)日志文件|
|android.permission.READ_OWNER_DATA|允許程序讀取所有者數(shù)據(jù)|
|android.permission.READ_PHONE_STATE|允許讀取電話的狀態(tài)|
|android.permission.READ_SMS|允許程序讀取短信息(Allows an application to read SMS messages.)|
|android.permission.READ_SYNC_SETTINGS|允許程序讀取同步設(shè)置|
|android.permission.READ_SYNC_STATS|允許程序讀取同步狀態(tài)|
|android.permission.REBOOT|請(qǐng)求能夠重新啟動(dòng)設(shè)備|
|android.permission.RECEIVE_BOOT_COMPLETED|允許一個(gè)程序接收到 ACTION_BOOT_COMPLETED廣播在系統(tǒng)完成啟動(dòng)|
|android.permission.RECEIVE_MMS|允許一個(gè)程序監(jiān)控將收到MMS彩信,記錄或處理|
|android.permission.RECEIVE_SMS|允許程序監(jiān)控一個(gè)將收到短信息,記錄或處理|
|android.permission.RECEIVE_WAP_PUSH|允許程序監(jiān)控將收到WAP PUSH信息|
|android.permission.RECORD_AUDIO|允許程序錄制音頻|
|android.permission.REORDER_TASKS|允許程序改變Z軸排列任務(wù)|
|android.permission.RESTART_PACKAGES|允許程序重新啟動(dòng)其他程序(此值已廢棄使用)
|android.permission.SEND_SMS|允許程序發(fā)送SMS短信|
|android.permission.SET_ACTIVITY_WATCHER|允許程序監(jiān)控或控制activities已經(jīng)啟動(dòng)全局系統(tǒng)中|
|android.permission.SET_ALWAYS_FINISH|允許程序控制是否活動(dòng)間接完成在處于后臺(tái)時(shí)|
|android.permission.SET_ANIMATION_SCALE|修改全局信息比例|
|android.permission.SET_DEBUG_APP|配置一個(gè)程序用于調(diào)試|
|android.permission.SET_ORIENTATION|允許底層訪問設(shè)置屏幕方向和實(shí)際旋轉(zhuǎn)|
|android.permission.SET_PREFERRED_APPLICATIONS|允許一個(gè)程序修改列表參數(shù)PackageManager.addPackageToPreferred()和PackageManager.removePackageFromPreferred()方法|
|android.permission.SET_PROCESS_LIMIT|允許設(shè)置最大的運(yùn)行進(jìn)程數(shù)量|
|android.permission.SET_TIME|允許應(yīng)用設(shè)置系統(tǒng)時(shí)間|
|android.permission.SET_TIME_ZONE|允許程序設(shè)置系統(tǒng)時(shí)區(qū)時(shí)間|
|android.permission.SET_WALLPAPER|允許程序設(shè)置壁紙|
|android.permission.SET_WALLPAPER_HINTS|允許程序設(shè)置壁紙hits|
|android.permission.SIGNAL_PERSISTENT_PROCESSES|允許程序請(qǐng)求發(fā)送信號(hào)到所有顯示的進(jìn)程中|
|android.permission.STATUS_BAR|允許程序打開、關(guān)閉或禁用狀態(tài)欄及圖標(biāo)|
|android.permission.SUBSCRIBED_FEEDS_READ|允許一個(gè)程序訪問訂閱RSS Feed內(nèi)容提供|
|android.permission.SUBSCRIBED_FEEDS_WRITE|系統(tǒng)暫時(shí)保留改設(shè)置,|
|android.permission.SYSTEM_ALERT_WINDOW|允許一個(gè)程序打開窗口使用 TYPE_SYSTEM_ALERT,顯示在其他所有程序的頂層|
|android.permission.UPDATE_DEVICE_STATS|允許應(yīng)用更新設(shè)備資料信息|
|android.permission.USE_CREDENTIALS|允許應(yīng)用從管理器得到授權(quán)請(qǐng)求|
|android.permission.VIBRATE|允許訪問振動(dòng)設(shè)備|
|android.permission.WAKE_LOCK|允許使用PowerManager的 WakeLocks保持進(jìn)程在休眠時(shí)從屏幕消失|
|android.permission.WRITE_APN_SETTINGS|允許程序?qū)懭階PI設(shè)置|
|android.permission.WRITE_CALENDAR|允許一個(gè)程序?qū)懭氲蛔x取用戶日歷數(shù)據(jù)|
|android.permission.WRITE_CONTACTS|允許程序?qū)懭氲蛔x取用戶聯(lián)系人數(shù)據(jù)|
|android.permission.WRITE_EXTERNAL_STORAGE|允許應(yīng)用寫(非讀)用戶的外部存儲(chǔ)器|
|android.permission.WRITE_GSERVICES|允許程序修改Google服務(wù)地圖|
|android.permission.WRITE_HISTORY_BOOKMARKS|允許應(yīng)用寫(非讀)用戶的瀏覽器歷史和書簽|
|android.permission.WRITE_OWNER_DATA|允許一個(gè)程序?qū)懭氲蛔x取所有者數(shù)據(jù)|
|android.permission.WRITE_SECURE_SETTINGS|允許應(yīng)用寫或讀當(dāng)前系統(tǒng)設(shè)置|
|android.permission.WRITE_SETTINGS|允許程序讀取或?qū)懭胂到y(tǒng)設(shè)置|
|android.permission.WRITE_SMS|允許程序?qū)懚绦舼
|android.permission.WRITE_SYNC_SETTINGS|允許程序?qū)懭胪皆O(shè)置|
application
包含在:<manifest>元素下
可以包含:
<activity><activity-alias><service><receiver><provider><uses-library>
1、android:allowClearUserData
是否給以用戶刪除用戶數(shù)據(jù)的權(quán)限,如果為true應(yīng)用管理者就擁有清除數(shù)據(jù)的權(quán)限;false沒有。默認(rèn)為true。
2、android:allowTaskReparenting
應(yīng)用定義的activities是否可以被從啟動(dòng)的任務(wù)轉(zhuǎn)移到和他有相同并且將被帶到前臺(tái)的任務(wù)。true他們可以被轉(zhuǎn)移,如果為false,
他們必須和啟動(dòng)他們的任務(wù)保持在一起。默認(rèn)為false。
3、android:backupAgent
實(shí)現(xiàn)應(yīng)用的備份代理的類名,BackupAgent的子類。這個(gè)屬性的名稱因該是全限定類名(如,"com.example.project.MyBackupAgent")。
但是,如果名稱的首字母被設(shè)置為點(diǎn)號(hào),也可以為類名(如,".MyBackupAgent"),他將被追加到在<manifest>元素中定義的包名后。
沒有默認(rèn)值。
4、android:debuggable
應(yīng)用是否可以使用debug,甚至運(yùn)行在用戶模式下。true可以,false不能。默認(rèn)為false。
5、android:description
用戶可讀的,比應(yīng)用標(biāo)簽更長、更多的應(yīng)用描述。此值必須是一個(gè)引用字符串。不像標(biāo)簽,他不能被設(shè)置為硬編碼字符串。沒有默認(rèn)值。
6、android:enabled
Android系統(tǒng)是否可以實(shí)例化應(yīng)用的組件。如果為true可以,如果為false不可以。如果為true時(shí),每個(gè)組件的enabled屬性決定了此組件
是否可用。如果為false,他重寫了組件指定值,所有的組件將不還用。默認(rèn)為true。
7、android:hasCode
應(yīng)用是否包含代碼。true表示包含,false表示不包含。當(dāng)值為false時(shí),在啟動(dòng)組件是系統(tǒng)不會(huì)試著加載應(yīng)用的任何代碼。默認(rèn)為true。
8、android:icon
整個(gè)應(yīng)用的圖標(biāo),還是每個(gè)組件的默認(rèn)圖標(biāo)。這個(gè)屬性值必須被設(shè)置為drawable資源的引用。沒有默認(rèn)值。
9、android:killAfterRestore
在整型系統(tǒng)重置操作中,當(dāng)他的設(shè)置被重置后,應(yīng)用是否應(yīng)該被終止。單個(gè)包的重置操作不會(huì)引起應(yīng)用被關(guān)閉。整個(gè)系統(tǒng)的恢復(fù)操作僅代表
性的發(fā)生一次,當(dāng)電話第一次被設(shè)置時(shí)。第三方應(yīng)用將不會(huì)經(jīng)常使用此屬性。
默認(rèn)值為true,意思是,當(dāng)整個(gè)系統(tǒng)被恢復(fù)時(shí),應(yīng)用運(yùn)行玩他的數(shù)據(jù)后,將會(huì)終止。
10、android:label
一個(gè)易讀的應(yīng)用標(biāo)簽,并且還是應(yīng)用的每個(gè)組件的默認(rèn)標(biāo)簽。這個(gè)標(biāo)簽應(yīng)該被設(shè)置為引用字符串資源,當(dāng)然他也可以像其他字符串一樣在用戶
接口中指定。但是為了方便,在應(yīng)用開發(fā)時(shí),可以被設(shè)置未定義字符串。
11、android:manageSpaceActivity
一個(gè)Activity子類的全限定名稱,這個(gè)Activity可以被系統(tǒng)啟動(dòng)讓用戶管理此應(yīng)用占有的存儲(chǔ)空間。這個(gè)Activity也應(yīng)該用<activity>元素聲明。
12、android:name
為這個(gè)應(yīng)用實(shí)現(xiàn)的Application子類的全限定名稱。當(dāng)應(yīng)用啟動(dòng)時(shí),這個(gè)類將在應(yīng)用的其他組件之前被實(shí)例化。
這個(gè)子類是可選的;大多數(shù)應(yīng)用不需要。在缺省時(shí),Android使用基本Application類的實(shí)例。
13、android:permission
客戶為了和應(yīng)用交互必須設(shè)置的許可的名稱。這個(gè)屬性是一個(gè)便利的途徑為應(yīng)用的組件設(shè)置許可。他可以被組件的permission屬性重寫。
14、android:persistent
應(yīng)用是否在所有時(shí)間下都保持運(yùn)行。true是,false不是。默認(rèn)為false。通常情況下應(yīng)用不應(yīng)該設(shè)置此標(biāo)識(shí)。持久模式僅僅被幾個(gè)系統(tǒng)應(yīng)用指定。
15、android:process
為應(yīng)用下的組件定一個(gè)運(yùn)行進(jìn)程名稱。每個(gè)組件可以定義自己的進(jìn)程名稱通過設(shè)置自己的process屬性。
在默認(rèn)情況下,Android為應(yīng)用創(chuàng)建一個(gè)進(jìn)程,當(dāng)應(yīng)用的第一個(gè)組件需要運(yùn)行時(shí)。所有的組件在同一個(gè)進(jìn)程下運(yùn)行。這個(gè)進(jìn)程的名稱和在<manifest>
元素設(shè)置的backage屬性名相同。
通過設(shè)置這個(gè)屬性在可以在其他應(yīng)用中共享,你可以協(xié)調(diào)應(yīng)用的組件在同一個(gè)進(jìn)程中運(yùn)行,但是只有兩應(yīng)用也共享用戶ID和簽訂相同的證書。
如果這個(gè)屬性的名稱一個(gè)冒號(hào)(":")開始,一個(gè)新的私有的進(jìn)程將被創(chuàng)建。如果一個(gè)進(jìn)程的名稱以小寫字母開頭,一個(gè)公共的進(jìn)程將被創(chuàng)建。
一個(gè)公共的進(jìn)程可以被其他應(yīng)用共享,來減少資源的使用。
16、android:restoreAnyVersion
表明這個(gè)應(yīng)用準(zhǔn)備嘗試恢復(fù)所有的備份數(shù)據(jù)集合,甚至如果備份數(shù)據(jù)是比當(dāng)前安裝的應(yīng)用高的編號(hào)存儲(chǔ)的。設(shè)置為true將允許備份管理者去嘗試
恢復(fù)當(dāng)版本不匹配,意思是數(shù)據(jù)沖突。要小心使用。默認(rèn)為false。
17、android:taskAffinity
提供給應(yīng)用下所有組件的類同名稱,除了設(shè)置了自己的taskAffinity屬性的組件。默認(rèn)情況下所有的組件使用相同的affinity。Affinity的名稱
和在<manifest>元素中設(shè)置的包名相同。
18、android:theme
為應(yīng)用下的組件定義一個(gè)引用自樣式資源的主題。個(gè)別的activities可以設(shè)置自己的主題,通過設(shè)置自己的theme屬性。
<activity>
activity是Android四大組件之一,它的屬性非常多,語法如下:
摘自:http://blog.sina.com.cn/s/blog_48d491300100zmg0.html
< activity android:allowTaskReparenting=["true" | "false"]
android:alwaysRetainTaskState=["true" | "false"]
android:clearTaskOnLaunch=["true" | "false"]
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale", "uiMode",
"orientation", "screenSize", "smallestScreenSize"]
android:enabled=["true" | "false"]
android:excludeFromRecents=["true" | "false"]
android:exported=["true" | "false"]
android:finishOnTaskLaunch=["true" | "false"]
android:hardwareAccelerated=["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]
android:multiprocess=["true" | "false"]
android:name="string"
android:noHistory=["true" | "false"]
android:parentActivityName="string"
android:permission="string"
android:process="string"
android:screenOrientation=["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"userLandscape" | "userPortrait" |
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]
android:stateNotNeeded=["true" | "false"]
android:taskAffinity="string"
android:theme="resource or theme"
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"] >
. . .
< /activity >
包含于:
< application>
可包含:
< intent-filter >
< meta-data>
說明:
聲明一個(gè) Activity( Activity 子類),實(shí)現(xiàn)應(yīng)用程序的可視化用戶界面。 所有 Activity 都必須在manifest文件中用 < activity > 聲明。 任何未經(jīng)聲明的 Activity 系統(tǒng)都會(huì)視而不見,且不會(huì)運(yùn)行。
屬性:
android:allowTaskReparenting
當(dāng)某個(gè)擁有相同 affinity 的任務(wù)即將返回前臺(tái)時(shí),Activity 是否能從啟動(dòng)時(shí)的任務(wù)轉(zhuǎn)移至此任務(wù)中去 —“true”表示可以移動(dòng),“false”表示它必須留在啟動(dòng)時(shí)的任務(wù)中。
如果未設(shè)置本屬性,則 < application > 元素中對(duì)應(yīng)的 allowTaskReparenting 屬性值將會(huì)應(yīng)用于 Activity 。 默認(rèn)值是“false”。
通常在啟動(dòng)時(shí),Activity 與啟動(dòng)時(shí)的任務(wù)相關(guān)聯(lián),并在整個(gè)生命周期都位于此任務(wù)中。 利用本屬性可以強(qiáng)行讓 Activity 在當(dāng)前任務(wù)不再顯示時(shí)歸屬于另一個(gè)與其 affinity 相同的任務(wù)。 典型應(yīng)用是讓一個(gè)應(yīng)用程序的 Activity 轉(zhuǎn)移到另一個(gè)應(yīng)用程序關(guān)聯(lián)的主任務(wù)中去。
例如,如果某條 e-mail 信息包含了一個(gè) Web 頁的鏈接,點(diǎn)擊此鏈接將啟動(dòng)一個(gè) Activity 顯示此 Web 頁。 這個(gè) Activity 是由瀏覽器程序定義的,但卻作為 e-mail 任務(wù)的一部分被啟動(dòng)。 如果它重新歸屬于瀏覽器的任務(wù),那么在下次瀏覽器進(jìn)入前臺(tái)時(shí)就會(huì)顯示出來,并且會(huì)在 e-mail 任務(wù)再次回到前臺(tái)時(shí)消失。
Activity 的 affinity 由 taskAffinity 屬性定義。 任務(wù)的 affinity 由根 Activity 的 affinity 確定。 然而,根據(jù)規(guī)定,根 Activity 總是位于 affinity 同名的任務(wù)中。 因?yàn)橐浴皊ingleTask”和“singleInstance" 模式啟動(dòng)的 Activity 只能位于任務(wù)的根部, 所以 Activity 的重新歸屬僅限于“standard”和“singleTop”啟動(dòng)模式。 (請(qǐng)參閱 launchMode 屬性。)
android:alwaysRetainTaskState
系統(tǒng)是否一直維持 Activity 所屬任務(wù)的狀態(tài) —“true”表示是,“false”表示允許系統(tǒng)在特定情況下重啟任務(wù)。 默認(rèn)值是“false”。 本屬性只對(duì)任務(wù)的根 Activity 有效,其他 Activity 都忽略本屬性。
通常,在用戶從主屏幕(Home Screen)重新運(yùn)行應(yīng)用程序時(shí),系統(tǒng)有時(shí)會(huì)清理任務(wù)(清除任務(wù)棧中根 Activity 以上的所有 Activity)。 執(zhí)行此操作的典型情況是:用戶有段時(shí)間(比如30分鐘)沒有訪問該任務(wù)了。
然而,一旦本屬性設(shè)為“true”,則不論用戶位于何處,將總是返回任務(wù)的最后狀態(tài)。 舉例來說,這對(duì)瀏覽器就很有用,Web 瀏覽器這類應(yīng)用需要保持很多狀態(tài)(諸如多個(gè)已打開的頁面),用戶不期望這些狀態(tài)馬上消失。
android:clearTaskOnLaunch
每次從主屏幕重新執(zhí)行程序時(shí),是否將任務(wù)中除根 Activity 以外的所有 Activity 都清除 — “true”表示總是清除至根 Activity,“false”則不清除。 默認(rèn)值是“false”。 本屬性只對(duì)啟動(dòng)新任務(wù)的 Activity(根 Activity)有效,其他 Activity 都忽略本屬性。
如果此值為“true”,則每當(dāng)用戶再次啟動(dòng)任務(wù)時(shí)都會(huì)進(jìn)入根 Activity, 無論之前在此任務(wù)中做過什么操作,也無論上次是用 Back 還是 Home 鍵離開任務(wù)的。 如果此值為“false”,那么在某些情況下也許還會(huì)清理任務(wù)(請(qǐng)參閱 alwaysRetainTaskState屬性),但并不是每次都會(huì)執(zhí)行。
例如,假設(shè)用戶從主屏幕啟動(dòng)了 Activity P,又從 P 轉(zhuǎn)到 Activity Q。 接下來用戶按下了 Home 鍵,然后再回到 Activity P 。 通常,用戶將會(huì)看到 Activity Q,因?yàn)樵?P 的任務(wù)里最后操作的就是 Q。 然而,如果 P 把本屬性設(shè)為“true”,則用戶按下 HOME 鍵時(shí)所有在它之上的 Activity(本例中是Q)都會(huì)被清除,任務(wù)將進(jìn)入后臺(tái)。 因此用戶在下次返回該任務(wù)時(shí)就只會(huì)看到 P 了。
如果本屬性和 allowTaskReparenting 都設(shè)為“true”,那么所有可改變?nèi)蝿?wù)歸屬的 Activity 都會(huì)轉(zhuǎn)移到具有相同 affinity 的任務(wù)中去,其余的 Activity 都將如上所述被清除。
android:configChanges
列出 Activity 在變化時(shí)將會(huì)自行處理的配置參數(shù)。 默認(rèn)情況下,如果運(yùn)行時(shí)配置發(fā)生了變化, Activity 會(huì)被關(guān)閉并重啟。 但在本屬性中聲明配置參數(shù)將會(huì)阻止 Activity 的重啟,Activity 將會(huì)保持運(yùn)行,且會(huì)調(diào)用其 onConfigurationChanged()方法。
注意: 請(qǐng)盡量避免使用本屬性,這只能用作最后的手段。 關(guān)于如何正確處理配置變化引起的重啟,詳情請(qǐng)參閱 處理運(yùn)行時(shí)配置的變化。
下面列出本屬性可填入的值,多個(gè)值之間用“|”分隔 — 例如“l(fā)ocale|navigation|orientation”。
|"mcc"| IMSI 移動(dòng)國家代碼(MCC)發(fā)生改變 — 檢測到 SIM 卡并更新了 MCC。|
|"mnc"| IMSI移動(dòng)網(wǎng)絡(luò)代碼(MNC)發(fā)生改變——檢測到 SIM 卡并更新了 MNC。|
|"locale"| 地區(qū)發(fā)生改變——用戶選擇了新的語言(用于文本顯示)。|
|"touchscreen" |觸摸屏發(fā)生改變(通常不可能發(fā)生)。|
|"keyboard"| 鍵盤發(fā)生改變 — 比如用戶插入了外接鍵盤。|
|"keyboardHidden" |鍵盤功能發(fā)生改變 — 比如用戶讓硬鍵盤顯示出來。|
|"navigation"| 導(dǎo)航手段(軌跡球/D-Pad)發(fā)生了改變(通常不可能發(fā)生)。|
|"screenLayout"| 屏幕布局發(fā)生了改變 — 可能是由于激活了其他顯示屏。|
|"fontScale" |字體縮放倍數(shù)發(fā)生了改變 — 用戶選擇了新的全局字體大小。|
|"uiMode" |用戶界面模式發(fā)生了改變 — 可能是由于用戶把設(shè)備放進(jìn)桌面/車用底座里,或者是變成了夜間模式。 請(qǐng)參閱 UiModeManager 。自API 級(jí)別 8 開始加入。|
|"orientation" |屏幕方向發(fā)生了改變 — 用戶旋轉(zhuǎn)了設(shè)備。 注意: 如果應(yīng)用程序的目標(biāo)版本是 API 級(jí)別 13 以上的話(由 minSdkVersion 和 targetSdkVersion 屬性定義),且須同時(shí)聲明“screenSize" 參數(shù),因?yàn)樵O(shè)備在橫向/豎向切換時(shí) screenSize 參數(shù)也會(huì)發(fā)生改變。
|
|"screenSize" |當(dāng)前可用的屏幕尺寸發(fā)生改變。 這表示當(dāng)前可用的屏幕大小發(fā)生了改變,與當(dāng)前屏幕長寬比例有關(guān),因此這會(huì)在用戶改變了縱橫方向時(shí)發(fā)生。 不過,如果用戶程序的目標(biāo)版本是 API 級(jí)別 12 以下時(shí), Activity 將總是自行處理本參數(shù)的變化 (即使在 Android 3.2 以上版本中運(yùn)行,本參數(shù)的變化也不會(huì)導(dǎo)致 Activity 的重啟)。自 API 級(jí)別 13 開始加入。|
|"smallestScreenSize" |屏幕的物理尺寸發(fā)生了改變。 這種變化與屏幕的方向無關(guān),因此只會(huì)在屏幕真實(shí)的物理大小發(fā)生變化時(shí)才會(huì)發(fā)生,比如切換到外接顯示器。 本參數(shù)的變化和 smallestWidth 參數(shù) 的變化相呼應(yīng)。 不過,如果應(yīng)用程序的目標(biāo)版本是 API 級(jí)別 12 以下, 則 Activity 將總是自行處理本參數(shù)的變化 (即使在 Android 3.2 以上版本中運(yùn)行,本參數(shù)的變化也不會(huì)導(dǎo)致 Activity 的重啟)。自 API 級(jí)別 13 開始加入。|
|"layoutDirection" |Layout 的方向放生了改變。 例如,從左到右(LTR)變成了從右到左(RTL)。 自 API 級(jí)別 17 開始加入。|
所有以上參數(shù)的改變都會(huì)影響到應(yīng)用程序引用的資源值。 因此在調(diào)用 onConfigurationChanged() 時(shí),通常需要重新讀取一下所有的資源(包括 View Layout、drawable 等等),以便正確應(yīng)對(duì)參數(shù)的變化。
android:enabled
Activity 能否被系統(tǒng)實(shí)例化 — “true”表示可以,“false”表示不允許。 默認(rèn)值是“true”。
<application> 元素?fù)碛凶约旱?enabled 屬性,它適用于應(yīng)用程序中所有的組件,包括 Activity。 系統(tǒng)要能夠?qū)嵗?Activity , < application > 和< activity >的 enabled 屬性都必須設(shè)為“true”(這也都是默認(rèn)值)。 只要其中有一個(gè)是“false”, Activity 就不能被實(shí)例化。
android:excludeFromRecents
Activity 是否排除在用戶最近訪問應(yīng)用程序的列表(“recent apps”)之外 。 也就是說,如果本 Activity 是新任務(wù)中的根 Activity,則本屬性確定了該任務(wù)是否不出現(xiàn)在最近應(yīng)用程序列表中。 如果要排除在列表外,就設(shè)為“true”。 如果要包含在列表中,則設(shè)為“false”。 默認(rèn)值是“false”。
android:exported
Activity 是否能被其他應(yīng)用程序的組件啟動(dòng) —“true”表示可以,“false”表示不能。 如果設(shè)為“false”,那么 Activity 僅能被本應(yīng)用程序或用戶ID相同的應(yīng)用程序的組件啟動(dòng)。
默認(rèn)值取決于 Activity 是否包含 Intent 過濾器。 如果不存在過濾器,則意味著 Activity 只能通過指定準(zhǔn)確的類名來啟動(dòng)。 這表示 Activity 僅限于應(yīng)用程序內(nèi)部使用(因?yàn)槠渌麘?yīng)用程序無法知道它的類名)。 在這種情況下,默認(rèn)值是“false”。 另一方面,只要存在一個(gè)以上的過濾器,就意味著 Activity 愿意被外部啟動(dòng),這時(shí)默認(rèn)值就是“true”。
本屬性并不是限制 Activity 向其他應(yīng)用程序開放的唯一手段。 你還可以用權(quán)限來限制外部對(duì)象對(duì) Activity 的啟動(dòng)(請(qǐng)參閱 permission 屬性)。
android:finishOnTaskLaunch
每當(dāng)用戶再次啟動(dòng)任務(wù)時(shí)(在主屏幕上選擇該任務(wù)),已存在的 Activity 實(shí)例是否應(yīng)該關(guān)閉 — “true”表示需要關(guān)閉,“false”表示不要關(guān)閉。 默認(rèn)值是“false”。
如果本屬性和 allowTaskReparenting 都設(shè)為“true”,則本屬性優(yōu)先。 Activity 的 affinity 將被忽略。 Activity 將不會(huì)改變歸屬的任務(wù),而是被銷毀。
android:hardwareAccelerated
是否為本 Activity 開啟硬件加速渲染功能 —“true”表示開啟,“false”表示關(guān)閉。 默認(rèn)值是“false”。
自 Android 3.0 開始,應(yīng)用程序可以使用硬件加速的 OpenGL 渲染器來改善很多常用 2D 圖形操作的性能。 當(dāng)硬件加速渲染開啟時(shí),大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 內(nèi)的操作都會(huì)被加速。 即使應(yīng)用程序沒有顯式調(diào)用系統(tǒng) OpenGL 庫,這仍能使動(dòng)畫更加平滑、屏幕滾動(dòng)也更加平順、整體響應(yīng)性能獲得改善。 因?yàn)閱⒂糜布铀俟δ苄枰嗟馁Y源,應(yīng)用程序?qū)⑾母嗟?RAM 。
請(qǐng)注意,并非所有的 OpenGL 2D 操作都會(huì)被加速。 如果開啟了硬件加速渲染功能,請(qǐng)對(duì)應(yīng)用程序進(jìn)行測試,以確保渲染的正常使用。
android:icon
代表 Activity 的圖標(biāo)。 當(dāng)需要在屏幕上用圖標(biāo)來表示 Activity 時(shí),將會(huì)顯示本圖標(biāo)。 例如,在桌面(launcher)窗口中顯示用于啟動(dòng)任務(wù)的 Activity 圖標(biāo)。 圖標(biāo)常常伴隨著一個(gè)文本標(biāo)簽(請(qǐng)參閱android:label屬性)。
本屬性必須設(shè)為對(duì) drawable 資源的引用,資源內(nèi)包含了圖片的定義。 如果未設(shè)置本屬性,則用作為全局設(shè)置的應(yīng)用程序圖標(biāo)代替(請(qǐng)參閱 < application > 元素的 icon 屬性)。
Activity 的圖標(biāo) — 無論是用本屬性還是用 < application > 元素的屬性設(shè)置的 — 都將同時(shí)作為 Activity 所有 Intent 過濾器的缺省圖標(biāo)(請(qǐng)參閱 < intent-filter > 元素的 icon 屬性。
android:label
供用戶閱讀的 Activity 的 Label。 當(dāng)必須向用戶標(biāo)識(shí) Activity 時(shí),本 Label 將顯示在屏幕上。 Label 常常是跟在 Activity 圖標(biāo)后面顯示的。
如果未設(shè)置本屬性,則用作為全局設(shè)置的應(yīng)用程序 Label 代替(請(qǐng)參閱 <application> 元素的 label 屬性)。
Activity 的 Label — 無論是用本屬性還是用<application> 元素的屬性設(shè)置的 — 都將作為 Activity 所有 Intent 過濾器的缺省 Label(請(qǐng)參閱 <intent-filter>元素的 label 屬性)。
Label 應(yīng)設(shè)為一個(gè)對(duì)字符串資源的引用,這樣就能像其他用戶界面內(nèi)的字符串一樣對(duì)其進(jìn)行本地化。 不過,考慮到開發(fā)時(shí)的便利性,也可以直接將其設(shè)為字符串。
android:launchMode
指明 Activity 的啟動(dòng)模式。 當(dāng)調(diào)用 Activity 來處理 Intent 時(shí), Activity 的工作模式與四種標(biāo)志(FLAG_ACTIVITY_*常量有關(guān),這些常量在 Intent 中定義。它們是:
“standard”
“singleTop”
“singleTask”
“singleInstance”
缺省模式是“standard”。
如下表所述,這些模式歸為兩組: “standard”和“singleTop”模式的 Activity 為一組, “singleTask”和“singleInstance”模式的 Activity 為另一組。 用“standard”或“singleTop”模式啟動(dòng)的 Activity 可以被實(shí)例化多次。 這些實(shí)例可以屬于任何一個(gè)任務(wù),并且可以處于 Activity 棧的任何位置。 典型情況下,它們被任務(wù)通過調(diào)用 startActivity() 啟動(dòng)并置入其中(除非 Intent 對(duì)象包含 FLAG_ACTIVITY_NEW_TASK 標(biāo)志,這種情況下會(huì)選取其他任務(wù) — 請(qǐng)參閱 taskAffinity 屬性)。
相反,“singleTask”和“singleInstance”模式的 Activity 只能啟動(dòng)一個(gè)任務(wù)。 它們總是位于 Activity 棧的根部。 不僅如此,設(shè)備同時(shí)只保留一個(gè) Activity 實(shí)例 — 只啟動(dòng)一個(gè)任務(wù)。
“standard”和“singleTop”模式之間只有一點(diǎn)不同: 每次有“standard”模式 Activity 的 Intent 發(fā)生時(shí), 都會(huì)新建一個(gè) Activity 類的實(shí)例來響應(yīng)該 Intent。 每個(gè)實(shí)例只負(fù)責(zé)處理一個(gè) Intent 。 同理,singleTop 模式 Activity 的新實(shí)例也可以用于處理新發(fā)生的 Intent 。 不過,如果目標(biāo)任務(wù)的棧頂已經(jīng)存在該 Activity 的實(shí)例了,則此實(shí)例將收到這個(gè)新 Intent(在 onNewIntent() 里);而不會(huì)再創(chuàng)建新的實(shí)例了。 在其他情況下 — 比如目標(biāo)任務(wù)中已存在“singleTop”模式的 Activity 但卻不是在棧頂,或者在棧頂?shù)珔s不是位于目標(biāo)任務(wù)中 — 還是會(huì)創(chuàng)建新的實(shí)例并壓入棧頂。
“singleTask”和“singleInstance”模式之間也只有一點(diǎn)差別: “singleTask”模式的 Activity 允許其他 Activity 加入它的任務(wù)。 它總是處于任務(wù)的根部,而其他 Activity (必須是“standard”和“singleTop”模式的 Activity )可以在它的任務(wù)中啟動(dòng)。 相反,“singleInstance”模式的 Activity 就不允許其他 Activity 加入它的任務(wù),它是任務(wù)里唯一的 Activity 。 如果它啟動(dòng)了其他 Activity,也會(huì)被放入另一個(gè)任務(wù)中 — 類似 Intent 中設(shè)置了 FLAG_ACTIVITY_NEW_TASK 標(biāo)志的情況。
| 使用場合 | 啟動(dòng)模式 | 多個(gè)實(shí)例? | 注釋 |
|---|---|---|---|
| 正常啟動(dòng)大多數(shù) Activity | "standard" | 是 默認(rèn)值。 | 系統(tǒng)總是在目標(biāo)任務(wù)中創(chuàng)建 Activity 的新實(shí)例并把 Intent 傳入。 |
| "singleTop" | 有條件的 | 如果目標(biāo)任務(wù)的棧頂已經(jīng)存在本 Activity 的實(shí)例,則系統(tǒng)通過調(diào)用 onNewIntent() 方法傳入 Intent,而不再創(chuàng)建 Activity 的新實(shí)例。 | |
| 特殊啟動(dòng)模式(不建議在正常情況下使用) | "singleTask" | 否 | 系統(tǒng)在一個(gè)新任務(wù)的根部創(chuàng)建 Activity 并傳入 Intent 。 不過,如果本 Activity 的實(shí)例已經(jīng)存在,系統(tǒng)將通過調(diào)用它的 onNewIntent() 方法來傳入 Intent,而不再創(chuàng)建新的實(shí)例。 |
| "singleInstance" | 否 | 除了系統(tǒng)不在實(shí)例所屬任務(wù)中啟動(dòng)其他 Activity 以外,與“singleTask"”相同。 本 Activity 總是其任務(wù)中的唯一成員。 |
如上表所述,standard是默認(rèn)模式,適用于大多數(shù)類型的 Activity 。 SingleTop 也是常用的啟動(dòng)模式,適用于多種 Activity 。 其他模式 — singleTask 和 singleInstance — 對(duì)于大多數(shù)應(yīng)用程序而言并不適用, 因?yàn)樗鼈兊挠脩艚换ツJ脚c其他多數(shù)應(yīng)用大不相同,很可能會(huì)讓用戶感到陌生。
無論選擇了哪種啟動(dòng)模式,都要確保對(duì) Activity 的可用性進(jìn)行測試,包括 Activity 啟動(dòng)過程、從其他 Activity 和任務(wù)中用 Back 鍵返回的過程。
關(guān)于啟動(dòng)模式及其與 Intent 標(biāo)志位的關(guān)系,詳情請(qǐng)參閱文檔 任務(wù)和 Back 棧。
android:multiprocess
是否可以把 Activity 的實(shí)例放入啟動(dòng)它的組件所在的進(jìn)程中。 — “true”表示可以,“false” 表示不可以。 默認(rèn)值是“false”。
通常情況下, Activity 的新實(shí)例會(huì)放入應(yīng)用程序指定的進(jìn)程中,所以 Activity 的所有實(shí)例都運(yùn)行在同一個(gè)進(jìn)程中。 然而,如果本屬性設(shè)為“true”, Activity 的進(jìn)程就可以在多個(gè)進(jìn)程中運(yùn)行, 這就允許系統(tǒng)在任何需要用到該 Activity 的進(jìn)程中(權(quán)限允許時(shí))創(chuàng)建實(shí)例,盡管這也許永遠(yuǎn)都用不到。
android:name
實(shí)現(xiàn) Activity 的類名, 也即 Activity 的子類。 本屬性值應(yīng)該是一個(gè)完全限定的類名(比如“com.example.project.ExtracurricularActivity”)。 不過作為簡稱,如果名稱的首字符是句點(diǎn)(比如“.ExtracurricularActivity”),那么 < manifest > 元素中設(shè)置的包名會(huì)自動(dòng)加到前面。
應(yīng)用程序一經(jīng)發(fā)布,就 不應(yīng)該修改本名稱 (除非設(shè)置了android:exported="false")。
沒有默認(rèn)值,必須指定本屬性。
android:noHistory
當(dāng)用戶離開且屏幕上已看不到 Activity 時(shí),是否要從棧中清除并結(jié)束(調(diào)用其 finish() 方法)它 — “true”表示需要結(jié)束,“false”表示不要結(jié)束。 默認(rèn)值是“false”。
此值為“true”意味著 Activity 不會(huì)留下歷史記錄。 任務(wù)不會(huì)在棧中保留此 Activity ,因此用戶也將無法返回它。
本屬性自 API 級(jí)別 3 開始加入。
android:parentActivityName
定義本 Activity 的父 Activity。 本屬性值必須與父 Activity 的類名一致,由 <activity> 元素的 android:name 屬性對(duì)應(yīng)。
當(dāng)用戶點(diǎn)擊 ActionBar 的 Up 按鈕時(shí),系統(tǒng)將讀取本屬性以確定應(yīng)該打開的 Activity 。 利用本屬性,系統(tǒng)還可以通過 TaskStackBuilder 生成 Activity 的 back 棧。
為了支持 API 4~16 版本的系統(tǒng),你也可以通過 定義了 "android.support.PARENT_ACTIVITY" 的 <meta-data> 元素來聲明父 Activity:
android:name="com.example.app.ChildActivity"
android:label="@string/title_child_activity"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
< !-- Parent activity meta-data to support API level 4+ -- >
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.app.MainActivity" / >```
關(guān)于聲明父 Activity 以支持 Up 導(dǎo)航的更多信息,請(qǐng)閱讀 提供 Up 導(dǎo)航。
本屬性自 API 級(jí)別 16 開始加入。
**android:permission**
要啟動(dòng)本 Activity 或者要用本 Activity 響應(yīng) Intent ,客戶端必須擁有的權(quán)限名稱。 如果 startActivity() 或 startActivityForResult() 的調(diào)用者沒有被授權(quán),那么它的 Intent 將不會(huì)傳遞給 Activity。
如果未設(shè)置本屬性,則會(huì)把 < application > 元素的 permission 屬性應(yīng)用到本 Activity 上。 如果這兩個(gè)屬性都沒有設(shè)置,那么 Activity 將不受權(quán)限保護(hù)。
關(guān)于權(quán)限的詳細(xì)信息,請(qǐng)參閱介紹一文中的 權(quán)限 章節(jié)和另一篇文檔 安全和權(quán)限。
**android:process**
將要運(yùn)行 Activity 的進(jìn)程名稱。 通常,同一個(gè)應(yīng)用程序的所有組件都會(huì)運(yùn)行在應(yīng)用啟動(dòng)時(shí)的默認(rèn)進(jìn)程中,你不需要用到本屬性。 不過必要的時(shí)候,可以用本屬性覆蓋缺省的進(jìn)程名稱,你就可以讓應(yīng)用程序的多個(gè)組件分開運(yùn)行于多個(gè)進(jìn)程中。
如果賦予本屬性的名稱是以冒號(hào)(':')開頭的,那么在必要的時(shí)候會(huì)新建一個(gè)屬于應(yīng)用程序的私有進(jìn)程, Activity 將運(yùn)行于該進(jìn)程中。 如果進(jìn)程名稱以小寫字母開頭,則 Activity 將運(yùn)行于一個(gè)以該名稱命名的全局進(jìn)程中,并賦予應(yīng)有的權(quán)限。 這就允許不同應(yīng)用程序的組件共享同一個(gè)進(jìn)程,以|減少資源的占用。
< application > 元素的 process 屬性可以為全體組件設(shè)置默認(rèn)的進(jìn)程名稱。
**android:screenOrientation**
Activity 在設(shè)備上的顯示方向。
屬性值可以設(shè)為以下字符串之一:
|值|說明|
| -------- | ------- |
| "unspecified" | 默認(rèn)值。由系統(tǒng)選擇方向。選擇的策略、進(jìn)而根據(jù)特定的內(nèi)容做出的選擇,可能因不同的設(shè)備而各不相同。|
|"behind" |與 Activity 棧中下方相鄰的 Activity 方向相同。|
|"landscape" | 橫向(寬度大于高度)。|
|"portrait" | 縱向(高度大于寬度)。|
|"reverseLandscape" | 與正常方向相反的橫向。自 API 級(jí)別 9 開始加入。|
|"reversePortrait" | 與正常方向相反的縱向。自 API 級(jí)別 9 開始加入。|
|"sensorLandscape" | 橫向,但基于設(shè)備傳感器,既可能是正常橫向也可能是反向橫向。自 API 級(jí)別 9 開始加入。|
|"sensorPortrait" | 縱向,但基于設(shè)備傳感器,既可能是正??v向也可能是反向縱向。自 API 級(jí)別 9 開始加入。|
|"userLandscape" | 橫向,但基于設(shè)備傳感器和用戶的傳感器設(shè)置,既可能是正常橫向也可能是反向橫向。 如果用戶鎖定了基于傳感器的旋轉(zhuǎn),則本屬性與landscape作用一樣,否則就與sensorLandscape一樣。 自 API 級(jí)別 18 開始加入。|
|"userPortrait" | 縱向,但基于設(shè)備傳感器和用戶的傳感器設(shè)置,既可能是正常縱向也可能是反向縱向。 如果用戶鎖定了基于傳感器的旋轉(zhuǎn),則本屬性與portrait作用一樣,否則就與sensorPortrait一樣。 自 API 級(jí)別 18 開始加入。|
|"sensor" | 由設(shè)備的方向傳感器來確定方向。 顯示的方向取決于用戶如何放置設(shè)備,當(dāng)用戶旋轉(zhuǎn)設(shè)備時(shí)就會(huì)發(fā)生改變。 不過,有些設(shè)備默認(rèn)情況下無法旋轉(zhuǎn)至全部四個(gè)方向。 要允許使用全部4個(gè)方向,請(qǐng)用“ "fullSensor"”屬性。|
|"fullSensor" | 由設(shè)備的方向傳感器確定為四個(gè)方向中的一個(gè)。 這類似于“sensor”,只是可以是四個(gè)方向中的任意一個(gè),而不論設(shè)備正常情況如何 (比如,有些設(shè)備通常不會(huì)使用橫向反向和縱向反向,但這個(gè)屬性可以啟用)。 自 API 級(jí)別 9 開始加入。|
|"nosensor" | 不根據(jù)物理上的方向傳感器來確定方向。 傳感器將會(huì)被忽略,因此用戶移動(dòng)設(shè)備時(shí)顯示方式不會(huì)旋轉(zhuǎn)。 除此之外,系統(tǒng)使用與“unspecified”屬性相同的原則來選擇方向。|
|"user" | 用戶當(dāng)前所用的方向。|
|"fullUser" | 如果用戶鎖定了基于傳感器的旋轉(zhuǎn),本屬性與user的作用相同。 否則,與fullSensor的作用相同,允許使用四個(gè)方向。 自 API 級(jí)別 18 開始加入。|
|"locked" | 鎖定為當(dāng)前方向,無論當(dāng)前是什么方向。自 API 級(jí)別 18 開始加入。|
>注意: 一旦聲明了橫向或縱向值,則視為對(duì) Activity 運(yùn)行的方向有強(qiáng)制要求。 這時(shí),此聲明值將啟用 Google Play 之類服務(wù)的過濾功能,于是應(yīng)用程序就只能在支持所需方向的設(shè)備上使用。 比如,如果聲明了“l(fā)andscape”、“reverseLandscape”或者“sensorLandscape”, 則應(yīng)用程序?qū)⒅荒茉谥С謾M向顯示的設(shè)備上使用。 不過,你還可以用 < uses-feature > 元素來顯式聲明應(yīng)用程序同時(shí)需要橫向和縱向模式。 這樣就會(huì)取消 Google Play(以及其他提供過濾的服務(wù))的過濾行為, 即使設(shè)備僅支持特定的方向,系統(tǒng)也不會(huì)對(duì)是否安裝應(yīng)用程序進(jìn)行控制了。
**android:stateNotNeeded**
未經(jīng)保存狀態(tài), Activity 是否可被殺死并能夠成功重啟 —“true”表示可以不管之前的狀態(tài)而被重啟, “false” 表示需要保存之前的狀態(tài)。 默認(rèn)值是“false”。
通常,在為了騰出資源而臨時(shí)關(guān)閉 Activity 之前,將會(huì)調(diào)用 onSaveInstanceState() 方法。該方法把當(dāng)前 Activity 的狀態(tài)存儲(chǔ)到一個(gè) Bundle 對(duì)象中,重新啟動(dòng) Activity 時(shí)該 Bundle 對(duì)象將會(huì)被傳給 onCreate() 。如果本屬性設(shè)為“true”,則onSaveInstanceState() 可能就不會(huì)被調(diào)用,傳入onCreate() 的將為 null 而非 Bundle — 就像第一次啟動(dòng) Activity 一樣。
本屬性設(shè)為“true”將確保 Activity 能未經(jīng)保存狀態(tài)而被重啟。 比如,顯示主屏幕的 Activity 就利用本屬性來保證由于某種原因崩潰時(shí)不會(huì)被清除。
**android:taskAffinity**
帶有 affinity 的 Activity 所處的任務(wù)。 擁有相同 affinity 的 Activity 在概念上屬于同一個(gè)任務(wù)(從用戶的角度來看被視為同一個(gè)應(yīng)用程序)。 任務(wù)的 affinity 取決于其根 Activity 的 affinity。
affinity 決定兩件事情 — Activity 要重新歸屬于的任務(wù)(參閱 allowTaskReparenting 屬性)和通過 FLAG_ACTIVITY_NEW_TASK 標(biāo)志啟動(dòng)的 Activity 所處的任務(wù)。
默認(rèn)情況下,同一個(gè)應(yīng)用程序中的所有 Activity 都擁有相同的 affinity。 通過設(shè)置本屬性,可以把 Activity 分為不同的組,甚至可以把不同應(yīng)用程序的 Activity 放入同一個(gè)任務(wù)里。 要把 Activity 設(shè)置為不帶 affinity ,也即不屬于任何任務(wù),只要將本屬性設(shè)為空字符串即可。
如果未設(shè)置本屬性,那么 Activity 將會(huì)繼承應(yīng)用程序的 affinity 設(shè)置(請(qǐng)參閱 < application > 元素的 taskAffinity 屬性)。應(yīng)用程序默認(rèn)的 affinity 名稱是由 < manifest > 元素設(shè)置的包名稱。
**android:theme**
這是一個(gè)對(duì)樣式資源的引用,該資源定義了 Activity 的整體主題(theme)。 Activity 將自動(dòng)適用本屬性設(shè)置的主題。(請(qǐng)參閱 setTheme() ),并可能會(huì)觸發(fā) Activity 的“啟動(dòng)”動(dòng)畫效果(為了讓 Activity 看上去更美觀協(xié)調(diào))。
如果未設(shè)置本屬性,Activity 將會(huì)繼承作為全局設(shè)置的應(yīng)用程序的主題 — 參見 元素的 theme 屬性。如果應(yīng)用程序也未設(shè)置該屬性,則使用默認(rèn)的系統(tǒng)主題。 詳情請(qǐng)參閱樣式和主題開發(fā)指南。
**android:uiOptions**
用于 Activity 用戶界面的附加選項(xiàng)。
只能是以下值之一。
| 值 | 說明 |
| ----- | -------- |
|"none"|沒有附加選項(xiàng)。這是默認(rèn)值。|
|"splitActionBarWhenNarrow" |當(dāng)橫向空間不足時(shí)(比如手機(jī)處于縱向模式時(shí)),在屏幕底部增加一個(gè)導(dǎo)航條,顯示 ActionBar 中的 Action 項(xiàng)。Action Bar 將拆分為頂部和底部導(dǎo)航條,而不是只在屏幕頂部顯示少量 Action 項(xiàng)。 這樣就保證了合理的可用空間,不僅可容納 Action Bar,還可以在頂部顯示導(dǎo)航條和標(biāo)題。 菜單項(xiàng)不會(huì)拆開在兩個(gè)導(dǎo)航條顯示,而一定是放在一起顯示的。|
關(guān)于 Action Bar 的更多信息,請(qǐng)參閱 Action Bar 開發(fā)指南。
本屬性自 API 級(jí)別 14 開始引入。
**android:windowSoftInputMode**
Activity 主窗口如何與顯示軟鍵盤的窗口進(jìn)行交互。 本屬性影響兩件事情:
軟鍵盤的狀態(tài) — 當(dāng) Activity 獲得用戶焦點(diǎn)時(shí),是隱藏還是顯示。
Activity 主窗口的調(diào)整 — 是否縮小窗口以便為軟鍵盤騰出空間,或者在軟鍵盤覆蓋部分窗口時(shí)移動(dòng)顯示內(nèi)容,以便顯示當(dāng)前的輸入焦點(diǎn)。
本設(shè)置只能是下表所列值之一,或者是一個(gè)“state...”值與一個(gè)“adjust...”值的組合。 如果在每個(gè)組中設(shè)置多于一個(gè)的值 — 比如多個(gè)“state...”值 — 則會(huì)導(dǎo)致不可預(yù)知的結(jié)果。 每個(gè)值之間用豎線(|)分隔。 例如:
```< activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >```
以下值將覆蓋主題中的相關(guān)設(shè)置
(“stateUnspecified”和“adjustUnspecified”除外)
| 值 | 說明 |
| ----- | -------- |
|"stateUnspecified"|軟鍵盤的狀態(tài)(隱藏或顯示)未指定。由系統(tǒng)選擇合適的狀態(tài),或由主題中的設(shè)置來決定。這是軟鍵盤的默認(rèn)設(shè)置。|
|"stateUnchanged"|當(dāng) Activity 進(jìn)入前臺(tái)時(shí),軟鍵盤保持之前的狀態(tài)不變,無論隱藏還是顯示。|
|"stateHidden"| 當(dāng)用戶選中本 Activity 時(shí)隱藏軟鍵盤 — 也即用戶確實(shí)是前進(jìn)到本 Activity 時(shí),而不是離開其他 Activity 回退過來時(shí)。|
|"stateAlwaysHidden" |當(dāng) Activity 的主窗口獲得輸入焦點(diǎn)時(shí),總是隱藏軟鍵盤。|
|"stateVisible" |一般情況下顯示軟鍵盤(當(dāng)用戶進(jìn)入 Activity 主窗口時(shí))。|
|"stateAlwaysVisible"| 當(dāng)用戶選中本 Activity 時(shí)顯示軟鍵盤 — 也即用戶確實(shí)是前進(jìn)到本 Activity 時(shí),而不是離開其他 Activity 回退過來時(shí)。|
|"adjustUnspecified"| 未指定是否調(diào)整:Activity 主窗口是否要為軟鍵盤留出空間而改變大小、還是在軟鍵盤覆蓋部分窗口時(shí)或移動(dòng)顯示內(nèi)容以便顯示當(dāng)前輸入焦點(diǎn)。 根據(jù)窗口中顯示的內(nèi)容是否具有可滾動(dòng)布局的 View,系統(tǒng)將自動(dòng)選擇其中一種模式來處理。 如果是這類 View 則窗口將會(huì)縮小,因?yàn)闈L動(dòng)布局可以在較小的區(qū)域內(nèi)顯示完整的內(nèi)容。這是主窗口的默認(rèn)設(shè)置。|
|"adjustResize" |Activity 的主窗口總是會(huì)改變大小,以便為軟鍵盤騰出屏幕空間。|
|"adjustPan"| Activity 的主窗口不會(huì)為軟鍵盤留出空間而改變大小,而是自動(dòng)移動(dòng)窗口里的顯示內(nèi)容,使得當(dāng)前輸入焦點(diǎn)不會(huì)被鍵盤擋住,用戶也一直能夠看見輸入的內(nèi)容。 一般情況下更推薦使用 adjustResize 模式,因?yàn)橛脩艨赡苄枰c被遮擋內(nèi)容交互,進(jìn)而關(guān)閉軟鍵盤。
本屬性自 API 級(jí)別 3 開始引入
引入自:
noHistory 和 windowSoftInputMode 自 API 級(jí)別 3 開始引入,其余自 API 級(jí)別 1 開始引入。
參閱:
``` < application >```
```<activity-alias>```
###<intent-filter>
我們可以看到在activity、receiver、service都包含了```<intent-filter>```標(biāo)簽,它有什么作用呢?
Intent Filter其實(shí)就是 用來注冊(cè) Activity 、 Service 和 Broadcast Receiver 具有能在某種數(shù)據(jù)上執(zhí)行一個(gè)動(dòng)作的能力。
使用 Intent Filter ,應(yīng)用程序組件告訴 Android ,它們能為其它程序的組件的動(dòng)作請(qǐng)求提供服務(wù),包括同一個(gè)程序的組
件、本地的或第三方的應(yīng)用程序。
它至少要包含一個(gè)```<action>```,代表了一個(gè)動(dòng)作
(1) 如果```<intent-filter>```中沒有包含任何Action類型,那么無論什么Intent請(qǐng)求都無法和這條```<intent-filter>```匹配;
(2) 反之,如果Intent請(qǐng)求中沒有設(shè)定Action類型,那么只要```<intent-filter>```中包含有Action類型,這個(gè)Intent請(qǐng)求就將順利地通過```<intent-filter>```的行為測試。
可以包含 ```<category>```、```<data>```標(biāo)簽,分別代表類別匹配和數(shù)據(jù)匹配。
詳情參考:[http://blog.csdn.net/wuwenxiang91322/article/details/7671593](http://blog.csdn.net/wuwenxiang91322/article/details/7671593)
##更多
activity里面標(biāo)簽屬性是最多的,其他標(biāo)簽大家可以自行查詢SDK文檔
[http://www.android-doc.com/guide/topics/manifest/manifest-intro.html](http://www.android-doc.com/guide/topics/manifest/manifest-intro.html)
光是一個(gè)AndroidManifest.xml文件涉及到內(nèi)容就如此之多,初學(xué)者想要一下吃個(gè)胖子是不可能的事情,最好的辦法是從最簡單的學(xué)起,遇到不熟悉的標(biāo)簽屬性的時(shí)候才去查詢文檔,筆者對(duì)里面的一些東西也不太熟悉,或者根本就沒有使用過,只有當(dāng)遇到一些問題的時(shí)候才會(huì)去查詢,建議最好不要死記硬背,學(xué)到的時(shí)候才去查詢,并且要結(jié)合具體場景,這樣才能更好的掌握知識(shí)。