




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
在Eclipse環(huán)境中進行Android應(yīng)用程序開發(fā)開始之前本教程介紹如何在Eclipse環(huán)境中進行Android應(yīng)用程序開發(fā),包括兩個示例應(yīng)用程序。第一個示例是一個基本的應(yīng)用程序,涉及構(gòu)建和調(diào)試的所有階段。第二個應(yīng)用程序示例涉及比較復(fù)雜的Android特性,包括聯(lián)系人搜索和GoogleMaps地址查找。要想從本教程獲得最大收益,具備移動開發(fā)經(jīng)驗會有幫助,但不是必需的。開發(fā)Android應(yīng)用程序需要Java?編程技能,但是對于本教程不是必需的。關(guān)于本教程我們?yōu)槭裁匆P(guān)注Android?有兩個原因使Android成為重要的平臺。首先,Google引入了Android,它在很短時間內(nèi)就獲得了市場的關(guān)注。Google正在進軍移動市場。它在這個市場上采取的第一個行動就是發(fā)布Android和OpenHandsetAlliance,這是一個令人印象深刻的起點。第二,Android不僅僅是另一種包含電話、菜單和觸摸屏功能的移動平臺。您將在本教程中了解到,Android提供了一種不同的應(yīng)用程序開發(fā)方法。由于可以對請求的操作和代碼進行運行時綁定,Android的體系結(jié)構(gòu)支持高度可定制的軟件環(huán)境。無論是考慮市場因素還是Android的技術(shù)方面,它都是一個值得研究的平臺。本教程分為以下幾節(jié):Android基礎(chǔ)知識和必需的工具AndroidSoftwareDeveloperKit構(gòu)建和調(diào)試SaySomethingAndroid應(yīng)用程序創(chuàng)建內(nèi)容提供器和GoogleMaps應(yīng)用程序系統(tǒng)需求本教程需要結(jié)合使用幾種技術(shù)。Eclipse平臺Eclipse是一個運行插件的平臺。您應(yīng)該安裝EclipseClassic的最新版本(本教程使用V3.3.1)。AndroidDeveloperTools按照安裝AndroidSDK中的說明安裝AndroidDeveloperTools(Eclipse插件)。源代碼本教程中的源代碼片段包括:AndroidManifest.xml(片段)一這個文件是Android應(yīng)用程序的應(yīng)用程序部署描述符。IntentReceiver—演示IntentReceiver的實現(xiàn),這個類處理AndroidManifest.xml文件中IntentFilter標記所公布的intent。SaySomething.java—實現(xiàn)一個Android活動,這是本教程的示例應(yīng)用程序的主要入口點。Main.xml一這個文件包含Android活動所用的視覺元素或資源。R.java一這個文件是由AndroidDeveloperTools自動生成的,它把視覺資源“連接”到Java源代碼。AndroidManifest.xml(完整)一這是完整的AndroidManfest.xml文件,包含每個重要元素的描述。MobileServiceCallContacts.java—這個文件包含的代碼顯示聯(lián)系人并對用戶輸入做出反應(yīng),執(zhí)行GoogleMaps地址查找。Android簡介在討論Eclipse插件和開發(fā)Android應(yīng)用程序之前,我們先看看Android的體系結(jié)構(gòu)和一些重要的術(shù)語,這會對本教程后面的討論和您自己構(gòu)建Android應(yīng)用程序有幫助。Android術(shù)語在Eclipse環(huán)境中開發(fā)Android應(yīng)用程序需要了解Eclipse環(huán)境和Android平臺的知識。了解以下術(shù)語會有助于用Eclipse插件開發(fā)Android應(yīng)用程序。OpenHandsetAlliance這是一個由Google公司主導的組織,它由許多公共和私人組織組成。Android這是OpenHandsetAlliance的主打產(chǎn)品。它是一種針對移動設(shè)備的開放源碼操作環(huán)境。模擬器模擬另一個系統(tǒng)的軟件工具一這常常是在個人計算機(IBM?、Mac、Linux?)上運行的一個環(huán)境,它模擬另一個環(huán)境,比如移動計算設(shè)備。Linux—種開放源碼的操作系統(tǒng)內(nèi)核,許多計算平臺都使用這種操作系統(tǒng),包括服務(wù)器、桌面計算機、網(wǎng)絡(luò)設(shè)備和移動計算設(shè)備。Android在Linux內(nèi)核上運行。DalvikVirtualMachineDalvikVM是Android產(chǎn)品組合中的一種操作環(huán)境,它在運行時解釋應(yīng)用程序代碼°DalvikVM與JavaVM相似,但是兩者不兼容。Android基礎(chǔ)知識和必需的工具Android是一種針對移動平臺的開放源碼操作系統(tǒng)。到編寫本教程時,它是一種純軟件的平臺,沒有可用的硬件設(shè)備。Android平臺被稱為一個產(chǎn)品組合,因為它是一系列組件的集合,包括:基于Linux內(nèi)核的操作系統(tǒng)Java編程環(huán)境工具集,包括編譯器、資源編譯器、調(diào)試器和模擬器用來運行應(yīng)用程序的DalvikVM簡要介紹了Android平臺的體系結(jié)構(gòu)之后,我們來從市場的角度看看這個平臺的一些重要特性。Android為什么很重要?自從Android和最初的SDK發(fā)布以來,計算機技術(shù)新聞界一直非常關(guān)注Android。Android之所以重要主要有兩個原因。Android是Google進軍移動市場的主要行動。移動應(yīng)用程序領(lǐng)域競爭激烈,新的競爭者很難涉足。Google擁有大量資源和強大的品牌實力,有能力涉足任何市場。Google進軍移動市場已經(jīng)好幾年了。Android原來屬于另一家公司,Google通過收購這家公司大大提高了在移動市場上的競爭力。Google的任何行動都會受到關(guān)注,而且引入新平臺也很引人注目。Android同時具備這兩個因素。第二個原因是Android的應(yīng)用程序模型與眾不同。Android應(yīng)用程序并不是需要大量單擊操作的純粹的菜單式應(yīng)用程序。Android應(yīng)用程序中確實有菜單和按鈕,但是Android在體系結(jié)構(gòu)中引入了一種新穎的設(shè)計元素entintent是一種構(gòu)造,應(yīng)用程序可以通過它發(fā)出請求,這就像是發(fā)出求助信號。intent可能像下面這樣:"Wanted:Anapplicationtohelpmelookupacontact"或"Wanted:Anapplicationtohelpmedisplaythisimage"或"Wanted:Anapplicationtoperformthisgeographic-basedsearch"應(yīng)用程序可以按照相似或互補的方式進行注冊,表明它們有能力或有興趣執(zhí)行各種請求或intent。比如:"Available:Applicationreadyandwillingtopresentcontactrecordsinclear,concisemanner"或"Available:Applicationreadyandwillingtoperformageographicsearch"這些是IntentFilter的示例,下面將要討論。IntentFilter應(yīng)用程序通過一個稱為IntentFilter的構(gòu)造聲明它們能夠執(zhí)行某些類型的操作。IntentFilter可以在運行時進行注冊,也可以在AndroidManifest.xml文件中設(shè)置。下面的代碼片段取自一個對SMS(文本)消息進行響應(yīng)的Android應(yīng)用程序:清單1.對SMS進行響應(yīng)的Android應(yīng)用程序〈receiverclass二".MySMSMailBox">〈intent-filter><actionandroid:value二"vider.Telephony.SMS_RECEIVED"/></intent-filter>〈/receiver〉復(fù)制代碼簡要介紹intent和IntentFilter之后,下一節(jié)介紹Android應(yīng)用程序的四種主要類型。Android應(yīng)用程序一概述我們來看看Android應(yīng)用程序的四種主要類型:活動、服務(wù)、接收器和ContentProvider。我們還要看看顯示用戶界面(UI)元素的視圖。活動活動是最常用的Android應(yīng)用程序形式。活動在一個稱為視圖的類的幫助下,為應(yīng)用程序提供UI。視圖類實現(xiàn)各種UI元素,比如文本框、標簽、按鈕和計算平臺上常見的其他UI元素。一個應(yīng)用程序可以包含一個或多個活動。這些活動通常與應(yīng)用程序中的屏幕形成一對一關(guān)系。應(yīng)用程序通過調(diào)用startActivity()或startSubActivity()方法從一個活動轉(zhuǎn)移到另一個活動。如果應(yīng)用程序只需“切換”到新的活動,就應(yīng)該使用前一個方法。如果需要異步的調(diào)用/響應(yīng)模式,就使用后一個方法。在這兩種情況下,都需要通過方法的參數(shù)傳遞一個intent。由操作系統(tǒng)負責決定哪個活動最適合滿足指定的intent。服務(wù)和接收器與其他多任務(wù)計算環(huán)境一樣,“在后臺”運行著一些應(yīng)用程序,它們執(zhí)行各種任務(wù)oAndroid把這種應(yīng)用程序稱為“服務(wù)”。服務(wù)是沒有UI的Android應(yīng)用程序。接收器是一個應(yīng)用程序組件,它接收請求并處理intent。與服務(wù)一樣,接收器在一般情況下也沒有UI元素。接收器通常在AndroidManifest.xml文件中注冊。清單2是接收器代碼的示例。注意,接收器的類屬性是負責實現(xiàn)這個接收器的Java類。清單2.接收器代碼packagecom.msi.samplereceiver;2.importandroid.content.Context;importandroid.content.Intent;importandroid.content.IntentReceiver;6.publicclassmyreceiverextendsIntentReceiverTOC\o"1-5"\h\z{publicvoidonReceiveIntent(ContextargO,Intentargl){//dosomethingwhenthismethodisinvoked.}}復(fù)制代碼用ContentProvider進行數(shù)據(jù)管理
ContentProvider是Android的數(shù)據(jù)存儲抽象機制。我們以移動設(shè)備上常見的一種數(shù)據(jù)為例:地址簿或聯(lián)系人數(shù)據(jù)庫。地址簿包含所有聯(lián)系人及其電話號碼,用戶在使用手機時可能需要使用這些數(shù)據(jù)。ContentProvider對數(shù)據(jù)存儲的訪問方法進行抽象。ContentProvider在許多方面起到數(shù)據(jù)庫服務(wù)器的作用。對數(shù)據(jù)存儲中數(shù)據(jù)的讀寫操作應(yīng)該通過適當?shù)腃ontentProvider傳遞,而不是直接訪問文件或數(shù)據(jù)庫??赡苓€有ContentProvider的“客戶機”和“實現(xiàn)”。下一節(jié)介紹Android視圖,這是Android在移動設(shè)備屏幕上顯示UI元素的機制。視圖Android活動通過視圖顯示UI元素。視圖采用以下布局設(shè)計之一:LinearVertical后續(xù)的每個元素都排在前一個元素下面,形成一個單一列。LinearHorizontal后續(xù)的每個元素都排在前一個元素右邊,形成一個單一行。Relative后續(xù)的每個元素相對于前一個元素有一定的偏移量。Table與HTML表相似的一系列行和列。每個單元格可以包含一個視圖元素。選擇一種布局(或布局的組合)之后,就可以用各個視圖顯示UI。視圖元素由大家熟悉的UI元素組成,包括:ButtonImageButtonEditTextTextView(與標簽相似)CheckBoxRadioButtonGallery和ImageSwitcher(用來顯示多個圖像)ListGridDatePickerTimePickerSpinner(與組合框相似)AutoComplete(具有文本自動補全特性的EditText)視圖是在一個XML文件中定義的。清單3給出一個簡單的LinearVertical布局示例。清單3.簡單的LinearVertical布局<?xmlversion二"1.0"encoding="utf-8"?〉〈LinearLayoutxmlns:android="/apk/res/android".android:orientation二"vertical"android:layout_width="fill_parent"android:layout_height二.7.&7.&9.android:layout_width="fill_parent"android:layout_height二"wrap_contentandroid:text二"Activity1!"/><TextViewandroid:layout_width="fill_parent"android:layout_height二"wrap_content"android:text二"Activity1,secondtextview!/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text二"SwitchToActivity2"id="@+id/switchto2"/>〈/LinearLayout〉復(fù)制代碼注意,每個元素有一個或多個屬于Android名稱空間的屬性。下一節(jié)討論如何獲取AndroidSDK并在Eclipse環(huán)境中配置它。AndroidSoftwareDeveloperKit我們已經(jīng)大致了解了Android平臺,現(xiàn)在討論如何設(shè)置Eclipse環(huán)境來支持Android應(yīng)用程序開發(fā)。本節(jié)討論如何獲取AndroidSDK并在Eclipse環(huán)境中配置它。獲取和安裝Eclipse如果您還沒有安裝Eclipse,那么從EclipseFoundation下載并安裝EclipseIDE最新的穩(wěn)定版(參見參考資料)。安裝包是一個壓縮的文件夾。把這個文件夾的內(nèi)容解壓到您計算機上的適當位置。安裝程序并不在Windows?上創(chuàng)建任何圖標或快捷方式。對于本教程,Eclipse文件夾位于c:\software\eclipse目錄。雙擊eclipse安裝目錄中的eclipse.exe啟動Eclipse。這會啟動IDE。軟件提示您指定一個“工作空間”并建議一個默認位置,比如c:\documentsandsettings\username\workspace。選擇這個位置或者指定另一個工作空間位置。啟動Eclipse之后,單擊主屏幕上的Workbench-Gototheworkbench圖標?,F(xiàn)在該獲取AndroidSDK了。獲取和安裝AndroidSDK在參考資料中找到Android的下載鏈接。
有針對Windows、MacOSX(只有Intel?版)和Linux(i386)的SDK安裝版。選擇適合您平臺的最新的SDK版本。注意,到編寫本教程時,最新的AndroidSDK版本是m3-rc37a。AndroidSDK是一個壓縮的文件夾。下載這個文件夾并把它的內(nèi)容解壓到您計算機上的適當位置。對于本教程,SDK安裝在c:\software\google\android_m3-rc37a。顯然,如果要在MacOSX和Linux上安裝SDK,應(yīng)該安裝在通常安裝開發(fā)工具的位置。Eclipse和AndroidSDK都已經(jīng)安裝好了?,F(xiàn)在應(yīng)該安裝Eclipse插件。獲取并安裝Eclipse插件下面介紹安裝Eclipse插件AndroidDeveloperTools的步驟。注意,Android網(wǎng)站上也提供了安裝說明。更多信息請參見參考資料。按照以下步驟安裝AndroidDeveloperTools:在Eclipse中運行“FindandInstall”特性(在Help>SoftwareUpdates菜單下面)。選擇Searchfornewfeaturestoinstall選項。選擇NewRemoteSite。給站點命名,比如“AndroidDeveloperTools”。在對話框中輸入以下URL:/android/eclipse。注意,這個URL使用HTTPS協(xié)議。這是一個安全的下載。圖1.NewUpdateSite列表中會增加一個新條目并被默認選中。單擊Finish。搜索結(jié)果會顯示AndroidDeveloperTools。選擇DeveloperTools并單擊Next。閱讀并接受許可協(xié)議之后,單擊Next。注意,許可協(xié)議中對于使用GoogleMapsAPI有一個特殊的要求。檢查并接受安裝位置,然后單擊Finish?,F(xiàn)在下載并安裝這個插件。這個插件沒有經(jīng)過數(shù)字簽名(到編寫本教程時),所以只需單擊InstallAll,然后重新啟動Eclipse。配置Eclipse插件重新啟動Eclipse之后,應(yīng)該把這個插件連接到SDK的安裝位置。在Window菜單中選擇Preferences。單擊左邊樹視圖中的Android。在右邊的面板中,指定SDK的安裝位置。本教程使用的安裝位置是c:\software\google\android\m3-rc37a(同樣,在MacOSX和Linux系統(tǒng)上也應(yīng)該使用適當?shù)奈恢茫V付⊿DK安裝位置之后,可以配置另外三部分設(shè)置。下面簡要介紹一下:Build部分中的選項用來自動地重新構(gòu)建資源。保持這個選項的設(shè)置不變oBuild選項可以改變輸出的詳細程度。Normal是默認設(shè)置。DDMS一DalvikDebugMonitorService用來監(jiān)視正在運行的VM。這些設(shè)置指定調(diào)試器用來連接VM的TCP/IP端口號、各個日志記錄級別和選項。默認設(shè)置應(yīng)該是合適的。LogCat一這是在底層Linux系統(tǒng)上創(chuàng)建的一個日志文件??梢栽谶@個對話框中選擇字體。根據(jù)需要調(diào)整這個選項。好了!Eclipse環(huán)境已經(jīng)設(shè)置好了,可以開始創(chuàng)建Android應(yīng)用程序了。構(gòu)建SaySomethingAndroid應(yīng)用程序本節(jié)要使用AndroidDeveloperTools創(chuàng)建一個基本的Android應(yīng)用程序,它稱為SaySomething。創(chuàng)建這個應(yīng)用程序之后,將調(diào)試和運行它。Newproject向?qū)У谝徊绞莿?chuàng)建一個新項目。選擇用來創(chuàng)建Android項目的向?qū)?,如下所示?/p>
圖2.Newproject向?qū)н@個應(yīng)用程序需要:NameLocationPackagenameActivityname—可以認為這是應(yīng)用程序的主“表單”或屏幕Applicationname看看這個新項目。
圖3.新的Android項目這會創(chuàng)建一個默認的應(yīng)用程序,可以構(gòu)建和運行它??梢栽赑ackageExplorer中查看它的組件。PackageExplorerPackageExplorer(在Eclipse的Java透視圖中)顯示Android示例應(yīng)用程序的所有組件,見圖4。
圖4.PackageExplorer需要注意的組件包括:src文件夾包含示例應(yīng)用程序的包,即com.msi.ibmtutorial。R.javaAndroidDeveloperTools自動創(chuàng)建這個文件,它提供訪問Android應(yīng)用程序的各種資源所需的常量。后面會詳細討論R類與資源之間的關(guān)系。SaySomething.java應(yīng)用程序的主活動類的實現(xiàn)。Referencedlibraries包含android.jar,這是AndroidSDK中的Android運行時類的jar文件。res文件夾包含應(yīng)用程序的資源,包括:?圖標布局文件字符串AndriodManifest.xml示例應(yīng)用程序的部署描述符。接下來,詳細研究一下源代碼。
應(yīng)用程序的主活動這個示例應(yīng)用程序由一個活動組成,即SaySomething。正如前面提到的,SaySomething類是在SaySomething.java文件中實現(xiàn)的。清單4.SaySomething.javapackagecom.msi.ibmtutorial;2.importandroid.app.Activity;importandroid.os.Bundle;5.publicclassSaySomethingextendsActivityTOC\o"1-5"\h\z{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(Bundleicicle){super.onCreate(icicle);setContentView(R.layout.main);}}復(fù)制代碼在這個源代碼片段中,要注意幾點:SaySomething是一個普通的Java類,包含包和導入語句。SaySomething擴展android.app包中的Android基類Activity。onCreate()方法是這個活動的入口點,它接受一個Bundle類型的參數(shù)0Bundle類本質(zhì)上是map或hashmap的包裝器。在這個參數(shù)中傳遞構(gòu)造活動所需的元素。本教程不討論這個參數(shù)。setContentView(..)負責用R.layout.main參數(shù)創(chuàng)建主UI°R.layout.main是應(yīng)用程序資源中主布局的標識符。下一節(jié)討論示例應(yīng)用程序的資源。應(yīng)用程序的資源正如前面提到的,Android中的資源放在項目的res子目錄中。資源分為三類
Drawables這個文件夾包含圖形文件,比如圖標和位圖。Layouts這個文件夾包含表示應(yīng)用程序布局和視圖的XML文件。后面會詳細研究這些文件。Values這個文件夾包含strings.xml文件。這是為應(yīng)用程序?qū)崿F(xiàn)字符串本地化的主要方法。下一節(jié)研究main.xml文件,了解示例應(yīng)用程序的UI資源。main.xml這個示例應(yīng)用程序包含一個活動和一個視圖。應(yīng)用程序包含一個名為main.xml的文件,它代表活動的主UI的視覺方面。注意,在main.xml中沒有指定在哪里使用這個布局。這意味著,如果需要的話,可以在多個活動中使用它。清單5給出布局文件的內(nèi)容。清單5.布局文件<?xmlversion二"1.0"encoding二"utf-8"?〉〈LinearLayoutxmlns:android="/apk/res/android"android:orientation二"vertical"android:layout_width="fill_parent"android:layout_height二"fill_parent">〈TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text二"HelloWorld,SaySomething"/>〈/LinearLayout〉復(fù)制代碼這是最簡單的布局,其中只有一個垂直的線性布局,這意味著所有元素排成一列。這里有一個TextView元素,它與其他開發(fā)環(huán)境中的標簽類似。TextView代表不可編輯的靜態(tài)文本注意,每個視圖元素(比如這個示例中的LinearLayout和TextView)都有屬于Android名稱空間的屬性。一些屬性是所有視圖元素都有的,比如android:layout_width和android:layout_height。這些屬性可以采用的值是:fill_parent使視圖元素占滿可用的空間。也可以認為這就是“拉伸”。wrap_content這個值讓Android把元素一個接一個地排列,不進行拉伸。在構(gòu)建期間,對所有資源進行編譯。編譯過程的輸出之一是R.java文件,這個文件向應(yīng)用程序的其余部分提供資源。下面討論R.java文件。
R.javaR.java文件是在構(gòu)建時自動創(chuàng)建的,所以不要手工修改它,因為所有修改都會丟失。清單6給出這個示例應(yīng)用程序的R.java文件。清單6.R.java文件/*AUTO-GENERATEDFILE.DONOTMODIFY.**Thisclasswasautomaticallygeneratedbythe*aapttoolfromtheresourcedataitfound.It*shouldnotbemodifiedbyhand.*/7.packagecom.msi.ibmtutorial;9.publicfinalclassR{public static final class attr{TOC\o"1-5"\h\z}public static final class drawable {publicstaticfinalinticon=0x7f020000;}public static final class layout {publicstaticfinalintmain=0x7f030000;}public staticfinalclassstring{publicstaticfinalintapp_name=0x7f040000;}}復(fù)制代碼R類包含一些匿名子類,每個子類包含前面描述的各種資源的標識符。注意,這些類都是靜態(tài)的。請注意R.layout.main代表的元素。這個標識符代表由main.xml定義的布局。在活動的onCreate方法中使用過這個值:setContentView(R.layout.main);。這就是在運行時把特定的活動(在這個示例中是SayAnything)和特定的布局(主布局)聯(lián)系在一起的方法。構(gòu)建應(yīng)用程序在默認情況下,每次保存文件時,都將對它們進行編譯。世rw.jcjrf至]SaySomrfhng.^vqS圜世rw.jcjrfpofkzgrcd^.nis1?ibmmt口uiciJUhini|jDrlarLdrolil.app.Ate.Lvie.yjnpu^iiLCcla^sS&ySoiirethingextrntl^Accivlcve/**CalXe*^wh&Htheai亡c.1vieyisfitbetre&teda*/SOvijccidcpulkllDvoidonCreate(B1eicicleJ(■Ptobter^f'翼問兀&K<ar如2白?山務(wù)dWib-rir^ja卅3Pith^iyScrfnethi...無戚注匕訥恤亡忙疋譚trsifixti… “iiSayScmrthi.B?iHnfcutor^/^rc/tcsT^msV'trn.r,ine11日生Errors(2jtems)OSebCtjntfirJtc^hotbfrFesaivtdtd占gp白G5^nt?xerrorontcfcefi"Ybcw^-a:卻cctcdafterthetohm我們在源代碼中引入了一個錯誤,即在setContent和View之間加了一個空格。在保存這個文件時,它被編譯并在屏幕底部的Problems面板中顯示錯誤。在源代碼中糾正這個錯誤之后,應(yīng)用程序就能夠成功編譯,并從問題列表中刪除錯誤。AndroidManifest.xmlAndroidManifest.xml文件是Android應(yīng)用程序的部署描述符。這個文件列出應(yīng)用程序中包含的所有活動、服務(wù)、內(nèi)容提供器和接收器,以及應(yīng)用程序支持的IntentFilter。下面是這個示例應(yīng)用程序的完整的AndroidManifest.xml文件。清單7.AndroidManifest.xml文件<?xmlversion二"1.0"encoding二"utf-8"?〉〈manifestxmlns:android="/apk/res/android"package二"com.msi.ibmtutorial"〉〈applicationandroid:icon="@drawable/icon"><activityclass二".SaySomething"android:label="@string/app_name"〉〈intent-filter><actionandroid:value="ent.action.MAIN"/>〈categoryandroid:value="ent.category.LAUNCHER"/></intent-filter></activity〉〈/application></manifest>復(fù)制代碼請注意以下情況:這里指定了源文件中的包名。這里采用與Java源文件和導入語句相似的模式。<manifest>標記的實際作用是“導入”這個包中的類。在這個文件中,所有非完全限定的類都屬于package屬性指定的包?!碼pplication>標記的一個屬性引用了應(yīng)用程序的一個資源。請注意drawable標識符前面的@符號。這里的意思是,在應(yīng)用程序資源的drawable文件夾中尋找名為“icon”的資源。<activity>標記包含以下屬性和值:class屬性表示實現(xiàn)這個活動的Java類。android:label是應(yīng)用程序的名稱。注意,它來自一個字符串資源。string.xml文件包含應(yīng)用程序的本地化字符串。<intent-filter>表示應(yīng)用程序中可用的IntentFilter。這是Android應(yīng)用程序中最常見的IntentFilter。這個過濾器的實際意思是,它實現(xiàn)“主”操作(也就是入口點),而且它位于OS的啟動器中。這意味著可以在Android設(shè)備上像啟動其他應(yīng)用程序一樣,從應(yīng)用程序主列表中啟動它。下一節(jié)討論如何在Eclipse中的Android模擬器上啟動應(yīng)用程序。運行應(yīng)用程序應(yīng)用程序已經(jīng)成功地編譯了,現(xiàn)在該運行這個示例應(yīng)用程序了。在Eclipse中選擇OpenRunDialog或工具欄上的快捷按鈕。這會打開一個對話框,可以在這里創(chuàng)建啟動配置。選擇AndroidApplication選項并單擊New的圖標。圖6顯示本教程示例所用的值。
圖6.Run對話框指定配置名稱。本教程使用的名稱是TutorialConfiguration。在可用項目列表中選擇ibmtutorial項目(單擊Browse可以看到可用項目)。在下拉列表中選擇啟動活動?,F(xiàn)在選擇Emulator選項卡,根據(jù)需要指定模擬器設(shè)置??梢员3帜J設(shè)置。有兩個設(shè)置需要注意,見圖7。
圖7.Run對話框,Emulator選項卡有幾種可供選擇的屏幕大小和方向,還有網(wǎng)絡(luò)選擇。如果運行應(yīng)用程序的移動設(shè)備的因特網(wǎng)連接速度不同,網(wǎng)絡(luò)選擇就很重要了。在構(gòu)造應(yīng)用程序原型時,選擇完整網(wǎng)絡(luò)速度而且沒有延遲。開發(fā)了主要功能之后,最好在比較真實的網(wǎng)絡(luò)環(huán)境中進行測試,看看應(yīng)用程序的響應(yīng)速度如何。選擇Run運行示例應(yīng)用程序。
圖8.模擬器應(yīng)用程序已經(jīng)在模擬器上運行了,現(xiàn)在看看幕后發(fā)生的情況°DalvikDebugMonitorService(DDMS)將會幫助檢查應(yīng)用程序的運行情況。調(diào)試應(yīng)用程序要想檢查正在運行的應(yīng)用程序中發(fā)生了什么情況,就需要查看正在運行的DalvikVM。在Eclipse中,選擇Window>OpenPerspective>Other。在出現(xiàn)的對話框中選擇DDMS。這會在Eclipse中打開一個新的透視圖,其中有許多有趣的窗口。下面簡要介紹一下DDMS透視圖中提供的資源:LogCat是一個日志文件,它記錄VM中發(fā)生的活動。應(yīng)用程序可以通過Log.i(tag,message);在這個日志文件中添加自己的日志項,其中的tag和message都是Java字符串。Log類屬于android.util.Log包。圖9顯示LogCat。
圖9.LogCatL09TiffiHpidtagKsssage01-1114-44D71;Andro...>>>>>>>>>>>>>>AndzoidRuntineSTA01-1114.44D712jd^PJDCTP1 0^part8QGS01-1114:44_D712Jtndro... registeTitijnativefutiDtions 01-1114:44D712Andre—Shut11ngdownVKDl-1114.-14C:712dalvikvsDas:trayJavaVKvaiEingforftsn-dae01-1114:44D720Andro...A^drcidEuntiise5TA..01-1114:44D7S&jdvpJDWP1istenia,ngonport8005-01-1114.44…D720Andra... regLsteritignativefutictions—01-1114:44…D720Andro...ShuttingdovnVKDDMS中的另一個方便的工具是文件管理器,可以用它訪問模擬器的文件系統(tǒng)。圖10顯示在模擬器上部署本教程示例應(yīng)用程序的位置。圖10.在模擬器上部署的示例應(yīng)用程序Tire InfoetfrdatA2057^242Il7:3&diff-AWK^-X&w2O07-1Z-L217:I6dpwWwS—SCl ——3->3-t?■扌冒:u_°Hrtdcr曲砂L21592ODM1-L5L4:29-rw-ivr-iw-corn-.-msL^T^^:±?LUkaknCMifediwsTWxrwx曲2008^1-Li0E;34dnwwx—x宙'凸d<MMhb^d2008-Hl-LIOS測diw>fwxrwx&dim200a-ClL-Lii05:駅dmwrwGTwx20跡小"05:3idm.ajwxrwxtjtfIcsHfoufrf2008-411-11L4:2?rdiw-rw-fw-出-iwc2007-12-L2旳孕drwijwcrwxs?_'■■2ma-<jL-LIQ5:3SdraMTWcriMXtimejnone200S-01-LB覺:羽-rw-iMfrw-可£:■sysEo2COM2-L217:JSdn¥sr-xr-xaL-'"iPPawMtiz(7:34divw-w-x<1廊即悴r.apkan?-j?-L£■fw-f^-r—tpm平*…GCprt^ctSflpl:?W?6MMMS17:15-TW-ff-f?Cipm.^QQ^t.■■CiUonMrt六口vWcf■砂KsiaOTM2-L2IMScom.gciQ^e...2WM?42P:3S卅”『“ccmflwgte...<iFAmIl酹K0M?42I?:I5葉w-F??寸??**峠*妙MM2-12[MS□&?gfeftpp5Prcvdtrg:品200?-]L?:]&燈HWTW.JpkWS32t?7-]?4ZL7:15■rw-r-r--twi-Twate,"CiimPr&Vfcfer.ipt:L百冊曲ORLN17:?rw-F-f-com-go^..sCMaps如:1716132tM?-12>L217:]??COm-QQOdte.口MtftfePrffpwJw.apk2Q3G72007-1J42L7:J50Pbwe.epk*2?0Q2W74J42L7:16屮陽ar”(om-oooah..-.a5tttifflsPwrt>T.堿LI3K2007-3242117:1*5怦知zc^-gc&afe-<-.燈Teiepbw樺如dee卻kZI27I2W7-12-LZL7:35彳屮fccmjijQogte...<1瀚ppSetYk匕疑.19E3ie2007-12-1217:16comygoo^-.□硏^WpSeflriW郵k6?1S2007-1Z42L7:36-fw-f-r-cwniXMtfs...a&E>n2007-12-L2li7;Hdrt^^-Mr-Kbulhl.prep3172OO7-1Z-L2L7:3Od-w-t-r-衛(wèi)±L**■.4i>LC1p*4-a-用戶應(yīng)用程序部署在/data/app目錄中,而Android內(nèi)置的應(yīng)用程序部署在/system/app目錄中。在DDMS中還可以查看正在運行的進程。
圖11.正在運行的進程列表全面討論Android應(yīng)用程序的調(diào)試超出了本教程的范圍,更多信息請參見參考資料。創(chuàng)建內(nèi)容提供器和GoogleMaps應(yīng)用程序您已經(jīng)看到了一個完整的應(yīng)用程序示例,現(xiàn)在簡要討論一下更加復(fù)雜的應(yīng)用程序。內(nèi)容提供器和GoogleMaps本教程中討論的第二個應(yīng)用程序適用于提供上門服務(wù)的專業(yè)人員,比如設(shè)備維修技術(shù)人員這些人必須找到去客戶地址的路線。這個應(yīng)用程序使用Android內(nèi)置的聯(lián)系人數(shù)據(jù)庫作為記錄存儲庫。本節(jié)將講解如何訪問內(nèi)容提供器中的數(shù)據(jù),還將看看intent的效果。我們將用聯(lián)系人數(shù)據(jù)庫中的地址數(shù)據(jù)執(zhí)行GoogleMaps搜索。為了讓這個應(yīng)用程序在Android模擬器上正確運行,必須記錄一些聯(lián)系人,而且必須填寫家庭地址字段。圖12顯示模擬器中與聯(lián)系人應(yīng)用程序相關(guān)的條目。
圖12.模擬器中與聯(lián)系人應(yīng)用程序相關(guān)的條目下面是這個應(yīng)用程序的一個代碼片段。注意,這個應(yīng)用程序的主Activity類擴展ListActivity。這是因為我們需要在列表中顯示信息。清單8.第一個代碼片段publicclassMobileServiceCallContactsextendsListActivity{finalStringtag=""MSCC";
.&1.22.23./**Calledwhentheactivityisfirstcreated.*/@0verridepublicvoidonCreate(Bundleicicle){super.onCreate(icicle);setContentView(R.layout.main);//GetacursorwithallpeopleCursorc=getContentResolver().query(People.CONTENT_URI,null,null,null,null);startManagingCursor(c);ListAdapteradapter=newSimpleCursorAdapter(this,android.R.layout.simple_list_item_1,c,newString[]{People.NAME},newint[]{android.R.id.text1});setListAdapter(adapter);}}復(fù)制代碼注意,這里使用游標類查詢聯(lián)系人數(shù)據(jù)庫。這個“結(jié)果集”游標通過ListAdapter類鏈接到UI。圖13顯示當設(shè)備上記錄了聯(lián)系人時應(yīng)用程序的效果。注意,這個屏幕上的記錄沒有排序。
圖13.應(yīng)用程序的運行效果可以通過鼠標單擊、按模擬器的中間按鈕或按鍵盤上的Enter鍵選擇一個聯(lián)系人。選擇聯(lián)系人之后,代碼必須查詢所選聯(lián)系人的地址。這要使用覆蓋的onListItemClick()方法。這個方法的實現(xiàn)有四個重要參數(shù),其中最重要的是dbidentifier。因為游標綁定到UI,所以在調(diào)用這個方法時,它實際上會獲得底層數(shù)據(jù)源的標識符??梢允褂胐bidentifier字段在聯(lián)系人數(shù)據(jù)庫中查詢所需的信息。還可以使用它啟動聯(lián)系人應(yīng)用程序,所用的intent見清單9中被注釋掉的代碼。清單9.覆蓋的onListItemClick()方法@OverrideprotectedvoidonListitemClick(ListViewlist,Viewview,intposition,longdbidentifier){super.onLis
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年五月份文物數(shù)字化重建模型權(quán)屬處理條款
- 二零二五版房地產(chǎn)增資入股合作協(xié)議書
- 低價物流倉庫出租合同樣本
- 帷幕灌漿工程準灌證
- 入股股東轉(zhuǎn)讓合同樣本
- 仿古瓷磚采購合同樣本
- 新起點小學一年級英語教案-Unit3-Animals
- 智慧廠區(qū)方案
- 石子采購合同
- 培訓機構(gòu)管理制度匯編
- 車床教學講解課件
- 政策目標確立和方案制定概述課件
- 六年級下冊英語課件-Unit 4 Lesson 23 Good-bye-冀教版(共19張PPT)
- 硬筆書法全冊教案共20課時
- 張波-超高溫陶瓷課件
- 特洛伊戰(zhàn)爭(英文版)
- 近代以來廣州外貿(mào)產(chǎn)業(yè)的發(fā)展歷程
- DBJ04-T 410-2021城市停車場(庫)設(shè)施配置標準
- 車站主體結(jié)構(gòu)模板支架專項施工方案--終稿(專家意見修改的)-副本
- 保潔崗位培訓
- 麗聲北極星自然拼讀繪本第二級 Pad, Pad, Pad! 課件
評論
0/150
提交評論