招賢納士 | | BBS
首頁 > 新聞資訊 > 營銷共享 >新聞詳情
手機app軟件開發,ios應用開發,android(安卓)手機客戶端開發
鼎瀛科技:2013-12-14 閱讀數:14811 關鍵詞:
 

本教程介紹如何在 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 插件)。
源代碼本教程中的源代碼片段包括:

  • 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 相似,但是兩者不兼容。


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 應用程序

  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

    fig01.jpg (16.64 KB, 下載次數: 392)

    下載附件  保存到相冊

    2011-9-16 00:06 上傳

  • 列表中會增加一個新條目並被默認選中。單擊 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 向導

fig02.jpg (53.67 KB, 下載次數: 396)

下載附件  保存到相冊

2011-9-16 00:06 上傳



這個應用程序需要:

  • Name
  • Location
  • Package name
  • Activity name — 可以認爲這是應用程序的主 “表單” 或屏幕
  • Application name

看看這個新項目。


圖 3. 新的 Android 項目

fig03.jpg (56.43 KB, 下載次數: 450)

下載附件  保存到相冊

2011-9-16 00:06 上傳



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





Package Explorer

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


圖 4. Package Explorer

fig04.jpg (38.64 KB, 下載次數: 443)

下載附件  保存到相冊

2011-9-16 00:06 上傳



需要注意的組件包括:

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. 錯誤面板

fig05.jpg (47.87 KB, 下載次數: 373)

下載附件  保存到相冊

2011-9-16 00:06 上傳



我們在源代碼中引入了一個錯誤,即在 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 對話框

fig06.jpg (37.62 KB, 下載次數: 374)

下載附件  保存到相冊

2011-9-16 00:06 上傳



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


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

fig07.jpg (40.98 KB, 下載次數: 360)

下載附件  保存到相冊

2011-9-16 00:06 上傳



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

選擇 Run 運行示例應用程序。


圖 8. 模擬器

fig08.jpg (32.96 KB, 下載次數: 370)

下載附件  保存到相冊

2011-9-16 00:06 上傳



應用程序已經在模擬器上運行了,現在看看幕後發生的情況。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

fig09.jpg (36.03 KB, 下載次數: 371)

下載附件  保存到相冊

2011-9-16 00:06 上傳



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


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

fig10.jpg (79.04 KB, 下載次數: 382)

下載附件  保存到相冊

2011-9-16 00:06 上傳



用戶應用程序部署在 /data/app 目錄中,而 Android 內置的應用程序部署在 /system/app 目錄中。

在 DDMS 中還可以查看正在運行的進程。


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

fig11.jpg (28.74 KB, 下載次數: 360)

下載附件  保存到相冊

2011-9-16 00:06 上傳



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






創建內容提供器和 Google Maps 應用程序

您已經看到了一個完整的應用程序示例,現在簡要討論一下更加複雜的應用程序。

內容提供器和 Google Maps

本教程中討論的第二個應用程序適用于提供上門服務的專業人員,比如設備維修技術人員,這些人必須找到去客戶地址的路線。這個應用程序使用 Android 內置的聯系人數據庫作爲記錄存儲庫。本節將講解如何訪問內容提供器中的數據,還將看看 intent 的效果。我們將用聯系人數據庫中的地址數據執行 Google Maps 搜索。爲了讓這個應用程序在 Android 模擬器上正確運行,必須記錄一些聯系人,而且必須填寫家庭地址字段。圖 12 顯示模擬器中與聯系人應用程序相關的條目。


圖 12. 模擬器中與聯系人應用程序相關的條目

fig12.jpg (53.9 KB, 下載次數: 366)

下載附件  保存到相冊

2011-9-16 00:06 上傳



下面是這個應用程序的一個代碼片段。注意,這個應用程序的主 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. 應用程序的運行效果

fig13.jpg (33.03 KB, 下載次數: 358)

下載附件  保存到相冊

2011-9-16 00:06 上傳



可以通過鼠標單擊、按模擬器的中間按鈕或按鍵盤上的 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 內核就會禁止應用程序訪問聯系人數據庫。






Consulting

在線咨詢
在線客服
+86 13362876698
電子郵箱
305625228@qq.com
QQ在線咨詢
whatsapp: +85265659965
售後技術支持