用 Eclipse 開發 Android 應用程序

轉自:http://www.apkbus.com/android-13828-1-1.htmlphp

開始以前
本教程介紹如何在 Eclipse 環境中進行 Android 應用程序開發,包括兩個示例應用程序。第一個示例是一個基本的應用程序,涉及構建和調試的全部階段。第二個應用程序示例涉及比較複雜的 Android 特性,包括聯繫人搜索和 Google Maps 地址查找。要想從本教程得到最大收益,具有移動開發經驗會有幫助,但不是必需的。開發 Android 應用程序須要 Java™ 編程技能,可是對於本教程不是必需的。
關於本教程
咱們爲何要關注 Android?有兩個緣由使 Android 成爲重要的平臺。首先,Google 引入了 Android,它在很短期內就得到了市場的關注。Google 正在進軍移動市場。它在這個市場上採起的第一個行動就是發佈 Android 和 Open Handset Alliance,這是一個使人印象深入的起點。第二,Android 不只僅是另外一種包含電話、菜單和觸摸屏功能的移動平臺。您將在本教程中瞭解到,Android 提供了一種不一樣的應用程序開發方法。因爲能夠對請求的操做和代碼進行運行時綁定,Android 的體系結構支持高度可定製的軟件環境。不管是考慮市場因素仍是 Android 的技術方面,它都是一個值得研究的平臺。
本教程分爲如下幾節:
  • Android 基礎知識和必需的工具
  • Android Software Developer Kit
  • 構建和調試 SaySomething Android 應用程序
  • 建立內容提供器和 Google Maps 應用程序



系統需求
本教程須要結合使用幾種技術。

Eclipse 平臺Eclipse 是一個運行插件的平臺。您應該安裝 Eclipse Classic 的最新版本(本教程使用 V3.3.1)。Android Developer Tools按照 安裝 Android SDK 中的說明安裝 Android Developer Tools(Eclipse 插件)。
源代碼本教程中的源代碼片斷包括:

html

  • AndroidManifest.xml(片斷)— 這個文件是 Android 應用程序的應用程序部署描述符。
  • IntentReceiver — 演示 IntentReceiver 的實現,這個類處理 AndroidManifest.xml 文件中 IntentFilter 標記所公佈的 intent。
  • SaySomething.java — 實現一個 Android 活動,這是本教程的示例應用程序的主要入口點。
  • Main.xml — 這個文件包含 Android 活動所用的視覺元素或資源。
  • R.java — 這個文件是由 Android Developer Tools 自動生成的,它把視覺資源 「鏈接」 到 Java 源代碼。
  • AndroidManifest.xml(完整)— 這是完整的 AndroidManfest.xml 文件,包含每一個重要元素的描述。
  • MobileServiceCallContacts.java — 這個文件包含的代碼顯示聯繫人並對用戶輸入作出反應,執行 Google Maps 地址查找。






Android 簡介
在討論 Eclipse 插件和開發 Android 應用程序以前,咱們先看看 Android 的體系結構和一些重要的術語,這會對本教程後面的討論和您本身構建 Android 應用程序有幫助。
Android 術語
在 Eclipse 環境中開發 Android 應用程序須要瞭解 Eclipse 環境和 Android 平臺的知識。瞭解如下術語會有助於用 Eclipse 插件開發 Android 應用程序。

Open Handset Alliance這是一個由 Google 公司主導的組織,它由許多公共和私人組織組成。Android這是 Open Handset Alliance 的主打產品。它是一種針對移動設備的開放源碼操做環境。模擬器模擬另外一個系統的軟件工具 — 這經常是在我的計算機(IBM®、Mac、Linux®)上運行的一個環境,它模擬另外一個環境,好比移動計算設備。Linux一種開放源碼的操做系統內核,許多計算平臺都使用這種操做系統,包括服務器、桌面計算機、網絡設備和移動計算設備。Android 在 Linux 內核上運行。Dalvik Virtual MachineDalvik VM 是 Android 產品組合中的一種操做環境,它在運行時解釋應用程序代碼。Dalvik VM 與 Java VM 類似,可是二者不兼容。java


 

Android 基礎知識和必需的工具
Android 是一種針對移動平臺的開放源碼操做系統。到編寫本教程時,它是一種純軟件的平臺,沒有可用的硬件設備。
Android 平臺被稱爲一個產品組合,由於它是一系列組件的集合,包括:
  • 基於 Linux 內核的操做系統
  • Java 編程環境
  • 工具集,包括編譯器、資源編譯器、調試器和模擬器
  • 用來運行應用程序的 Dalvik VM
簡要介紹了 Android 平臺的體系結構以後,咱們來從市場的角度看看這個平臺的一些重要特性。

 


 

Android 爲何很重要?
自從 Android 和最初的 SDK 發佈以來,計算機技術新聞界一直很是關注 Android。Android 之因此重要主要有兩個緣由。
Android 是 Google 進軍移動市場的主要行動。移動應用程序領域競爭激烈,新的競爭者很難涉足。Google 擁有大量資源和強大的品牌實力,有能力涉足任何市場。Google 進軍移動市場已經好幾年了。Android 原來屬於另外一家公司,Google 經過收購這家公司大大提升了在移動市場上的競爭力。Google 的任何行動都會受到關注,並且引入新平臺也很引人注目。Android 同時具有這兩個因素。
第二個緣由是 Android 的應用程序模型不同凡響。Android 應用程序並非須要大量單擊操做的純粹的菜單式應用程序。Android 應用程序中確實有菜單和按鈕,可是 Android 在體系結構中引入了一種新穎的設計元素 intent。

 




intent
intent 是一種構造,應用程序能夠經過它發出請求,這就像是發出求助信號。intent 可能像下面這樣:
"Wanted: An application to help me look up a contact" 或 "Wanted: An application to help me display this image" 或 "Wanted: An application to perform this geographic-based search"
應用程序能夠按照類似或互補的方式進行註冊,代表它們有能力或有興趣執行各類請求或 intent。好比:
"Available: Application ready and willing to present contact records in clear, concise manner" 或 "Available: Application ready and willing to perform a geographic search"
這些是 IntentFilter 的示例,下面將要討論。




 

IntentFilter
應用程序經過一個稱爲 IntentFilter 的構造聲明它們可以執行某些類型的操做。IntentFilter 能夠在運行時進行註冊,也能夠在 AndroidManifest.xml 文件中設置。下面的代碼片斷取自一個對 SMS(文本)消息進行響應的 Android 應用程序:


清單 1. 對 SMS 進行響應的 Android 應用程序android

  1.     <receiver class=".MySMSMailBox" >
  2.             <intent-filter>
  3.             <action android:value="android.provider.Telephony.SMS_RECEIVED" />
  4.             </intent-filter>
  5.       </receiver>
複製代碼

 

簡要介紹 intent 和 IntentFilter 以後,下一節介紹 Android 應用程序的四種主要類型。

 




Android 應用程序 — 概述
咱們來看看 Android 應用程序的四種主要類型:活動、服務、接收器和 ContentProvider。咱們還要看看顯示用戶界面(UI)元素的視圖。
活動
活動是最經常使用的 Android 應用程序形式。活動在一個稱爲視圖 的類的幫助下,爲應用程序提供 UI。視圖類實現各類 UI 元素,好比文本框、標籤、按鈕和計算平臺上常見的其餘 UI 元素。
一個應用程序能夠包含一個或多個活動。這些活動一般與應用程序中的屏幕造成一對一關係。
應用程序經過調用 startActivity() 或 startSubActivity() 方法從一個活動轉移到另外一個活動。若是應用程序只需 「切換」 到新的活動,就應該使用前一個方法。若是須要異步的調用/響應模式,就使用後一個方法。在這兩種狀況下,都須要經過方法的參數傳遞一個 intent。
由操做系統負責決定哪一個活動最適合知足指定的 intent。

 


 

服務和接收器
與其餘多任務計算環境同樣,「在後臺」 運行着一些應用程序,它們執行各類任務。Android 把這種應用程序稱爲 「服務」。服務是沒有 UI 的 Android 應用程序。
接收器是一個應用程序組件,它接收請求並處理 intent。與服務同樣,接收器在通常狀況下也沒有 UI 元素。接收器一般在 AndroidManifest.xml 文件中註冊。清單 2 是接收器代碼的示例。注意,接收器的類屬性是負責實現這個接收器的 Java 類。


清單 2. 接收器代碼

數據庫

  1. package com.msi.samplereceiver;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.content.IntentReceiver;
  5. public class myreceiver extends IntentReceiver 
  6. {
  7.   public void onReceiveIntent(Context arg0, Intent arg1) 
  8.   {
  9.     // do something when this method is invoked.
  10.   }
  11. }
複製代碼



用 ContentProvider 進行數據管理
ContentProvider 是 Android 的數據存儲抽象機制。咱們以移動設備上常見的一種數據爲例:地址簿或聯繫人數據庫。地址簿包含全部聯繫人及其電話號碼,用戶在使用手機時可能須要使用這些數據。ContentProvider 對數據存儲的訪問方法進行抽象。ContentProvider 在許多方面起到數據庫服務器的做用。對數據存儲中數據的讀寫操做應該經過適當的 ContentProvider 傳遞,而不是直接訪問文件或數據庫。可能還有 ContentProvider 的 「客戶機」 和 「實現」。
下一節介紹 Android 視圖,這是 Android 在移動設備屏幕上顯示 UI 元素的機制。

 




視圖
Android 活動經過視圖顯示 UI 元素。視圖採用如下佈局設計之一:

LinearVertical後續的每一個元素都排在前一個元素下面,造成一個單一列。LinearHorizontal後續的每一個元素都排在前一個元素右邊,造成一個單一行。Relative後續的每一個元素相對於前一個元素有必定的偏移量。Table與 HTML 表類似的一系列行和列。每一個單元格能夠包含一個視圖元素。編程

選擇一種佈局(或佈局的組合)以後,就能夠用各個視圖顯示 UI。
視圖元素由你們熟悉的 UI 元素組成,包括:
  • Button
  • ImageButton
  • EditText
  • TextView(與標籤類似)
  • CheckBox
  • Radio Button
  • Gallery 和 ImageSwitcher(用來顯示多個圖像)
  • List
  • Grid
  • DatePicker
  • TimePicker
  • Spinner(與組合框類似)
  • AutoComplete(具備文本自動補全特性的 EditText)
視圖是在一個 XML 文件中定義的。清單 3 給出一個簡單的 LinearVertical 佈局示例。


清單 3. 簡單的 LinearVertical 佈局安全

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <TextView  
  8.     android:layout_width="fill_parent" 
  9.     android:layout_height="wrap_content" 
  10.     android:text="Activity 1!"
  11.     />
  12. <TextView  
  13.     android:layout_width="fill_parent" 
  14.     android:layout_height="wrap_content" 
  15.     android:text="Activity 1, second text view!"
  16.     />
  17. <Button
  18.     android:layout_width="wrap_content" 
  19.     android:layout_height="wrap_content" 
  20.     android:text="Switch To Activity 2"
  21.   id="@+id/switchto2"
  22.   />    
  23. </LinearLayout>
複製代碼
注意,每一個元素有一個或多個屬於 Android 名稱空間的屬性。
下一節討論如何獲取 Android SDK 並在 Eclipse 環境中配置它。

 




Android Software Developer Kit
咱們已經大體瞭解了 Android 平臺,如今討論如何設置 Eclipse 環境來支持 Android 應用程序開發。本節討論如何獲取 Android SDK 並在 Eclipse 環境中配置它。
獲取和安裝 Eclipse
若是您尚未安裝 Eclipse,那麼從 Eclipse Foundation 下載並安裝 Eclipse IDE 最新的穩定版(參見 參考資料)。安裝包是一個壓縮的文件夾。把這個文件夾的內容解壓到您計算機上的適當位置。安裝程序並不在 Windows® 上建立任何圖標或快捷方式。對於本教程,Eclipse 文件夾位於 c:\software\eclipse 目錄。
雙擊 eclipse 安裝目錄中的 eclipse.exe 啓動 Eclipse。這會啓動 IDE。軟件提示您指定一個 「工做空間」 並建議一個默認位置,好比 c:\documents and settings\username\workspace。選擇這個位置或者指定另外一個工做空間位置。
啓動 Eclipse 以後,單擊主屏幕上的 Workbench - Go to the workbench 圖標。
如今該獲取 Android SDK 了。

 




獲取和安裝 Android SDK
在 參考資料 中找到 Android 的下載連接。
有針對 Windows、Mac OS X(只有 Intel® 版)和 Linux(i386)的 SDK 安裝版。選擇適合您平臺的最新的 SDK 版本。注意,到編寫本教程時,最新的 Android SDK 版本是 m3-rc37a。
Android SDK 是一個壓縮的文件夾。下載這個文件夾並把它的內容解壓到您計算機上的適當位置。對於本教程,SDK 安裝在 c:\software\google\android_m3-rc37a。顯然,若是要在 Mac OS X 和 Linux 上安裝 SDK,應該安裝在一般安裝開發工具的位置。
Eclipse 和 Android SDK 都已經安裝好了。如今應該安裝 Eclipse 插件。

 




獲取並安裝 Eclipse 插件
下面介紹安裝 Eclipse 插件 Android Developer Tools 的步驟。注意,Android 網站上也提供了安裝說明。更多信息請參見 參考資料。
按照如下步驟安裝 Android Developer Tools:
  • 在 Eclipse 中運行 「Find and Install」 特性(在 Help > Software Updates 菜單下面)。
  • 選擇 Search for new features to install 選項。
  • 選擇 New Remote Site。給站點命名,好比 「Android Developer Tools」。在對話框中輸入如下 URL:https://dl-ssl.google.com/android/eclipse。注意,這個 URL 使用 HTTPS 協議。這是一個安全的下載。 

    圖 1. New Update Site
    <ignore_js_op>
  • 列表中會增長一個新條目並被默認選中。單擊 Finish。搜索結果會顯示 Android Developer Tools。選擇 Developer Tools 並單擊 Next。
  • 閱讀並接受許可協議以後,單擊 Next。注意,許可協議中對於使用 Google Maps API 有一個特殊的要求。
  • 檢查並接受安裝位置,而後單擊 Finish。
如今下載並安裝這個插件。這個插件沒有通過數字簽名(到編寫本教程時),因此只需單擊 Install All,而後從新啓動 Eclipse。






配置 Eclipse 插件
從新啓動 Eclipse 以後,應該把這個插件鏈接到 SDK 的安裝位置。在 Window 菜單中選擇 Preferences。單擊左邊樹視圖中的Android。在右邊的面板中,指定 SDK 的安裝位置。本教程使用的安裝位置是 c:\software\google\android\m3-rc37a(一樣,在 Mac OS X 和 Linux 系統上也應該使用適當的位置)。
指定 SDK 安裝位置以後,能夠配置另外三部分設置。下面簡要介紹一下:
  • Build 部分中的選項用來自動地從新構建資源。保持這個選項的設置不變。Build 選項能夠改變輸出的詳細程度。Normal 是默認設置。
  • DDMS — Dalvik Debug Monitor Service 用來監視正在運行的 VM。這些設置指定調試器用來鏈接 VM 的 TCP/IP 端口號、各個日誌記錄級別和選項。默認設置應該是合適的。
  • LogCat — 這是在底層 Linux 系統上建立的一個日誌文件。能夠在這個對話框中選擇字體。根據須要調整這個選項。
好了!Eclipse 環境已經設置好了,能夠開始建立 Android 應用程序了。






構建 SaySomething Android 應用程序
本節要使用 Android Developer Tools 建立一個基本的 Android 應用程序,它稱爲 SaySomething。建立這個應用程序以後,將調試和運行它。
New project 嚮導
第一步是建立一個新項目。選擇用來建立 Android 項目的嚮導,以下所示。


圖 2. New project 嚮導
<ignore_js_op> 

服務器

這個應用程序須要:
  • Name
  • Location
  • Package name
  • Activity name — 能夠認爲這是應用程序的主 「表單」 或屏幕
  • Application name
看看這個新項目。


圖 3. 新的 Android 項目
<ignore_js_op> 

網絡

這會建立一個默認的應用程序,能夠構建和運行它。能夠在 Package Explorer 中查看它的組件。

 




Package Explorer
Package Explorer(在 Eclipse 的 Java 透視圖中)顯示 Android 示例應用程序的全部組件,見圖 4。


圖 4. Package Explorer
<ignore_js_op> 

app

須要注意的組件包括:

src 文件夾包含示例應用程序的包,即 com.msi.ibmtutorial。R.javaAndroid Developer Tools 自動建立這個文件,它提供訪問 Android 應用程序的各類資源所需的常量。後面會詳細討論 R 類與資源之間的關係。SaySomething.java應用程序的主活動類的實現。Referenced libraries包含 android.jar,這是 Android SDK 中的 Android 運行時類的 jar 文件。res 文件夾包含應用程序的資源,包括:

  • 圖標
  • 佈局文件
  • 字符串

AndriodManifest.xml示例應用程序的部署描述符。

接下來,詳細研究一下源代碼。

 




應用程序的主活動
這個示例應用程序由一個活動組成,即 SaySomething。正如前面提到的,SaySomething 類是在 SaySomething.java 文件中實現的。


清單 4. SaySomething.java

  1. package com.msi.ibmtutorial;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. public class SaySomething extends Activity 
  5. {
  6.     /** Called when the activity is first created. */
  7.     @Override
  8.     public void onCreate(Bundle icicle) 
  9.    {
  10.         super.onCreate(icicle);
  11.         setContentView(R.layout.main);
  12.     }
  13. }
複製代碼






在這個源代碼片斷中,要注意幾點:
  • SaySomething 是一個普通的 Java 類,包含包和導入語句。
  • SaySomething 擴展 android.app 包中的 Android 基類 Activity。
  • onCreate() 方法是這個活動的入口點,它接受一個 Bundle 類型的參數。Bundle 類本質上是 map 或 hashmap 的包裝器。在這個參數中傳遞構造活動所需的元素。本教程不討論這個參數。
  • setContentView(..) 負責用 R.layout.main 參數建立主 UI。R.layout.main 是應用程序資源中主佈局的標識符。
下一節討論示例應用程序的資源。

 




應用程序的資源
正如前面提到的,Android 中的資源放在項目的 res 子目錄中。資源分爲三類:

Drawables這個文件夾包含圖形文件,好比圖標和位圖。Layouts這個文件夾包含表示應用程序佈局和視圖的 XML 文件。後面會詳細研究這些文件。Values這個文件夾包含 strings.xml 文件。這是爲應用程序實現字符串本地化的主要方法。

下一節研究 main.xml 文件,瞭解示例應用程序的 UI 資源。






main.xml
這個示例應用程序包含一個活動和一個視圖。應用程序包含一個名爲 main.xml 的文件,它表明活動的主 UI 的視覺方面。注意,在 main.xml 中沒有指定在哪裏使用這個佈局。這意味着,若是須要的話,能夠在多個活動中使用它。清單 5 給出佈局文件的內容。


清單 5. 佈局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <TextView  
  8.     android:layout_width="fill_parent" 
  9.     android:layout_height="wrap_content" 
  10.     android:text="Hello World, SaySomething"
  11.     />
  12. </LinearLayout>
複製代碼

 

這是最簡單的佈局,其中只有一個垂直的線性佈局,這意味着全部元素排成一列。這裏有一個 TextView 元素,它與其餘開發環境中的標籤相似。TextView 表明不可編輯的靜態文本。
注意,每一個視圖元素(好比這個示例中的 LinearLayout 和 TextView)都有屬於 Android 名稱空間的屬性。一些屬性是全部視圖元素都有的,好比 android:layout_width 和 android:layout_height。這些屬性能夠採用的值是:

fill_parent使視圖元素佔滿可用的空間。也能夠認爲這就是 「拉伸」。wrap_content這個值讓 Android 把元素一個接一個地排列,不進行拉伸。

在構建期間,對全部資源進行編譯。編譯過程的輸出之一是 R.java 文件,這個文件嚮應用程序的其他部分提供資源。下面討論 R.java 文件。

 




R.java
R.java 文件是在構建時自動建立的,因此不要手工修改它,由於全部修改都會丟失。清單 6 給出這個示例應用程序的 R.java 文件。


清單 6. R.java 文件

  1. /* AUTO-GENERATED FILE.  DO NOT MODIFY.
  2. *
  3. * This class was automatically generated by the
  4. * aapt tool from the resource data it found.  It
  5. * should not be modified by hand.
  6. */
  7. package com.msi.ibmtutorial;
  8. public final class R {
  9.     public static final class attr {
  10.     }
  11.     public static final class drawable {
  12.         public static final int icon=0x7f020000;
  13.     }
  14.     public static final class layout {
  15.         public static final int main=0x7f030000;
  16.     }
  17.     public static final class string {
  18.         public static final int app_name=0x7f040000;
  19.     }
  20. }
複製代碼
R 類包含一些匿名子類,每一個子類包含前面描述的各類資源的標識符。注意,這些類都是靜態的。
請注意 R.layout.main 表明的元素。這個標識符表明由 main.xml 定義的佈局。在活動的 onCreate 方法中使用過這個值:setContentView(R.layout.main);。這就是在運行時把特定的活動(在這個示例中是 SayAnything)和特定的佈局(主佈局)聯繫在一塊兒的方法。

 




構建應用程序
在默認狀況下,每次保存文件時,都將對它們進行編譯。


圖 5. 錯誤面板
<ignore_js_op> 

咱們在源代碼中引入了一個錯誤,即在 setContent 和 View 之間加了一個空格。在保存這個文件時,它被編譯並在屏幕底部的 Problems 面板中顯示錯誤。在源代碼中糾正這個錯誤以後,應用程序就可以成功編譯,並從問題列表中刪除錯誤。






AndroidManifest.xml
AndroidManifest.xml 文件是 Android 應用程序的部署描述符。這個文件列出應用程序中包含的全部活動、服務、內容提供器和接收器,以及應用程序支持的 IntentFilter。下面是這個示例應用程序的完整的 AndroidManifest.xml 文件。


清單 7. AndroidManifest.xml 文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.msi.ibmtutorial">
  4.     <application android:icon="@drawable/icon">
  5.         <activity class=".SaySomething" android:label="@string/app_name">
  6.             <intent-filter>
  7.                 <action android:value="android.intent.action.MAIN" />
  8.                 <category android:value="android.intent.category.LAUNCHER" />
  9.             </intent-filter>
  10.         </activity>
  11.     </application>
  12. </manifest>
複製代碼
請注意如下狀況:
  • 這裏指定了源文件中的包名。這裏採用與 Java 源文件和導入語句類似的模式。<manifest> 標記的實際做用是 「導入」 這個包中的類。在這個文件中,全部非徹底限定的類都屬於 package 屬性指定的包。
  • <application> 標記的一個屬性引用了應用程序的一個資源。請注意 drawable 標識符前面的 @ 符號。這裏的意思是,在應用程序資源的 drawable 文件夾中尋找名爲 「icon」 的資源。
  • <activity> 標記包含如下屬性和值:
    • class 屬性表示實現這個活動的 Java 類。
    • android:label 是應用程序的名稱。注意,它來自一個字符串資源。string.xml 文件包含應用程序的本地化字符串。
    • <intent-filter> 表示應用程序中可用的 IntentFilter。這是 Android 應用程序中最多見的 IntentFilter。這個過濾器的實際意思是,它實現 「主」 操做(也就是入口點),並且它位於 OS 的啓動器中。這意味着能夠在 Android 設備上像啓動其餘應用程序同樣,從應用程序主列表中啓動它。
下一節討論如何在 Eclipse 中的 Android 模擬器上啓動應用程序。






運行應用程序
應用程序已經成功地編譯了,如今該運行這個示例應用程序了。在 Eclipse 中選擇 Open Run Dialog 或工具欄上的快捷按鈕。這會打開一個對話框,能夠在這裏建立啓動配置。選擇 Android Application 選項並單擊 New 的圖標。
圖 6 顯示本教程示例所用的值。


圖 6. Run 對話框
<ignore_js_op> 

指定配置名稱。本教程使用的名稱是 Tutorial Configuration。在可用項目列表中選擇 ibmtutorial 項目(單擊 Browse 能夠看到可用項目)。在下拉列表中選擇啓動活動。如今選擇 Emulator 選項卡,根據須要指定模擬器設置。能夠保持默認設置。有兩個設置須要注意,見圖 7。


圖 7. Run 對話框,Emulator 選項卡
<ignore_js_op> 

有幾種可供選擇的屏幕大小和方向,還有網絡選擇。若是運行應用程序的移動設備的因特網鏈接速度不一樣,網絡選擇就很重要了。在構造應用程序原型時,選擇完整網絡速度並且沒有延遲。開發了主要功能以後,最好在比較真實的網絡環境中進行測試,看看應用程序的響應速度如何。
選擇 Run 運行示例應用程序。


圖 8. 模擬器
<ignore_js_op> 

應用程序已經在模擬器上運行了,如今看看幕後發生的狀況。Dalvik Debug Monitor Service(DDMS)將會幫助檢查應用程序的運行狀況。






調試應用程序
要想檢查正在運行的應用程序中發生了什麼狀況,就須要查看正在運行的 Dalvik VM。在 Eclipse 中,選擇 Window > Open Perspective > Other。在出現的對話框中選擇 DDMS。這會在 Eclipse 中打開一個新的透視圖,其中有許多有趣的窗口。下面簡要介紹一下 DDMS 透視圖中提供的資源:
LogCat 是一個日誌文件,它記錄 VM 中發生的活動。應用程序能夠經過 Log.i(tag,message); 在這個日誌文件中添加本身的日誌項,其中的 tag 和 message 都是 Java 字符串。Log 類屬於 android.util.Log 包。
圖 9 顯示 LogCat。


圖 9. LogCat 
<ignore_js_op> 

DDMS 中的另外一個方便的工具是文件管理器,能夠用它訪問模擬器的文件系統。圖 10 顯示在模擬器上部署本教程示例應用程序的位置。


圖 10. 在模擬器上部署的示例應用程序
<ignore_js_op> 

用戶應用程序部署在 /data/app 目錄中,而 Android 內置的應用程序部署在 /system/app 目錄中。
在 DDMS 中還能夠查看正在運行的進程。


圖 11. 正在運行的進程列表
<ignore_js_op> 

全面討論 Android 應用程序的調試超出了本教程的範圍,更多信息請參見 參考資料。






建立內容提供器和 Google Maps 應用程序
您已經看到了一個完整的應用程序示例,如今簡要討論一下更加複雜的應用程序。
內容提供器和 Google Maps
本教程中討論的第二個應用程序適用於提供上門服務的專業人員,好比設備維修技術人員,這些人必須找到去客戶地址的路線。這個應用程序使用 Android 內置的聯繫人數據庫做爲記錄存儲庫。本節將講解如何訪問內容提供器中的數據,還將看看 intent 的效果。咱們將用聯繫人數據庫中的地址數據執行 Google Maps 搜索。爲了讓這個應用程序在 Android 模擬器上正確運行,必須記錄一些聯繫人,並且必須填寫家庭地址字段。圖 12 顯示模擬器中與聯繫人應用程序相關的條目。


圖 12. 模擬器中與聯繫人應用程序相關的條目
<ignore_js_op> 

下面是這個應用程序的一個代碼片斷。注意,這個應用程序的主 Activity 類擴展 ListActivity。這是由於咱們須要在列表中顯示信息。


清單 8. 第一個代碼片斷

  1. public class MobileServiceCallContacts extends ListActivity 
  2. {
  3.      final String tag = "MSCC"; 
  4.     /** Called when the activity is first created. */
  5.     @Override
  6.     public void onCreate(Bundle icicle) 
  7.     {
  8.         super.onCreate(icicle);
  9.         setContentView(R.layout.main);
  10.         
  11.         // Get a cursor with all people
  12.         Cursor c = getContentResolver().query(People.CONTENT_URI, null, null, 
  13.                                                                null, null);
  14.         startManagingCursor(c);
  15.         ListAdapter adapter = new SimpleCursorAdapter(this,android.R.
  16.         layout.simple_list_item_1,c,new String[] {People.NAME} ,new int[] 
  17.         {android.R.id.text1}); 
  18.         setListAdapter(adapter);
  19.         
  20.     }
  21. ...
  22. }
複製代碼
注意,這裏使用遊標類查詢聯繫人數據庫。這個 「結果集」 遊標經過 ListAdapter 類連接到 UI。圖 13 顯示當設備上記錄了聯繫人時應用程序的效果。注意,這個屏幕上的記錄沒有排序。


圖 13. 應用程序的運行效果
<ignore_js_op> 

能夠經過鼠標單擊、按模擬器的中間按鈕或按鍵盤上的 Enter 鍵選擇一個聯繫人。選擇聯繫人以後,代碼必須查詢所選聯繫人的地址。這要使用覆蓋的 onListItemClick() 方法。這個方法的實現有四個重要參數,其中最重要的是 dbidentifier。由於遊標綁定到 UI,因此在調用這個方法時,它實際上會得到底層數據源的標識符。可使用 dbidentifier 字段在聯繫人數據庫中查詢所需的信息。還可使用它啓動聯繫人應用程序,所用的 intent 見清單 9 中被註釋掉的代碼。


清單 9. 覆蓋的 onListItemClick() 方法

  1. @Override
  2.     protected void onListItemClick(ListView list,View view,int position,long 
  3.                                                               dbidentifier)
  4.     {
  5.          super.onListItemClick(list,view,position,dbidentifier);
  6.          
  7.          try
  8.          {
  9.               // this commented out code below will launch the Contacts application
  10.         // and "view" the contact Intent myIntent = \
  11. new Intent(android.content.
  12.     // Intent.VIEW_ACTION,new ContentURI("content://contacts/people/"
  13.         // + dbidentifier)); startSubActivity(myIntent,position);
  14.               
  15.               
  16.               // let's lookup specifics on this record
  17.               ContentURI theContact = \
  18. new ContentURI(android.provider.Contacts.ContactMethods.CONTENT_URI.toURI());
  19.               
  20.               
  21.               // IMPORTANT
  22.               // in order to use this sample application, you need to have at least 
  23.         // one Contact record on your Android emulator\
  24.               // and be sure to have populated the 'Home Address field'
  25.               //
  26.               
  27.               // this "where clause" is for HOME address and for the person record 
  28.         // selected in the GUI (id, dbidentifier)
  29.               Cursor c = managedQuery(theContact,null," type = 1 and person = " + 
  30.                                              dbidentifier,null);
  31.               
  32.               if (!c.first())
  33.               {
  34.                    showAlert("MSCC","No Contact Methods Available!","",true);
  35.                    return;
  36.               }
  37.               
  38.               String address = c.getString(c.getColumnIndex("data"));
  39.               
  40.               address = address.replace("\n","");
  41.               address = address.replace(",","");
  42.               address = address.replace(" ","+");
  43.               
  44.               Intent geoIntent = new Intent("android.intent.action.VIEW",
  45.                                         new ContentURI\
  46. ("geo:0,0?q=" + address));
  47.               startActivity(geoIntent);
  48.          }
  49.          catch (Exception ee)
  50.          {
  51.               Log.i(tag,ee.getMessage());
  52.          }
  53.     }
複製代碼

 

找到地址以後,須要經過一些簡單的字符串操做清理數據,準備查詢 Google Maps。geoIntent 是一個用來執行地理搜索的新的 intent,它經過調用 Google Maps 提供默認的 Android 模擬器圖像。
第一個應用程序的全部主要元素仍然適用於這個應用程序。它有一個從主應用程序屏幕啓動的活動。固然,還有 AndroidManifest.xml 文件。在 下載 一節中能夠找到完整的源代碼。
關於第二個應用程序,還有最後一點須要注意。AndroidManifest.xml 文件中包含一個條目,它使應用程序可以讀取聯繫人數據庫:<uses-permission id="android.permission.READ_CONTACTS" />。若是不這樣作,Linux 內核就會禁止應用程序訪問聯繫人數據庫。






結束語本教程介紹了 Android 平臺、Android Developer Tools 以及在 Eclipse 中開發 Android 應用程序時涉及的關鍵概念。經過使用 Android Developer Tools,能夠在強大的 Eclipse 開發環境中構建和測試 Android 應用程序。您如今能夠開始建立本身的 Android 應用程序了。

 

示例源代碼
<ignore_js_op>   os-eclipse-android.examples.zip (66.18 KB, 下載次數: 723)
相關文章
相關標籤/搜索