Android 2.3 API

API 級別9

對開發人員而言,Android 2.3 (GINGERBREAD) 平台可做為 Android SDK 的可下載元件使用。可下載的平台包含 Android 程式庫和系統映像檔,以及一組模擬器外觀等。如要開始針對 Android 2.3 開發或測試,請使用 Android SDK Manager 將平台下載至您的 SDK。

API 總覽

下列各節提供技術總覽,說明 2.3 版開發人員的新功能,包括自上一個版本以來的架構 API 的新功能和變更。

採用 SIP 的 VoIP

這個平台現在包含 SIP 通訊協定堆疊和架構 API,可讓開發人員建構網際網路電話應用程式。透過 API,應用程式可提供語音通話功能,而不必管理工作階段、傳輸層級的通訊或音訊,這些功能會由平台的 SIP API 和服務以公開透明的方式處理。

SIP API 包含在 android.net.sip 套件中。金鑰類別為 SipManager,應用程式可用於設定及管理 SIP 設定檔,然後撥打語音通話及接聽語音通話。建立語音通話後,應用程式就能將通話設為靜音、開啟喇叭模式、傳送 DTMF 音調等。應用程式也可以使用 SipManager 建立一般 SIP 連線。

製造商和相關電信業者可自行斟酌裝置,提供平台的基礎 SIP 堆疊和服務。因此,應用程式應先使用 isApiSupported() 方法檢查是否提供 SIP 支援,再向使用者顯示通話功能。

如要使用 SIP API,應用程式必須在資訊清單檔案中宣告 <uses-permission android:name="android.permission.INTERNET"><uses-permission android:name="android.permission.USE_SIP">,才能要求使用者授予權限。

此外,開發人員可以要求 Google Play 篩選功能,如此一來,如果使用者的裝置不含該平台的 SIP 堆疊和服務,便無法找到他們的應用程式。如要要求篩選,請將 <uses-feature android:name="android.software.sip" android:required="true"><uses-feature android:name="android.software.sip.voip"> 新增至應用程式資訊清單。

詳情請參閱 SIP 開發人員指南。

近距離無線通訊 (NFC)

Android 2.3 包含 NFC 堆疊和架構 API,可讓開發人員讀取使用者輕觸支援 NFC 的裝置時偵測到的 NDEF 標記,以標記嵌入貼圖、智慧海報,甚至其他裝置中的元素。

平台提供可與裝置硬體搭配使用的基礎 NFC 服務,以便在標記進入有效範圍時偵測標記。發現標記時,平台會廣播「意圖」來通知應用程式,並將標記的 NDEF 訊息做為額外項目附加在意圖中。應用程式可以建立意圖篩選器來辨識及處理目標標記和訊息。舉例來說,應用程式會在收到意圖的標記後擷取 NDEF 訊息、儲存訊息、提醒使用者,或透過其他方式處理訊息。

android.nfc 套件提供 NFC API。主要類別如下:

  • NfcAdapter,代表裝置上的 NFC 硬體。
  • NdefMessage,代表 NDEF 資料訊息,此為標準格式,「記錄」傳輸資料會在裝置和標記之間傳輸。應用程式可以從 ACTION_TAG_DISCOVERED 意圖接收這些訊息。
  • NdefRecord 透過 NdefMessage 提供,後者用於說明要分享的資料類型並提供資料本身。

NFC 通訊仰賴裝置硬體中的無線技術,因此特定裝置是否支援平台 NFC 功能取決於製造商。如要判斷目前裝置的 NFC 支援情況,應用程式可以呼叫 isEnabled() 來查詢 NfcAdapter。不過,無論基礎硬體支援為何,NFC API 都會持續存在。

如要使用 NFC API,應用程式必須在資訊清單檔案中宣告 <uses-permission android:name="android.permission.NFC">,才能要求使用者授予權限。

此外,開發人員可以要求 Google Play 篩選功能,避免裝置不支援 NFC 的使用者找到應用程式。如要要求篩選,請將 <uses-feature android:name="android.hardware.nfc" android:required="true"> 新增至應用程式的資訊清單中。

如要查看使用 NFC API 的範例應用程式,請參閱「NFCDemo」。

陀螺儀和其他感應器

Android 2.3 版新增平台和 API 支援多種新的感應器讀取類型,包括陀螺儀、旋轉向量、線性加速度、重力和氣壓計。開發人員可以使用新的感應器讀取資料,建立能快速流暢地回應裝置位置和動作變更的應用程式。無論應用程式是在應用程式架構或原生程式碼中執行,感應器 API 都會向感興趣的應用程式回報陀螺儀和其他感應器變更。

請注意,任何特定裝置可用的特定硬體感應器組合,均由裝置製造商自行斟酌決定。

開發人員可以要求 Google Play 的篩選功能,這樣一來,如果使用者的裝置沒有陀螺儀感應器,就無法找到自己的應用程式。方法是將 <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> 新增至應用程式資訊清單。

如需 API 詳細資料,請參閱 Sensor

支援多部相機

應用程式現在可以使用裝置上的任何相機,無論是拍照或錄影。Camera 可讓應用程式查詢可用的相機數量,以及每個相機的獨特特性。

如要查看存取前置鏡頭的程式碼範例,請參閱 ApiDemos 範例應用程式中的 CameraPreview.java

Camera API 也會新增下列功能:

可混合的音效

平台的媒體架構支援新曲目或全域音效,包括低音強化、耳機虛擬化、等化和回響。

如要查看音效的程式碼範例,請參閱 ApiDemos 範例應用程式中的 AudioFxDemo.java

媒體架構還新增以下功能:

  • 針對 JPEG 檔案,在 EXIF 中繼資料中加入新的高度標記支援功能。新的 getAltitude() 方法,可擷取 EXIF 高度標記的值。
  • 新的 setOrientationHint() 方法可讓應用程式在錄影期間告知 MediaRecorder 方向。

下載管理員

這個平台提供新的 DownloadManager 系統服務,可處理長時間執行的 HTTP 下載作業。應用程式可以要求將 URI 下載至特定目的地檔案。DownloadManager 會在背景執行下載作業,處理 HTTP 互動,並在連線失敗或連線變更和系統重新啟動後重試下載。

  • 應用程式可以呼叫 getSystemService(String) 並傳遞 DOWNLOAD_SERVICE,以取得 DownloadManager 類別的執行個體。透過此 API 要求下載的應用程式應該為 ACTION_NOTIFICATION_CLICKED 註冊廣播接收器,以便在使用者透過通知或下載使用者介面點選執行中的下載作業時正確處理。
  • DownloadManager.Request 類別可讓應用程式提供要求新下載所需的所有資訊,例如要求 URI 和下載目的地。要求 URI 是唯一的必要參數。請注意,預設的下載目的地是共用磁碟區,可在需要收回空間以供系統使用時刪除檔案。如需下載永久儲存空間,請指定外部儲存空間的下載目的地 (請參閱 setDestinationUri(Uri))。
  • DownloadManager.Query 類別提供多項方法,可讓應用程式查詢及篩選有效的下載項目。

StrictMode (嚴格模式)

為協助開發人員監控及改善應用程式的效能,平台提供名為 StrictMode 的新系統設施。在應用程式中實作時,StrictMode 會擷取並通知開發人員,指出意外磁碟或網路活動可能降低應用程式效能,例如在應用程式主執行緒上進行的活動 (接收 UI 作業且正在進行動畫)。開發人員可以評估 StrictMode 中引發的網路和磁碟使用問題,並視需要加以修正,讓主執行緒的回應速度更快,並避免向使用者顯示 ANR 對話方塊。

  • StrictMode 是核心類別,是與系統和 VM 的主要整合點。這個類別提供便利的方法,可管理適用於執行個體的執行緒和 VM 政策。
  • StrictMode.ThreadPolicyStrictMode.VmPolicy 會保留您定義的政策,並套用至執行緒和 VM 執行個體。

如要進一步瞭解如何使用 StrictMode 最佳化應用程式,請參閱 android.os.StrictMode 的類別說明文件和程式碼範例。

UI 架構

  • 支援過度捲動
    • 新增 View 和小工具中的過度捲動支援。在 View 中,應用程式可以針對特定檢視區塊啟用/停用過度捲動功能、設定過度範圍模式、控制過度捲動距離,並處理過度捲動的結果。
    • 在小工具中,應用程式可以控制過度捲動的特性,例如動畫、彈回和過度捲動距離。詳情請參閱 android.view.Viewandroid.widget.OverScroller
    • ViewConfiguration 也提供 getScaledOverflingDistance()getScaledOverscrollDistance() 方法。
    • <ListView> 元素新增 overScrollModeoverScrollFooteroverScrollHeader 屬性,用於控制過度捲動行為。
  • 支援觸控篩選
    • 新的觸控篩選功能支援,可讓應用程式加強檢視區塊的安全性,避免提供敏感功能的存取權。舉例來說,觸控篩選適用於確保使用者動作的安全性,例如授予權限、購物或點選廣告等。詳情請參閱查看課程說明文件
    • 為檢視區塊元素新增 filterTouchesWhenObscured 屬性,其宣告當檢視區塊視窗遭其他可見視窗遮蔽時,是否要篩選觸控動作。設為 "true" 時,每當檢視畫面視窗上方顯示浮動式訊息、對話方塊或其他視窗時,檢視畫面就不會收到觸控訊息。詳情請參閱查看安全性說明文件

    如要查看觸控篩選的程式碼範例,請參閱 ApiDemos 範例應用程式中的 SecureView.java

  • 改善事件管理
    • 輸入事件的新基礎類別 InputEvent。這個類別提供一些方法,可讓應用程式判斷事件的意義,例如查詢事件的來源 InputDevice。KeyEventMotionEventInputEvent 的子類別。
    • 輸入裝置的新基礎類別:InputDevice。這個類別會儲存特定輸入裝置功能的相關資訊,並提供讓應用程式判斷如何解譯輸入裝置上的事件。
  • 改善動作事件
    • MotionEvent API 也進一步支援「指標 ID」資訊,可讓應用程式追蹤個別手指上下移動的情形。這個類別會新增多種方法,讓應用程式透過動作事件有效率地運作。
    • 輸入系統現在具備邏輯,可使用新的指標 ID 資訊產生動作事件,以便在新指標下降時合成 ID。系統會在動作事件期間分別追蹤多個指標 ID,並評估最後一組和下一組指標之間的距離,確保指標的連續性正確無誤。
  • 文字選取控制項
    • 新的 setComposingRegion 方法可讓應用程式將文字區域標示為撰寫文字,並保留目前的樣式。getSelectedText 方法會將選取的文字傳回應用程式。方法適用於 BaseInputConnectionInputConnectionInputConnectionWrapper
    • <TextView> 新增 textSelectHandletextSelectHandleLefttextSelectHandleRighttextSelectHandleWindowStyle 屬性,用於參照可繪項目,後者將用於顯示文字選取錨點和所含視窗的樣式。
  • 活動控制項
  • 通知文字和圖示樣式
  • 超大螢幕

    平台現在支援額外的大螢幕尺寸,例如平板電腦裝置上可用的尺寸。開發人員可以在資訊清單檔案中加入 <supports screens ... android:xlargeScreens="true"> 元素,指出應用程式設計為支援額外的大螢幕。應用程式可以使用新的資源限定詞 xlarge,標記超大型螢幕專用的資源。如要進一步瞭解如何支援超大型螢幕和其他螢幕大小,請參閱「支援多螢幕」。

    顯示卡

    內容供應程式

    • 新增用於設定鬧鐘或處理鬧鐘的 AlarmClock 提供者類別。提供者包含 ACTION_SET_ALARM 意圖動作和額外項目,可用來在鬧鐘應用程式中啟動活動並設定新的鬧鐘。想要接收 SET_ALARM 意圖的應用程式,應建立需要 SET_ALARM 權限的活動。想要建立新鬧鐘的應用程式應使用 Context.startActivity(),讓使用者能夠選擇要使用的鬧鐘應用程式。
    • MediaStore 支援新的意圖動作 PLAY_FROM_SEARCH,可讓應用程式搜尋音樂媒體,並盡可能從結果中自動播放內容。例如,應用程式可透過語音辨識指令監聽音樂的結果觸發這個意圖。
    • MediaStore 也會新增 MEDIA_IGNORE_FILENAME 標記,指示媒體掃描工具忽略所含目錄及其子目錄中的媒體。開發人員可以使用此功能,避免在資源庫中顯示圖像,以防應用程式音效和音樂顯示在音樂應用程式中。
    • Settings 提供者會新增新的「活動」動作 APPLICATION_DETAILS_SETTINGSMANAGE_ALL_APPLICATIONS_SETTINGS,以便讓應用程式顯示特定應用程式的詳細資料畫面,或顯示「管理應用程式」畫面。
    • ContactsContract 供應商新增 ContactsContract.CommonDataKinds.SipAddress 資料種類,以儲存聯絡人的 SIP (網際網路電話) 位址。

    位置

    • LocationManager 現在會根據 WorkSource (用於識別應用程式的系統代管類別),追蹤促成 Wake Lock 或 Wi-Fi 鎖定的應用程式要求。

      LocationManager 會追蹤所有要求定期更新的用戶端,並在設定最低更新時間時,將他們的相關資訊做為 WorkSource 參數告知供應商。網路位置供應商會使用 WorkSource 追蹤應用程式啟動的喚醒和 Wi-Fi 鎖定,並將該鎖定新增至「管理應用程式」回報的應用程式電池用量。

    • LocationManager 新增了幾種方法,讓活動註冊能夠根據指定條件,定期或一次性位置更新資訊 (詳情請見下文)。
    • 新的 Criteria 類別可讓應用程式指定一組選取位置提供者的條件。例如,供應商按照精確度、耗電量、回報高度、速度和方位的功能,以及貨幣成本來排序供應商。

    儲存空間

    • Android 2.3 版新增支援 OBB (不透明二進位檔 Blob) 檔案的新 StorageManager。雖然 Android 2.3 提供 OBB 的平台支援,但要到 2011 年初才會提供用於建立及管理 OBB 檔案的開發工具。
    • Android 2.3 平台為不含 SD 卡的裝置新增官方支援 (雖然在沒有實體 SD 卡可用時,它可提供虛擬 SD 卡分區)。isExternalStorageRemovable() 這個便利方法可讓應用程式判斷是否存在實體 SD 卡。

    套裝管理員

    電話通訊系統

    對活動生命週期和視窗的原生存取權

    Android 2.3 會向使用原生程式碼的應用程式提供一系列 API。這類應用程式感興趣的架構類別包括:

    • NativeActivity 是新的活動類別,直接在原生程式碼中實作生命週期回呼。NativeActivity 及其基礎原生程式碼會在系統中執行,就像其他活動一樣,具體來說是在 Android 應用程式的系統程序中執行,並在應用程式的主要 UI 執行緒上執行,而且也會接收與其他活動相同的生命週期回呼。
    • 新的 InputQueue 類別和回呼介面可讓原生程式碼管理事件佇列。
    • 新的 SurfaceHolder.Callback2 介面可讓原生程式碼管理 SurfaceHolder
    • Window 中的新的 takeInputQueuetakeSurface() 方法可讓原生程式碼管理事件和介面。

    如需如何使用原生程式碼或下載 NDK 的完整資訊,請參閱 Android NDK 頁面。

    Dalvik 執行階段

    新增資訊清單元素和屬性

    • <supports-screens> 元素新增 xlargeScreens 屬性,用於指出應用程式是否支援超大型螢幕板型規格。詳情請參閱「支援多螢幕」。
    • <activity> 元素的 android:screenOrientation 屬性新增的值:
      • "reverseLandscape":Activity 希望螢幕方向為橫向,且方向與一般橫向相反。
      • "reversePortrait":Activity 希望螢幕轉為直向,且方向與一般直向相反。
      • "sensorLandscape":Activity 希望螢幕方向為橫向,但可以使用感應器變更螢幕面對的方向。
      • "sensorPortrait":Activity 希望螢幕方向為直向,但可以使用感應器變更螢幕面對的方向。
      • "fullSensor":方向是由實體方向感應器所決定:顯示畫面會根據使用者移動裝置的方式旋轉。如此一來,無論裝置平常執行的操作為何,這 4 種可能的旋轉功能都能保持原樣 (例如某些裝置通常不會使用 180 度旋轉)。

    新權限

    • com.android.permission.SET_ALARM:允許應用程式播送「意圖」,以便為使用者設定鬧鐘。處理 SET_ALARM 意圖動作的活動需要這項權限。
    • android.permission.USE_SIP:允許應用程式使用 SIP API 撥打或接收網際網路呼叫。
    • android.permission.NFC:允許應用程式使用 NFC API 讀取 NFC 標記。

    新功能常數

    這個平台新增了幾項硬體功能,開發人員可在應用程式資訊清單中宣告應用程式要求的功能。如此一來,開發人員就可以在 Google Play 上發布應用程式時,控制篩選方式。

    如要瞭解如何宣告功能,以及如何使用這些功能進行篩選,請參閱 <uses-feature> 的說明文件。

    API 差異報表

    如要進一步瞭解 Android 2.3 (API 級別 9) 中的所有 API 變更,請參閱 API 差異報告

    API 級別

    Android 2.3 平台提供新版架構 API。Android 2.3 API 會指派一個儲存在系統本身中的整數 ID (9)。這個 ID 稱為「API 級別」,可讓系統在安裝應用程式前,正確判斷應用程式是否與系統相容。

    如要在應用程式中使用 Android 2.3 中導入的 API,您必須針對 Android 2.3 SDK 平台提供的 Android 程式庫編譯應用程式。視您的需求而定,您可能還需要在應用程式資訊清單中的 <uses-sdk> 元素中加入 android:minSdkVersion="9" 屬性。如果您的應用程式設計只能在 Android 2.3 以上版本上執行,宣告屬性會禁止應用程式在舊版平台上安裝。

    詳情請參閱「什麼是 API 級別?」一節。