【正文】
UI 字符串,你可以將這些字符串翻譯成其他語(yǔ)言并保存在特定的文件夾中。 將資源提供工作同你的源代碼分隔開(kāi)來(lái)最重要的原因之一是能夠使您為不同的設(shè)備配置提供可替換的資源文件。命名為res/drawable/例如,如果你的應(yīng)用程序中包含一個(gè)名為 對(duì)于你的安卓工程里面包含的每一項(xiàng)資源,文件定義動(dòng)畫(huà),菜單,風(fēng)格,顏色,以及 activity 用戶(hù)界面的布局。例如,你應(yīng)該使用 這樣,你的應(yīng)用程序僅對(duì)能夠滿足你的應(yīng)用程序要求的設(shè)備可用。 為你的應(yīng)用程序聲明所有這些要求至關(guān)重要,因?yàn)?,?dāng)你在 API Level 是包含這些usessdk(例如, Android 對(duì)應(yīng)于 API Level 1 , Android 對(duì)應(yīng)于 API Level 9)。 In order to indicate which set of APIs are available, 每個(gè)平臺(tái)版本對(duì)應(yīng)一個(gè)平臺(tái)設(shè)備通常運(yùn)行不同版本的 Android ,比如 Android 或者 Android 。 不同地設(shè)備配置: 有許多硬件或軟件并不全在Android系統(tǒng)的設(shè)備上,比如,一個(gè)照相機(jī)、光線傳感器、某個(gè)版本的 OpenGL,或者屏幕的保真度(fidelity)。如果你的程序需要某特定形式的輸入方式,則你必須在manifes文件中使用usesconfiguration標(biāo)簽來(lái)聲明。小,中,大,超大; 屏幕分辨率類(lèi)型:低分辨率,中分辨率,高分辨率,超高分辨率; 默認(rèn)情況下,你的程序可以兼容所有的屏幕尺寸和分辨率,因?yàn)锳ndroid系統(tǒng)對(duì)你的程序的UI布局和image資源做了適當(dāng)?shù)恼{(diào)整。 下面是一些你在設(shè)計(jì)和開(kāi)發(fā)你的程序時(shí),必須要考慮的關(guān)于設(shè)備的一些重要方面:屏幕大小和分辨率: 為了根據(jù)屏幕的類(lèi)型進(jìn)行分類(lèi),Android定義了兩個(gè)特征:屏幕大小和分辨率。 然而,如果你的程序不需要照相機(jī),你仍可以聲明你需要照相機(jī)。這樣的話,在AndroidMarket卻會(huì)閱讀這些聲明來(lái)幫助通過(guò)通過(guò)自己的設(shè)備搜索軟件的用戶(hù)過(guò)濾軟件。為了防止你的程序被安裝在不能正常運(yùn)行你的程序的較低android系統(tǒng)版本上,通過(guò)在manifest文件中聲明你的程序支持的設(shè)備和軟件,便變得尤其重要起來(lái)。Filter文檔。and 更多關(guān)于創(chuàng)建intentfilter來(lái)對(duì)“發(fā)送”intent響應(yīng)(為了發(fā)送郵件)。filter。declarationponent39。of你可以通過(guò)添加一個(gè)intentfilter元素作為afilters,這些intentfilters進(jìn)行比較實(shí)現(xiàn)的。如果有多個(gè)組件可以執(zhí)行intent中描述的action,這時(shí)用戶(hù)就可以選擇一個(gè)來(lái)執(zhí)行。然而,intents真正強(qiáng)大的地方在與關(guān)于intent的actions的概念。receiver。聲明組件的能力 正如在上面Activatingreceiver既可以在manifest文件中聲明也可以在代碼中動(dòng)態(tài)創(chuàng)建(BroadcastReceiver),并通過(guò)調(diào)用registerReceiver()在系統(tǒng)中注冊(cè)。providers,你沒(méi)有在manifest文件中聲明,那么這些組件將不會(huì)被系統(tǒng)知道,結(jié)果就是你的程序不能運(yùn)行。receiver:receiver標(biāo)簽l content 在activity元素中,android:name屬性用于確定這個(gè)擴(kuò)展自Activity的子類(lèi)的全路徑名,android:label屬性用于標(biāo)示這個(gè)activity的對(duì)于用戶(hù)可見(jiàn)的label。7. 6. /activityandroid:label=string/example_label5. android:name=...3. application2. manifestencoding=utf8?view plaincopy1. ?xml組件聲明 Manifest文件的首要任務(wù)就是通知系統(tǒng)關(guān)于程序中要使用的組件。library。APIs),比如Googlel 聲明該程序需要鏈接(linkl 聲明這個(gè)運(yùn)行這個(gè)程序所需要的最低API版本,這個(gè)可以根據(jù)開(kāi)發(fā)該程序所使用的API版本。你的程序必須在這個(gè)manifest文件聲明用到的所有的組件,并且這個(gè)manifest文件必須在項(xiàng)目的根目錄下。Providers。Filters。andprovider的查詢(xún)操作。l 你可以通過(guò)傳遞一個(gè)Intent給諸如sendBroadcast()、sendOrderedBroadcast()或者sendStickyBroadcast()等方法來(lái)初始化一個(gè)廣播。l 你可以通過(guò)傳遞一個(gè)Intent給startService()來(lái)start一個(gè)service(或者給一個(gè)正在運(yùn)行的service一些新的指令(instructions))。 它們都各自有自己的方法來(lái)激活相應(yīng)的組件:l 你可以通過(guò)傳遞一個(gè)Intent給startActivity()或startActivityForResult()啟動(dòng)一個(gè)activity(或者給他一些新的要做的內(nèi)容)。provider并不是由intent來(lái)激活的(activate)。) 對(duì)于廣播接收者來(lái)說(shuō),intent只是簡(jiǎn)單的定義了要廣播的內(nèi)容(比如,一個(gè)用以表明電池電量很低的廣播僅包含了一個(gè)表明電池電量很低的字符串)。contact并返回給你——這個(gè)返回的intent就包含了一個(gè)指向用戶(hù)選擇的聯(lián)系人的URI)。比如,一個(gè)intent可能會(huì)為一個(gè)activity傳遞一個(gè)請(qǐng)求來(lái)展示一張圖片或者打開(kāi)一個(gè)網(wǎng)頁(yè)。 一個(gè)intent就是一個(gè)Intent對(duì)象,這個(gè)intent定義了一種可以激活(activate)某個(gè)特定組件或者某種特定類(lèi)型的組件,這兩種情況分別對(duì)應(yīng)兩種intent的定義方式或者顯示的或者隱式的。receiver——是由一種叫intent的異步消息來(lái)激活的。具體是這樣的實(shí)現(xiàn)的,為了激活(activate)其他程序中的組件,你必須向系統(tǒng)發(fā)送一個(gè)消息來(lái)詳細(xì)說(shuō)明你要啟動(dòng)其他組件的意圖,這樣系統(tǒng)才會(huì)為你激活這個(gè)組件。 因?yàn)橄到y(tǒng)中的程序運(yùn)行在自己的獨(dú)立進(jìn)程中,并且程序中的文件都有自己的限制其他程序訪問(wèn)的權(quán)限,所以,你的程序不能直接激活其他程序中的組件。所以,不像其他操作系統(tǒng)的中的程序一樣,Android程序沒(méi)有一個(gè)單獨(dú)的入口點(diǎn)(比如沒(méi)有我們常見(jiàn)的main()函數(shù))。 當(dāng)系統(tǒng)啟動(dòng)一個(gè)組件之后,如果這個(gè)組件所在的程序之前沒(méi)有運(yùn)行的話,系統(tǒng)會(huì)自動(dòng)開(kāi)始這個(gè)程序的進(jìn)程,并初始化這個(gè)組件所需要的相關(guān)類(lèi)。當(dāng)拍完之后,拍好的照片甚至?xí)詣?dòng)返回給你的程序。你的程序不需要包含或者鏈接這個(gè)拍照程序。 Android系統(tǒng)設(shè)計(jì)的一個(gè)獨(dú)特方面是任何的一個(gè)程序都可以啟動(dòng)另一程序的組件。 每當(dāng)出現(xiàn)一個(gè)需要被特定組件處理的請(qǐng)求時(shí),Android會(huì)確保那個(gè)組件的應(yīng)用程序進(jìn)程處于運(yùn)行狀態(tài),或在必要的時(shí)候啟動(dòng)它。通知可以用很多種方式來(lái)吸引用戶(hù)的注意力──閃動(dòng)背燈、震動(dòng)、播放聲音等等。 廣播接收器沒(méi)有用戶(hù)界面。 應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對(duì)所有它感興趣的通知信息予以響應(yīng)。很多廣播是源自于系統(tǒng)代碼的──比如,通知時(shí)區(qū)改變、電池電量低、拍攝了一張照片或者用戶(hù)改變了語(yǔ)言選項(xiàng)。l 參閱獨(dú)立的內(nèi)容提供者Content Providers對(duì)象,調(diào)用它的方法作為替代?;?lèi),為其它應(yīng)用程序取用和存儲(chǔ)它管理的數(shù)據(jù)實(shí)現(xiàn)了一套標(biāo)準(zhǔn)方法。數(shù)據(jù)可以存儲(chǔ)于文件系統(tǒng)、SQLite數(shù)據(jù)庫(kù)或其它方式。開(kāi)發(fā)者指導(dǎo)部分了解更多。的子類(lèi),你可以在是一個(gè)實(shí)現(xiàn)了其他組件,比如一個(gè) activity ,為了與該 service 互動(dòng),可以啟動(dòng)或者 綁定它。 service 不提供用戶(hù)界面。 服務(wù)(Services) serviceActivitiesActivity例如,用戶(hù)需要分享一張照片,一個(gè)拍照應(yīng)用程序能夠啟動(dòng)郵件應(yīng)用程序的 activity 。盡管所有 activitie 協(xié)同工作以構(gòu)成郵件應(yīng)用程序的用戶(hù)體驗(yàn),但彼此之間相對(duì)獨(dú)立。代表用戶(hù)界面的一個(gè)獨(dú)立屏幕。共有四種組件類(lèi)型:活動(dòng)(Activities) 一個(gè)你的應(yīng)用程序并沒(méi)有吸納比如說(shuō),如果你的應(yīng)用程序需要一個(gè)圖片卷動(dòng)列應(yīng)用程序組件(Application Components)l 清單文件中聲明組件和應(yīng)用程序所需的設(shè)備功能。l 應(yīng)用程序可以請(qǐng)求訪問(wèn)權(quán)限,如用戶(hù)的聯(lián)系人,短信,可安裝存儲(chǔ)(SD卡),攝像頭,藍(lán)牙等設(shè)備的數(shù)據(jù),所有應(yīng)用程序的權(quán)限必須由用戶(hù)在安裝時(shí)授予。 但是,有一個(gè)應(yīng)用程序的方法與其他應(yīng)用程序和應(yīng)用程序訪問(wèn)系統(tǒng)服務(wù)的數(shù)據(jù):l 這有可能為兩個(gè)應(yīng)用程序安排共享相同的Linux用戶(hù)ID,在這種情況下,它們能夠相互訪問(wèn)的文件。Android的啟動(dòng)過(guò)程時(shí),應(yīng)用程序的任何組件需要被執(zhí)行,然后關(guān)閉該進(jìn)程時(shí),它不再需要或恢復(fù)時(shí),系統(tǒng)必須為其他應(yīng)用程序的內(nèi)存。l 每個(gè)進(jìn)程都有它自己的虛擬機(jī)(VM),因此應(yīng)用程序的代碼在從其他應(yīng)用程序隔離運(yùn)行。 一旦安裝在設(shè)備上,每個(gè)Android應(yīng)用程序的生命在它自己的安全沙箱:l 而Android操作系統(tǒng)是一個(gè)多用戶(hù)Linux系統(tǒng)中,每個(gè)應(yīng)用程序是一個(gè)不同的用戶(hù)。s directory name. Then, the system automatically applies the appropriate layout depending on the current device orientation. For more about the different kinds of resources you can include in your application and how to create alternative resources for various device configurations, see theApplication Resourcesfor your alternative resources. The qualifier is a short string that you include in the name of your resource directories in order to define the device configuration for which those resources should be used. As another example, you should often create different layouts for your activities, depending on the device39。s language setting, the Android system applies the appropriate language strings to your UI. Android supports many differentres/valuesfr/that you append to the resource directory39。, which you can use to reference the image and insert it in your user interface. One of the most important aspects of providing resources separate from your source code is the ability for you to provide alternative resources for different device configurations. For example, by defining UI strings in XML, you can translate the strings into other languages and save those strings in separate files. Then, based on a languageres/drawable/Filters on Google Playelement. It39。(for example, Android is API Level 1 and Android is API Level 9). If you use any APIs that were added to the platform after version , you should declare the minimum API Level in which those APIs were introduced using theelement.Platform VersionDifferent Androidpowered devices often run different versions of the Android platform, such as Android or Android . Each successive version often includes additional APIs not available in the previous version. In order to indicate which set of APIs are available, each platform version specifies anelement. However, it is rare that an application should require a certain input configuration.Device featuresThere are many hardware and software features that may or may not exist on a given Androidpowered device