版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、在Eclipse環(huán)境中進(jìn)行Android應(yīng)用程序開發(fā)開始之前本教程介紹如何在Eclipse環(huán)境中進(jìn)行Android應(yīng)用程序開發(fā),包括兩個(gè)示例應(yīng)用程序。第一個(gè)示例是一個(gè)基本的應(yīng)用程序,涉及構(gòu)建和調(diào)試的所有階段。第二個(gè)應(yīng)用程序示例涉及比較復(fù)雜的Android特性,包括聯(lián)系人搜索和GoogleMaps地址查找。要想從本教程獲得最大收益,具備移動(dòng)開發(fā)經(jīng)驗(yàn)會(huì)有幫助,但不是必需的。開發(fā)Android應(yīng)用程序需要Java?編程技能,但是對(duì)于本教程不是必需的。關(guān)于本教程我們?yōu)槭裁匆P(guān)注Android?有兩個(gè)原因使Android成為重要的平臺(tái)。首先,Google引入了Android,它在很短時(shí)間內(nèi)就獲得了市場(chǎng)的
2、關(guān)注。Google正在進(jìn)軍移動(dòng)市場(chǎng)。它在這個(gè)市場(chǎng)上采取的第一個(gè)行動(dòng)就是發(fā)布Android和OpenHandsetAlliance,這是一個(gè)令人印象深刻的起點(diǎn)。第二,Android不僅僅是另一種包含電話、菜單和觸摸屏功能的移動(dòng)平臺(tái)。您將在本教程中了解到,Android提供了一種不同的應(yīng)用程序開發(fā)方法。由于可以對(duì)請(qǐng)求的操作和代碼進(jìn)行運(yùn)行時(shí)綁定,Android的體系結(jié)構(gòu)支持高度可定制的軟件環(huán)境。無論是考慮市場(chǎng)因素還是Android的技術(shù)方面,它都是一個(gè)值得研究的平臺(tái)。本教程分為以下幾節(jié): Android基礎(chǔ)知識(shí)和必需的工具 AndroidSoftwareDeveloperKit 構(gòu)建和調(diào)試SaySo
3、methingAndroid應(yīng)用程序 創(chuàng)建內(nèi)容提供器和GoogleMaps應(yīng)用程序系統(tǒng)需求本教程需要結(jié)合使用幾種技術(shù)。Eclipse平臺(tái)Eclipse是一個(gè)運(yùn)行插件的平臺(tái)。您應(yīng)該安裝EclipseClassic的最新版本(本教程使用V3.3.1)。AndroidDeveloperTools按照安裝AndroidSDK中的說明安裝AndroidDeveloperTools(Eclipse插件)。源代碼本教程中的源代碼片段包括: AndroidManifest.xml(片段)一這個(gè)文件是Android應(yīng)用程序的應(yīng)用程序部署描述符。 IntentReceiver一演示IntentReceiver的實(shí)
4、現(xiàn),這個(gè)類處理AndroidManifest.xml文件中IntentFilter標(biāo)記所公布的intent。 SaySomething.java一實(shí)現(xiàn)一個(gè)Android活動(dòng),這是本教程的示例應(yīng)用程序的主要入口點(diǎn)。 Main.xml這個(gè)文件包含Android活動(dòng)所用的視覺元素或資源。 R.java這個(gè)文件是由AndroidDeveloperTools自動(dòng)生成的,它把視覺資源“連接”到Java源代碼。 AndroidManifest.xml(完整)一這是完整的AndroidManfest.xml文件,包含每個(gè)重要元素的描述。MobileServiceCallContacts.java這個(gè)文件包含的
5、代碼顯示聯(lián)系人并對(duì)用戶輸入做出反應(yīng),執(zhí)行GoogleMaps地址查找。Android簡介在討論Eclipse插件和開發(fā)Android應(yīng)用程序之前,我們先看看Android的體系結(jié)構(gòu)和一些重要的術(shù)語,這會(huì)對(duì)本教程后面的討論和您自己構(gòu)建Android應(yīng)用程序有幫助。Android術(shù)語在Eclipse環(huán)境中開發(fā)Android應(yīng)用程序需要了解Eclipse環(huán)境和Android平臺(tái)的知識(shí)。了解以下術(shù)語會(huì)有助于用Eclipse插件開發(fā)Android應(yīng)用程序。OpenHandsetAlliance這是一個(gè)由Google公司主導(dǎo)的組織,它由許多公共和私人組織組成。Android這是OpenHandsetAll
6、iance的主打產(chǎn)品。它是一種針對(duì)移動(dòng)設(shè)備的開放源碼操作環(huán)境。模擬器模擬另一個(gè)系統(tǒng)的軟件工具一這常常是在個(gè)人計(jì)算機(jī)(舊M?、MaGLinux?)上運(yùn)行的一個(gè)環(huán)境,它模擬另一個(gè)環(huán)境,比如移動(dòng)計(jì)算設(shè)備。Linux一種開放源碼的操作系統(tǒng)內(nèi)核,許多計(jì)算平臺(tái)都使用這種操作系統(tǒng),包括服務(wù)器、桌面計(jì)算機(jī)、網(wǎng)絡(luò)設(shè)備和移動(dòng)計(jì)算設(shè)備。Android在Linux內(nèi)核上運(yùn)行。DalvikVirtualMachineDalvikVM是Android產(chǎn)品組合中的一種操作環(huán)境,它在運(yùn)行時(shí)解釋應(yīng)用程序代碼。DalvikVM與JavaVM相似,但是兩者不兼容。Android基礎(chǔ)知識(shí)和必需的工具Android是一種針對(duì)移動(dòng)平臺(tái)的
7、開放源碼操作系統(tǒng)。到編寫本教程時(shí),它是一種純軟件的平臺(tái),沒有可用的硬件設(shè)備。Android平臺(tái)被稱為一個(gè)產(chǎn)品組合,因?yàn)樗且幌盗薪M件的集合,包括: 基于Linux內(nèi)核的操作系統(tǒng) Java編程環(huán)境 工具集,包括編譯器、資源編譯器、調(diào)試器和模擬器 用來運(yùn)行應(yīng)用程序的DakikVM簡要介紹了Android平臺(tái)的體系結(jié)構(gòu)之后,我們來從市場(chǎng)的角度看看這個(gè)平臺(tái)的一些重要特性。Android為什么很重要?自從Android和最初的SDK發(fā)布以來,計(jì)算機(jī)技術(shù)新聞界一直非常關(guān)注Android。Android之所以重要主要有兩個(gè)原因。Android是Google進(jìn)軍移動(dòng)市場(chǎng)的主要行動(dòng)。移動(dòng)應(yīng)用程序領(lǐng)域競爭激烈,新
8、的競爭者很難涉足。Google擁有大量資源和強(qiáng)大的品牌實(shí)力,有能力涉足任何市場(chǎng)。Google進(jìn)軍移動(dòng)市場(chǎng)已經(jīng)好幾年了。Android原來屬于另一家公司,Google通過收購這家公司大大提高了在移動(dòng)市場(chǎng)上的競爭力。Google的任何行動(dòng)都會(huì)受到關(guān)注,而且引入新平臺(tái)也很引人注目。Android同時(shí)具備這兩個(gè)因素。第二個(gè)原因是Android的應(yīng)用程序模型與眾不同。Android應(yīng)用程序并不是需要大量單擊操作的純粹的菜單式應(yīng)用程序。Android應(yīng)用程序中確實(shí)有菜單和按鈕,但是Android在體系結(jié)構(gòu)中引入了一種新穎的設(shè)計(jì)元素entintent是一種構(gòu)造,應(yīng)用程序可以通過它發(fā)出請(qǐng)求
9、,這就像是發(fā)出求助信號(hào)。intent可能像下面這樣:Wanted:Anapplicationtohelpmelookupacontact或Wanted:Anapplicationtohelpmedisplaythisimage或Wanted:Anapplicationtoperformthisgeographic-basedsearch應(yīng)用程序可以按照相似或互補(bǔ)的方式進(jìn)行注冊(cè),表明它們有能力或有興趣執(zhí)行各種請(qǐng)求或intent。比如:Available:Applicationreadyandwillingtopresentcontactrecordsinclear,concisemanner或A
10、vailable:Applicationreadyandwillingtoperformageographicsearch這些是IntentFilter的示例,下面將要討論。IntentFilter應(yīng)用程序通過一個(gè)稱為IntentFilter的構(gòu)造聲明它們能夠執(zhí)行某些類型的操作。IntentFilter可以在運(yùn)行時(shí)進(jìn)行注冊(cè),也可以在AndroidManifest.xml文件中設(shè)置。下面的代碼片段取自一個(gè)對(duì)SMS(文本)消息進(jìn)行響應(yīng)的Android應(yīng)用程序:清單1.對(duì)SMS進(jìn)行響應(yīng)的Android應(yīng)用程序1. receiverclass=.MySMSMailBox2. 3. 4. 5. /rec
11、eiver復(fù)制代碼簡要介紹intent和IntentFilter之后,下一節(jié)介紹Android應(yīng)用程序的四種主要類型。Android應(yīng)用程序一概述我們來看看Android應(yīng)用程序的四種主要類型:活動(dòng)、服務(wù)、接收器和ContentProvider.我們還要看看顯示用戶界面(UI)元素的視圖?;顒?dòng)活動(dòng)是最常用的Android應(yīng)用程序形式?;顒?dòng)在一個(gè)稱為視圖的類的幫助下,為應(yīng)用程序提供UI。視圖類實(shí)現(xiàn)各種UI元素,比如文本框、標(biāo)簽、按鈕和計(jì)算平臺(tái)上常見的其他UI元素。一個(gè)應(yīng)用程序可以包含一個(gè)或多個(gè)活動(dòng)。這些活動(dòng)通常與應(yīng)用程序中的屏幕形成一對(duì)一關(guān)系。應(yīng)用程序通過調(diào)用startActivity()或st
12、artSubActivity()方法從一個(gè)活動(dòng)轉(zhuǎn)移到另一個(gè)活動(dòng)。如果應(yīng)用程序只需“切換”到新的活動(dòng),就應(yīng)該使用前一個(gè)方法。如果需要異步的調(diào)用/響應(yīng)模式,就使用后一個(gè)方法。在這兩種情況下,都需要通過方法的參數(shù)傳遞一個(gè)intent。由操作系統(tǒng)負(fù)責(zé)決定哪個(gè)活動(dòng)最適合滿足指定的intent。服務(wù)和接收器與其他多任務(wù)計(jì)算環(huán)境一樣,“在后臺(tái)”運(yùn)行著一些應(yīng)用程序,它們執(zhí)行各種任務(wù)。Android把這種應(yīng)用程序稱為“服務(wù)”。服務(wù)是沒有UI的Android應(yīng)用程序。接收器是一個(gè)應(yīng)用程序組件,它接收請(qǐng)求并處理intent。與服務(wù)一樣,接收器在一般情況下也沒有UI元素。接收器通常在AndroidManifest.x
13、ml文件中注冊(cè)。清單2是接收器代碼的示例。注意,接收器的類屬性是負(fù)責(zé)實(shí)現(xiàn)這個(gè)接收器的Java類。清單2.接收器代碼1. packagecom.msi.samplereceiver;2.3. importandroid.content.Context;4. importandroid.content.Intent;5. importandroid.content.IntentReceiver;6.7. publicclassmyreceiverextendsIntentReceiver8. 9. publicvoidonReceiveIntent(Contextarg0,Intentarg1)1
14、0. 11. /dosomethingwhenthismethodisinvoked.12. 13. 復(fù)制代碼用ContentProvider進(jìn)行數(shù)據(jù)管理ContentProvider是Android的數(shù)據(jù)存儲(chǔ)抽象機(jī)制。我們以移動(dòng)設(shè)備上常見的一種數(shù)據(jù)為例:地址簿或聯(lián)系人數(shù)據(jù)庫。地址簿包含所有聯(lián)系人及其電話號(hào)碼,用戶在使用手機(jī)時(shí)可能需要使用這些數(shù)據(jù)。ContentProvider對(duì)數(shù)據(jù)存儲(chǔ)的訪問方法進(jìn)行抽象。ContentProvider在許多方面起到數(shù)據(jù)庫服務(wù)器的作用。對(duì)數(shù)據(jù)存儲(chǔ)中數(shù)據(jù)的讀寫操作應(yīng)該通過適當(dāng)?shù)腃ontentProvider傳遞,而不是直接訪問文件或數(shù)據(jù)庫。可能還有Content
15、Provider的“客戶機(jī)”和“實(shí)現(xiàn)”。下一節(jié)介紹Android視圖,這是Android在移動(dòng)設(shè)備屏幕上顯示UI元素的機(jī)制。視圖Android活動(dòng)通過視圖顯示UI元素。視圖采用以下布局設(shè)計(jì)之一:LinearVertical后續(xù)的每個(gè)元素都排在前一個(gè)元素下面,形成一個(gè)單一列。LinearHorizontal后續(xù)的每個(gè)元素都排在前一個(gè)元素右邊,形成一個(gè)單一行。Relative后續(xù)的每個(gè)元素相對(duì)于前一個(gè)元素有一定的偏移量。Table與HTML表相似的一系列行和列。每個(gè)單元格可以包含一個(gè)視圖元素。選擇一種布局(或布局的組合)之后,就可以用各個(gè)視圖顯示UI。視圖元素由大家熟悉的UI元素組成,包括: Bu
16、tton ImageButton EditText TextView(與標(biāo)簽相似) CheckBox RadioButton Gallery和ImageSwitcher(用來顯示多個(gè)圖像) List Grid DatePicker TimePicker Spinner(與組合框相似) AutoComplete(具有文本自動(dòng)補(bǔ)全特性的EditText)視圖是在一個(gè)XML文件中定義的。清單3給出一個(gè)簡單的LinearVertical布局示例。清單3.簡單的LinearVertical布局1. 2. 7. 12. 17. Button18. android:layout_width=wrap_con
17、tent19. android:layout_height=wrap_content20. android:text=SwitchToActivity221. id=+id/switchto222. /23. 復(fù)制代碼注意,每個(gè)元素有一個(gè)或多個(gè)屬于Android名稱空間的屬性。下一節(jié)討論如何獲取AndroidSDK并在Eclipse環(huán)境中配置它。AndroidSoftwareDeveloperKit我們已經(jīng)大致了解了Android平臺(tái),現(xiàn)在討論如何設(shè)置Eclipse環(huán)境來支持Android應(yīng)用程序開發(fā)。本節(jié)討論如何獲取AndroidSDK并在Eclipse環(huán)境中配置它。獲取和安裝Eclipse
18、如果您還沒有安裝Eclipse,那么從EclipseFoundation下載并安裝EclipseIDE最新的穩(wěn)定版(參見參考資料)。安裝包是一個(gè)壓縮的文件夾。把這個(gè)文件夾的內(nèi)容解壓到您計(jì)算機(jī)上的適當(dāng)位置。安裝程序并不在Windows?上創(chuàng)建任何圖標(biāo)或快捷方式。對(duì)于本教程,Eclipse文件夾位于c:softwareeclipse目錄。雙擊eclipse安裝目錄中的eclipse.exe啟動(dòng)Eclipse。這會(huì)啟動(dòng)IDE。軟件提示您指定一個(gè)“工作空間”并建議一個(gè)默認(rèn)位置,比如c:documentsandsettingsusernameworkspace。選擇這個(gè)位置或者指定另一個(gè)工作空間位置。啟
19、動(dòng)Eclipse之后,單擊主屏幕上的Workbench-Gototheworkbench圖標(biāo)?,F(xiàn)在該獲取AndroidSDK了。獲取和安裝AndroidSDK在參考資料中找到Android的下載鏈接。有針對(duì)Windows、MacOSX(只有Intel?版)和Linux(i386)的SDK安裝版。選擇適合您平臺(tái)的最新的SDK版本。注意,到編寫本教程時(shí),最新的AndroidSDK版本是m3-rc37a。AndroidSDK是一個(gè)壓縮的文件夾。下載這個(gè)文件夾并把它的內(nèi)容解壓到您計(jì)算機(jī)上的適當(dāng)位置。對(duì)于本教程,SDK安裝在c:softwaregoogleandroid_m3-rc37a。顯然,如果要在
20、MacOSX和Linux上安裝SDK,應(yīng)該安裝在通常安裝開發(fā)工具的位置。Eclipse和AndroidSDK都已經(jīng)安裝好了。現(xiàn)在應(yīng)該安裝Eclipse插件。獲取并安裝Eclipse插件下面介紹安裝Eclipse插件AndroidDeveloperTools的步驟。注意,Android網(wǎng)站上也提供了安裝說明。更多信息請(qǐng)參見參考資料。按照以下步驟安裝AndroidDeveloperTools:1.在Eclipse中運(yùn)行FindandInstall”特性(在HelpSoftwareUpdates菜單下面)。2.選擇 Search for new features to install選項(xiàng)。3 .選擇
21、NewRemoteSite。給站點(diǎn)命名,比如AndroidDeveloperTools”。在對(duì)話框中輸入以下URL:https:dl-圖1.NewUpdateSite,NewUpdateSiteName:AndroidDeveloperToolsURL:https:/dl-5sl.googte.canri/android/ecNp5ej|jOKC4 .列表中會(huì)增加一個(gè)新條目并被默認(rèn)選中。單擊Finish。搜索結(jié)果會(huì)顯示AndroidDeveloperTools。選擇DeveloperTools并單擊Next。5 .閱讀并接受許可協(xié)議之后,單擊Next。注意,許可協(xié)議中對(duì)于使用GoogleMap
22、sAPI有一個(gè)特殊的要求。6 .檢查并接受安裝位置,然后單擊Finish?,F(xiàn)在下載并安裝這個(gè)插件。這個(gè)插件沒有經(jīng)過數(shù)字簽名(到編寫本教程時(shí)),所以只需單擊InstallAll,然后重新啟動(dòng)Eclipse。配置Eclipse插件重新啟動(dòng)Eclipse之后,應(yīng)該把這個(gè)插件連接到SDK的安裝位置。在Window菜單中選擇Preferences。單擊左邊樹視圖中的Android。在右邊的面板中,指定SDK的安裝位置。本教程使用的安裝位置是c:softwaregoogleandroidm3-rc37a(同樣,在MacOSX和Linux系統(tǒng)上也應(yīng)該使用適當(dāng)?shù)奈恢茫?。指定SDK安裝位置之后,可以配置另外三部
23、分設(shè)置。下面簡要介紹一下: Build部分中的選項(xiàng)用來自動(dòng)地重新構(gòu)建資源。保持這個(gè)選項(xiàng)的設(shè)置不變。Build選項(xiàng)可以改變輸出的詳細(xì)程度。Normal是默認(rèn)設(shè)置。 DDMS-DalvikDebugMonitorService用來監(jiān)視正在運(yùn)行的VM。這些設(shè)置指定調(diào)試器用來連接VM的TCP/IP端口號(hào)、各個(gè)日志記錄級(jí)別和選項(xiàng)。默認(rèn)設(shè)置應(yīng)該是合適的。 LogCat這是在底層Linux系統(tǒng)上創(chuàng)建的一個(gè)日志文件??梢栽谶@個(gè)對(duì)話框中選擇字體。根據(jù)需要調(diào)整這個(gè)選項(xiàng)。好了!Eclipse環(huán)境已經(jīng)設(shè)置好了,可以開始創(chuàng)建Android應(yīng)用程序了。構(gòu)建SaySomethingAndroid應(yīng)用程序本節(jié)要使用Andro
24、idDeveloperTools創(chuàng)建一個(gè)基本的Android應(yīng)用程序,它稱為SaySomething。創(chuàng)建這個(gè)應(yīng)用程序之后,將調(diào)試和運(yùn)行它。Newproject向?qū)У谝徊绞莿?chuàng)建一個(gè)新項(xiàng)目。選擇用來創(chuàng)建Android項(xiàng)目的向?qū)В缦滤?。圖2.Newproject向?qū)н@個(gè)應(yīng)用程序需要: NamelLocation Packagename Activityname可以認(rèn)為這是應(yīng)用程序的主“表單”或屏幕,Applicationname看看這個(gè)新項(xiàng)目。圖3.新的Android項(xiàng)目這會(huì)創(chuàng)建一個(gè)默認(rèn)的應(yīng)用程序,可以構(gòu)建和運(yùn)行它。可以在PackageExplorer中查看它的組件。PackageExplor
25、erPackageExplorer(在Eclipse的Java透視圖中)顯示Android示例應(yīng)用程序的所有組件,見圖4。圖4.PackageExplorer-PackageExplorer播Hierarchy-0ibmlutonalB-src-田comrnsi.ibmtLitcirial- RJavaidGFR&attr+idr己內(nèi)able+3layout+&string- 5ay5om8thingjava- 0Say5amethinglxonCreate(Bundle)-&ReferencedLibraries十a(chǎn)ndroid.jar-C:softwaregoogleandroid_m3-
26、rc37ai-assets曰L3res- drawable,icon,png- l2zlayoutkmain,xml- i2valuesxstring5,口AndroidManifest.xml需要注意的組件包括:src文件夾包含示例應(yīng)用程序的包,即com.msi.ibmtutorial。R.javaAndroidDeveloperTools自動(dòng)創(chuàng)建這個(gè)文件,它提供訪問Android應(yīng)用程序的各種資源所需的常量。后面會(huì)詳細(xì)討論R類與資源之間的關(guān)系。SaySomething.java應(yīng)用程序的主活動(dòng)類的實(shí)現(xiàn)。Referencedlibraries包含android.jar,這是AndroidSD
27、K中的Android運(yùn)行時(shí)類的jar文件。res文件夾包含應(yīng)用程序的資源,包括: 圖標(biāo) 布局文件 字符串AndriodManifest.xml示例應(yīng)用程序的部署描述符。接下來,詳細(xì)研究一下源代碼。應(yīng)用程序的主活動(dòng)這個(gè)示例應(yīng)用程序由一個(gè)活動(dòng)組成,即SaySomething。正如前面提到的,SaySomething類是在SaySomething.java文件中實(shí)現(xiàn)的。清單4.SaySomething.java1. packagecom.msi.ibmtutorial;2.3. importandroid.app.Activity;4. importandroid.os.Bundle;5.6. pu
28、blicclassSaySomethingextendsActivity7. 8. /*Calledwhentheactivityisfirstcreated.*/9. Override10. publicvoidonCreate(Bundleicicle)11. 12. super.onCreate(icicle);13. setContentView(R.layout.main);14. 15. 復(fù)制代碼在這個(gè)源代碼片段中,要注意幾點(diǎn): SaySomething是一個(gè)普通的Java類,包含包和導(dǎo)入語句。 SaySomething擴(kuò)展android.app包中的Android基類Activi
29、ty。 onCreate()方法是這個(gè)活動(dòng)的入口點(diǎn),它接受一個(gè)Bundle類型的參數(shù)。Bundle類本質(zhì)上是map或hashmap的包裝器。在這個(gè)參數(shù)中傳遞構(gòu)造活動(dòng)所需的元素。本教程不討論這個(gè)參數(shù)。 setContentView(.)負(fù)責(zé)用R.layout.main參數(shù)創(chuàng)建主UI。R.layout.main是應(yīng)用程序資源中主布局的標(biāo)識(shí)符。下一節(jié)討論示例應(yīng)用程序的資源。應(yīng)用程序的資源正如前面提到的,Android中的資源放在項(xiàng)目的res子目錄中。資源分為三類:Drawables這個(gè)文件夾包含圖形文件,比如圖標(biāo)和位圖。Layouts這個(gè)文件夾包含表示應(yīng)用程序布局和視圖的XML文件。后面會(huì)詳細(xì)研究這
30、些文件。Values這個(gè)文件夾包含strings.xml文件。這是為應(yīng)用程序?qū)崿F(xiàn)字符串本地化的主要方法。下一節(jié)研究main.xml文件,了解示例應(yīng)用程序的UI資源。main.xml這個(gè)示例應(yīng)用程序包含一個(gè)活動(dòng)和一個(gè)視圖。應(yīng)用程序包含一個(gè)名為main.xml的文件,它代表活動(dòng)的主UI的視覺方面。注意,在main.xml中沒有指定在哪里使用這個(gè)布局。這意味著,如果需要的話,可以在多個(gè)活動(dòng)中使用它。清單5給出布局文件的內(nèi)容。清單5.布局文件1. 2. 7. 12. 復(fù)制代碼這是最簡單的布局,其中只有一個(gè)垂直的線性布局,這意味著所有元素排成一列。這里有一個(gè)TextView元素,它與其他開發(fā)環(huán)境中的標(biāo)簽
31、類似。TextView代表不可編輯的靜態(tài)文本。注意,每個(gè)視圖元素(比如這個(gè)示例中的LinearLayout和TextView)都有屬于Android名稱空間的屬性。一些屬性是所有視圖元素都有的,比如android:layout_width和android:layout_height。這些屬性可以采用的值是:fill_parent使視圖元素占滿可用的空間。也可以認(rèn)為這就是拉伸。wrap_content這個(gè)值讓Android把元素一個(gè)接一個(gè)地排列,不進(jìn)行拉伸。在構(gòu)建期間,對(duì)所有資源進(jìn)行編譯。編譯過程的輸出之一是R.java文件,這個(gè)文件向應(yīng)用程序的其余部分提供資源。下面討論R.java文件。R.j
32、ava清單6R.java文件是在構(gòu)建時(shí)自動(dòng)創(chuàng)建的,所以不要手工修改它,因?yàn)樗行薷亩紩?huì)丟失。給出這個(gè)示例應(yīng)用程序的R.java文件。清單6.R.java文件1. /*AUTO-GENERATEDFILE.DONOTMODIFY.2. *3. *Thisclasswasautomaticallygeneratedbythe4. *aapttoolfromtheresourcedataitfound.It5. *shouldnotbemodifiedbyhand.6. */7.8. packagecom.msi.ibmtutorial;9.10. publicfinalclassR11. publ
33、icstaticfinalclassattr12. 13. publicstaticfinalclassdrawable14. publicstaticfinalinticon=0x7f020000;15. 16. publicstaticfinalclasslayout17. publicstaticfinalintmain=0x7f030000;18. 19. publicstaticfinalclassstring20. publicstaticfinalintapp_name=0x7f040000;21. 22. 復(fù)制代碼R類包含一些匿名子類,每個(gè)子類包含前面描述的各種資源的標(biāo)識(shí)符。注
34、意,這些類都是靜態(tài)的。請(qǐng)注意R.layout.main代表的元素。這個(gè)標(biāo)識(shí)符代表由main.xml定義的布局。在活動(dòng)的onCreate方法中使用過這個(gè)值:setContentView(R.layout.main);。這就是在運(yùn)行時(shí)把特定的活動(dòng)(在這個(gè)示例中是SayAnything)和特定的布局(主布局)聯(lián)系在一起的方法。構(gòu)建應(yīng)用程序在默認(rèn)情況下,每次保存文件時(shí),都將對(duì)它們進(jìn)行編譯。圖5.錯(cuò)誤面板$孰ySonRthmg,何區(qū)strmgexinJgmanHfripackageecw.a口+Hb賓kutDi驥上:umfiort&hdDidiappJuctivltIiuiiXicriass&ysomb
35、m)(tendActivity/*CalXedwhentheactivity13firsc,created.7B&irexridepuJXlcvoidoaCre&te(Bundleiclle|iI*tii*brjS_QJQ1crrtaE.e(icicle;O方uentVj號(hào)”次-layouJ加工m;二PrWwi5應(yīng)用JaHfoc此Dtdartfnr士error%Qwarnngfi,0MmDew聯(lián)m-ResouroePathLoc&所-TEMM芭AMtt)OMtContlrtcannotberesolved3atypeSaySafrHlfi.ixnt讓0聞sr付mnftnEgfHfine11GM
36、t幽errorgotchpn*rTWtKliftflfth#5tokpnKySomml.加1(戊4聞何小皿01/(麗一E11我們?cè)谠创a中引入了一個(gè)錯(cuò)誤,即在setContent和View之間加了一個(gè)空格。在保存這個(gè)文件時(shí),它被編譯并在屏幕底部的Problems面板中顯示錯(cuò)誤。在源代碼中糾正這個(gè)錯(cuò)誤之后,應(yīng)用程序就能夠成功編譯,并從問題列表中刪除錯(cuò)誤。AndroidManifest.xmlAndroidManifest.xml文件是Android應(yīng)用程序的部署描述符。這個(gè)文件列出應(yīng)用程序中包含的所有活動(dòng)、服務(wù)、內(nèi)容提供器和接收器,以及應(yīng)用程序支持的IntentFilter。下面是這個(gè)示例應(yīng)用程
37、序的完整的AndroidManifest.xml文件。清單7.AndroidManifest.xml文件1. 2. manifestxmlns:android=http:3. package=com.msi.ibmtutorial4. applicationandroid:icon=drawable/icon5. activityclass=.SaySomethingandroid:label=string/app_name6. 7. 8. categoryandroid:value=ent.category.LAUNCHER/9. 10. /activity11. /a
38、pplication12. /manifest復(fù)制代碼請(qǐng)注意以下情況: 這里指定了源文件中的包名。這里采用與Java源文件和導(dǎo)入語句相似的模式。manifest標(biāo)記的實(shí)際作用是“導(dǎo)入”這個(gè)包中的類。在這個(gè)文件中,所有非完全限定的類都屬于package屬性指定的包。 application標(biāo)記的一個(gè)屬性引用了應(yīng)用程序的一個(gè)資源。請(qǐng)注意drawable標(biāo)識(shí)符前面的符號(hào)。這里的意思是,在應(yīng)用程序資源的drawable文件夾中尋找名為“icon”的資源。 activity標(biāo)記包含以下屬性和值: class屬性表示實(shí)現(xiàn)這個(gè)活動(dòng)的Java類。 android:label是應(yīng)用程序的名稱。注意,它來自一個(gè)字
39、符串資源。string.xml文件包含應(yīng)用程序的本地化字符串。 intent-filter表示應(yīng)用程序中可用的IntentFilter。這是Android應(yīng)用程序中最常見的IntentFilter。這個(gè)過濾器的實(shí)際意思是,它實(shí)現(xiàn)“主”操作(也就是入口點(diǎn)),而且它位于OS的啟動(dòng)器中。這意味著可以在Android設(shè)備上像啟動(dòng)其他應(yīng)用程序一樣,從應(yīng)用程序主列表中啟動(dòng)它。下一節(jié)討論如何在Eclipse中的Android模擬器上啟動(dòng)應(yīng)用程序。運(yùn)行應(yīng)用程序應(yīng)用程序已經(jīng)成功地編譯了,現(xiàn)在該運(yùn)行這個(gè)示例應(yīng)用程序了。在Eclipse中選擇OpenRunDialog或工具欄上的快捷按鈕。這會(huì)打開一個(gè)對(duì)話框,可以在
40、這里創(chuàng)建啟動(dòng)配置。選擇AndroidApplication選項(xiàng)并單擊New的圖標(biāo)。圖6顯示本教程示例所用的值。圖6.Run對(duì)話框指定配置名稱。本教程使用的名稱是TutorialConfiguration。在可用項(xiàng)目列表中選擇ibmtutorial項(xiàng)目(單擊Browse可以看到可用項(xiàng)目)。在下拉列表中選擇啟動(dòng)活動(dòng)?,F(xiàn)在選擇Emulator選項(xiàng)卡,根據(jù)需要指定模擬器設(shè)置??梢员3帜J(rèn)設(shè)置。有兩個(gè)設(shè)置需要注意,見圖7。圖7.Run對(duì)話中1,Emulator選項(xiàng)卡有幾種可供選擇的屏幕大小和方向,還有網(wǎng)絡(luò)選擇。如果運(yùn)行應(yīng)用程序的移動(dòng)設(shè)備的因特網(wǎng)連接速度不同,網(wǎng)絡(luò)選擇就很重要了。在構(gòu)造應(yīng)用程序原型時(shí),選擇
41、完整網(wǎng)絡(luò)速度而且沒有延遲。開發(fā)了主要功能之后,最好在比較真實(shí)的網(wǎng)絡(luò)環(huán)境中進(jìn)行測(cè)試,看看應(yīng)用程序的響應(yīng)速度如何。選擇Run運(yùn)行示例應(yīng)用程序。圖8.模擬器應(yīng)用程序已經(jīng)在模擬器上運(yùn)行了,現(xiàn)在看看幕后發(fā)生的情況。DakikDebugMonitorService(DDM$將會(huì)幫助檢查應(yīng)用程序的運(yùn)行情況。調(diào)試應(yīng)用程序要想檢查正在運(yùn)行的應(yīng)用程序中發(fā)生了什么情況,就需要查看正在運(yùn)行的DaMkVM。在Eclipse中,選擇WindowOpenPerspectiveOther。在出現(xiàn)的對(duì)話框中選擇DDMS這會(huì)在Eclipse中打開一個(gè)新的透視圖,其中有許多有趣的窗口。下面簡要介紹一下DDMS透視圖中提供的資源:L
42、ogCat是一個(gè)日志文件,它記錄VM中發(fā)生的活動(dòng)。應(yīng)用程序可以通過Log.i(tag,message);在這個(gè)日志文件中添加自己的日志項(xiàng),其中的tag和message都是Java字符串。Log類屬于android.util.Log包。圖9顯示LogCat。圖9.LogCatOLnCat:二LRTimepidtagMessage01-1114;UD712Andro-AndroidiButitihe5TA01-1114:AhdroidRuntiheSTA01111444口jdvpJDUponport900501-11144-1D720Andro一-registeringnativefunction
43、s-01-1114:4-1D720Andro.一ShuttingdovnVKDDMS中的另一個(gè)方便的工具是文件管理器,可以用它訪問模擬器的文件系統(tǒng)。圖10顯示在模擬器上部署本教程示例應(yīng)用程序的位置。圖10.在模擬器上部署的示例應(yīng)用程序用戶應(yīng)用程序部署在 /data/app 目錄中,而Android內(nèi)置的應(yīng)用程序部署在/system/app(MeTlwr/ad4dsu2007-124217:16diwifw43Khgaw2007121217r6dnRflfWMJ5ojpjteflBsjek.16-rervj:上_而AA_05如閨2HT,iHZQMrlilf*2-tw-rmw-亦皿立的二dah-e
44、atheJc.uuWTrl.Ict匕2006-01-liCK:S4.-downfejd爆34drwAiwrwx*dr*n30M-QL-liCfi創(chuàng)dnwwsrwx-t,tags06:3*dwjiffwxrwx.i&st+aund2D0ML1114:29dnrw-rw-f.arise2D0M242n:ndrwjifwxrwx遹irstwn06;*drwiwxrwxtmom32O5M1119n4_”2OO7dZ-121713dmwxFjc叵Jw20UMM;巾獨(dú)diwir-MrftBriwfw.apl1;包U1717:15FMFfCQfR.QDOgfe.MOM2007-1M21715Cl亡皿軍上令少
45、始./I:的信3TO7II-UP:15界8QirMM:L:i?JJ5,推2007-IMZ17:15-TF,com900.,QGoceAw,GH珈Z0071242l?USn0.qm*.,.Q(5OQApp5fiwd*中型32007-II4Z17:15-rwM-f-comgcce-.QHem.公W3Q2007IZ-LZt7:l5/廿ycomyoe-GJirProvidflfItlW2007-11-IZ17:ISFtem財(cái)射Q171613ZM7-I1L21X15EBW-gO*GMedLiPTGMderapfc203072D57-IM2P:i5HTWTT“com.google.QPhcm.apk但MO
46、Z007d.?4217:If4%fT上泄仲*章5ttlnQCM(kr劉118082t71?tZI7ii5-fWfEcoiB.gGogte-i.212712007-l.?4217”5rwH1-f-工g的立nXirpp&VTfKrtfi,1921IB200712-12I7:l-t-r1comocogieQ66132007-I.Z42TWrtfggo*ytn2007U-t2I7:Hdrm-Xtf-XbiMd.prCd3472007-124217:10*wHr-r-目錄中。在DDMS中還可以查看正在運(yùn)行的進(jìn)程。圖11.正在運(yùn)行的進(jìn)程列表Eeu加torControlDebugPart8600/8700C
47、lientName6601860266036604sy$tem_procesecom,googleandroid,c已5G.contentcom.msi.ibmtutorial全面討論Android應(yīng)用程序的調(diào)試超出了本教程的范圍,更多信息請(qǐng)參見參考資料。創(chuàng)建內(nèi)容提供器和GoogleMaps應(yīng)用程序您已經(jīng)看到了一個(gè)完整的應(yīng)用程序示例,現(xiàn)在簡要討論一下更加復(fù)雜的應(yīng)用程序。內(nèi)容提供器和GoogleMaps本教程中討論的第二個(gè)應(yīng)用程序適用于提供上門服務(wù)的專業(yè)人員,比如設(shè)備維修技術(shù)人員,這些人必須找到去客戶地址的路線。
48、這個(gè)應(yīng)用程序使用Android內(nèi)置的聯(lián)系人數(shù)據(jù)庫作為記錄存儲(chǔ)庫。本節(jié)將講解如何訪問內(nèi)容提供器中的數(shù)據(jù),還將看看intent的效果。我們將用聯(lián)系人數(shù)據(jù)庫中的地址數(shù)據(jù)執(zhí)行GoogleMaps搜索。為了讓這個(gè)應(yīng)用程序在Android模擬器上正確運(yùn)行,必須記錄一些聯(lián)系人,而且必須填寫家庭地址字段。圖12顯示模擬器中與聯(lián)系人應(yīng)用程序相關(guān)的條目。圖12.模擬器中與聯(lián)系人應(yīng)用程序相關(guān)的條目類擴(kuò)展下面是這個(gè)應(yīng)用程序的一個(gè)代碼片段。注意,這個(gè)應(yīng)用程序的主ActivityListActivity。這是因?yàn)槲覀冃枰诹斜碇酗@示信息。清單8.第一個(gè)代碼片段1. publicclassMobileServiceCall
49、ContactsextendsListActivity2. 3. finalStringtag=MSCC;4. /*Calledwhentheactivityisfirstcreated.*/5. Override6. publicvoidonCreate(Bundleicicle)7. 8. super.onCreate(icicle);9. setContentView(R.layout.main);10.11. /Getacursorwithallpeople12. Cursorc=getContentResoker().query(People.CONTENT_URI,null,null,13.null,null);14. startManagingCursor(c);15.16. ListAdapteradapter=newSimpleCursorAdap
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024補(bǔ)償貿(mào)易的購銷合同范文
- 企業(yè)與個(gè)人租車合同格式
- 家庭日常清潔委托合同大全
- 國際工程分包勞務(wù)合同
- 2024北京市房屋租賃合同自行成交
- 2024工廠車間承包合同范文
- 保管協(xié)議范文
- 平面廣告設(shè)計(jì)委托協(xié)議書
- 2024室內(nèi)裝修合同新
- 股份買賣合同樣本
- 乙酸乙酯的反應(yīng)器設(shè)計(jì)流程圖
- 《全國技工院校專業(yè)目錄(2022年修訂)》專業(yè)主要信息
- EM277的DP通訊使用詳解
- 耐壓絕緣測(cè)試報(bào)告
- 野獸派 beast 花店 調(diào)研 設(shè)計(jì)-文檔資料
- 水泵房每日巡視檢查表
- 杭州市區(qū)汽車客運(yùn)站臨時(shí)加班管理規(guī)定
- 墊片沖壓模具設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 冷庫工程特點(diǎn)施工難點(diǎn)分析及對(duì)策
- Python-Django開發(fā)實(shí)戰(zhàn)
- 小學(xué)道法小學(xué)道法1我們的好朋友--第一課時(shí)ppt課件
評(píng)論
0/150
提交評(píng)論