Android 3.0 API

API 級別11

對開發人員來說,Android 3.0 平台 (HONEYCOMB) 可做為 Android SDK 的可下載元件使用。可下載的平台包含 Android 程式庫、系統映像檔,以及一組模擬器外觀等。可下載的平台不含任何外部程式庫。

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

API 總覽

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

片段

片段是新的架構元件,可讓您將活動的不同元素分離成獨立模組,用於定義自己的 UI 和生命週期。如要建立片段,您必須擴充 Fragment 類別,並實作數個生命週期回呼方法,與 Activity 類似。接著,您可以將多個片段合併至單一活動,以建構多窗格使用者介面,讓每個窗格管理自己的生命週期和使用者輸入內容。

您也可以不使用提供 UI 的片段,而是使用片段做為活動的工作站,例如管理僅在活動執行期間發生的下載進度。

其他規範事項如下:

  • 片段是獨立性質的,您可以在多項活動中重複使用
  • 您可以在活動內新增、移除、取代片段,以及為片段建立動畫效果
  • 您可以將片段新增至活動管理的返回堆疊,在片段變更時保留片段狀態,並允許使用者反向瀏覽不同狀態
  • 只要提供替代版面配置,即可根據螢幕大小和方向混合及比對片段
  • 片段可直接存取容器活動,並可產生項目至活動的動作列 (如下所述)

如要管理活動中的片段,您必須使用 FragmentManager,其中包含多個用於與片段互動的 API,例如在活動中尋找片段,以及從返回堆疊中移除片段,以還原其先前的狀態。

如要執行交易 (例如新增或移除片段),您必須建立 FragmentTransaction。接著,您可以呼叫 add() remove()replace() 等方法。當您套用要對交易執行的所有變更後,必須呼叫 commit(),且系統會將片段交易套用至活動。

如要進一步瞭解如何使用片段,請參閱片段說明文件。 API Demos 應用程式也提供幾個範例。

動作列

動作列能取代活動視窗頂端的傳統標題列。其中包括應用程式標誌,且為「選項選單」中的項目提供新介面。此外,您可以利用動作列執行下列操作:

  • 直接在動作列中新增選單項目做為「操作項目」。

    在選單項目的 XML 宣告中,加入值為 "ifRoom"android:showAsAction 屬性。如果有足夠空間,選單項目會直接顯示在動作列中。否則項目會放在溢位選單中,從動作列右側的選單圖示顯示。

  • 將操作項目替換為小工具 (例如搜尋框),也就是建立「動作檢視畫面」。

    在選單項目的 XML 宣告中,加入含有版面配置資源的 android:actionViewLayout 屬性,或是加入小工具類別名稱的 android:actionViewClass 屬性。(您還必須宣告 android:showAsAction 屬性,讓該項目顯示在動作列中)。如果動作列的空間不足,且項目顯示在溢位選單中,則其運作方式與一般選單項目類似,不會顯示小工具。

  • 為應用程式標誌新增一項操作,並替換成自訂標誌

    應用程式標誌會自動獲派 android.R.id.home ID,當使用者輕觸該 ID 時,系統就會將該 ID 傳送至活動的 onOptionsItemSelected() 回呼。只要在回呼方法中回應這個 ID,即可執行動作,例如前往應用程式的「首頁」活動。

    如要將圖示替換為標誌,請在資訊清單檔案中使用 android:logo 屬性指定應用程式標誌,然後在活動中呼叫 setDisplayUseLogoEnabled(true)

  • 新增導覽標記,以返回片段的返回堆疊
  • 新增分頁或下拉式清單以瀏覽片段
  • 運用主題和背景自訂動作列

動作列適用於所有使用新全像主題的應用程式,也是您將 android:minSdkVersionandroid:targetSdkVersion 設為 "11" 時的標準選項。

如要進一步瞭解動作列,請參閱「動作列」說明文件。 API Demos 應用程式也提供幾個範例。

系統剪貼簿

應用程式現在可以在整個系統的剪貼簿中,複製及貼上資料 (除了文字之外)。剪輯的資料可以是純文字、URI 或意圖。

透過內容供應器提供系統存取所需資料的權限,使用者可從您的應用程式複製複雜的內容 (例如圖片或資料結構),然後貼到其他支援該類型內容的應用程式上。

如要開始使用剪貼簿,請呼叫 getSystemService(CLIPBOARD_SERVICE) 取得全域 ClipboardManager 物件。

如要將項目複製到剪貼簿,您必須建立一個新的 ClipData 物件,其中包含一或多個 ClipData.Item 物件,每個物件描述單一實體。如要建立只包含一個 ClipData.ItemClipData 物件,您可以使用其中一種輔助方法,例如 newPlainText()newUri()newIntent(),每個輔助方法都會傳回已預先載入的 ClipData 物件。ClipData.Item

如要將 ClipData 複製到剪貼簿,請將其傳遞至 ClipboardManager 例項的 setPrimaryClip()

接著,您可以在 ClipboardManager 上呼叫 getPrimaryClip() 來讀取剪貼簿中的檔案,以進行貼上。處理您收到的 ClipData 可能相當複雜,而您在嘗試貼上其資料類型前,請確認能實際處理剪貼簿中的資料類型。

剪貼簿一次只會保留一段剪輯的資料 (ClipData 物件),但一個 ClipData 可以包含多個 ClipData.Item

詳情請參閱複製及貼上說明文件。您也可以在 API 示範範例中查看複製及貼上的簡易實作方式,並在記事本範例中查看更完整的實作。

拖曳

新的 API 可簡化應用程式使用者介面中的拖曳作業。拖曳作業是指將某種資料 (在 ClipData 物件中保存) 從一個位置轉移至另一個位置。拖曳作業的開始和終點為 View,因此直接處理拖曳作業的 API 位於 View 類別中。

拖曳作業的生命週期由多個拖曳動作定義,每個動作都是由 DragEvent 物件定義,例如 ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP。想參與拖曳作業的每個檢視畫面都可以監聽這些動作。

如要開始拖曳活動中的內容,請在 View 上呼叫 startDrag(),提供代表要拖曳資料的 ClipData 物件、View.DragShadowBuilder 來協助使用者在拖曳時在手指下方看到的「陰影」,以及 Object 可以與可能接收物件的檢視畫面分享拖曳物件相關資訊。

如要在 View 中接受拖曳物件 (接收「捨棄」),請呼叫 setOnDragListener() 以透過 OnDragListener 註冊檢視畫面。在檢視畫面中發生拖曳事件時,系統會為 OnDragListener 呼叫 onDrag(),其中包含描述拖曳動作類型 (例如 ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP) 的 DragEvent。拖曳期間,系統會重複針對拖曳下的檢視畫面呼叫 onDrag(),以提供拖曳事件串流。接收檢視畫面可以在 DragEvent 上呼叫 getAction(),以要求傳送至 onDragEvent() 的事件類型。

注意:雖然拖曳事件可能包含 ClipData 物件,但這與系統剪貼簿無關。拖曳作業不應將拖曳的資料放入系統剪貼簿。

詳情請參閱拖曳說明文件。您也可以查看 API 示範應用程式和 Honeycomb Gallery 應用程式中的拖曳實作。

應用程式小工具

Android 3.0 支援多種新的小工具類別,可在使用者主畫面上顯示更具互動性的應用程式小工具,包括:GridViewListViewStackViewViewFlipperAdapterViewFlipper

更重要的是,您可以使用新的 RemoteViewsService 建立含有集合的應用程式小工具,方法是使用遠端資料支援的 GridViewListViewStackView 等小工具,例如內容供應器提供的小工具。

AppWidgetProviderInfo 類別 (在具有 <appwidget-provider> 元素的 XML 中定義的) 也支援兩個新欄位:autoAdvanceViewIdpreviewImageautoAdvanceViewId 欄位可讓您指定應用程式小工具子檢視畫面的檢視畫面 ID,應由應用程式小工具主機自動進階。previewImage 欄位可指定應用程式小工具的預覽畫面,並顯示在小工具挑選器中。如未提供這個欄位,應用程式小工具的圖示就會用於預覽。

為協助您建立應用程式小工具的預覽圖片 (在 previewImage 欄位中指定),Android 模擬器包含名為「小工具預覽」的應用程式。如要建立預覽圖片,請啟動這個應用程式,為應用程式選取小工具並設定所需顯示方式,然後儲存圖片並放置在應用程式的可繪製資源中。

您可以在 StackView 應用程式小工具天氣清單小工具應用程式中,查看新應用程式小工具功能的實作方式。

狀態列通知

Notification API 經過擴充,可支援更多內容豐富的狀態列通知,此外還有新的 Notification.Builder 類別可讓您輕鬆建立 Notification 物件。

這些新功能包括:

  • 支援使用 setLargeIcon() 通知中的大型圖示。通常用於社交應用程式會顯示通知來源使用者的聯絡相片,或讓媒體應用程式顯示相簿縮圖。
  • 支援使用 setTicker() 在狀態列列中支援自訂版面配置。
  • 支援自訂通知版面配置,納入有 PendingIntent 的按鈕,提供更多互動式通知小工具。例如,通知可以在不啟動活動的情況下控制音樂播放。

內容載入器

新的架構 API 可使用 Loader 類別以非同步方式載入資料。您可以將其與 UI 元件 (例如檢視畫面和片段) 搭配使用,以動態方式從工作站執行緒載入資料。CursorLoader 子類別經過特別設計,可協助您為 ContentProvider 支援的資料執行這項作業。

您只需實作 LoaderCallbacks 介面,即可在要求新的載入器或資料變更時接收回呼,然後呼叫 initLoader() 初始化活動或片段的載入器。

詳情請參閱「載入器」說明文件。您也可以在 LoaderCursor LoaderThrottle 範例中查看使用載入器的程式碼範例。

Bluetooth A2DP 和耳機 API

Android 現在提供 API,用於驗證已連線藍牙 A2DP 和耳機設定檔裝置的狀態。舉例來說,應用程式可識別藍牙耳機何時連線以便聆聽音樂,並在適當情況下通知使用者。應用程式也可以接收供應商專屬 AT 指令廣播訊息,並通知使用者已連線裝置的狀態,例如連結裝置的電池電量偏低。

如要初始化個別的 BluetoothProfile,您可以使用 A2DPHEADSET 設定檔常數呼叫 getProfileProxy(),並用 BluetoothProfile.ServiceListener 在藍牙用戶端連線或中斷連線時接收回呼。

動畫架構

全新的彈性動畫架構可讓您為任何物件 (View、Drawable、Fragment、Object 或任何其他) 的任意屬性加上動畫效果。可讓您定義動畫的幾個面向,例如:

  • 時間長度
  • 重複調整金額和行為
  • 時間插補類型
  • 動畫影片會設定是否連續播放動畫,或者在指定延遲後播放動畫
  • 頁框重新整理延遲時間

根據預設,您可以為物件的 int、浮點值和十六進位顏色值定義這些動畫元素和其他動畫元素。也就是說,如果物件含有這類類型的屬性欄位,您可以隨著時間變更值來影響動畫。如要為任何其他類型的值建立動畫效果,您可以實作 TypeEvaluator 介面,指示系統如何計算該類型的值。

您可以使用兩種動畫器為屬性的值 ValueAnimatorObjectAnimator 建立動畫效果。ValueAnimator 會計算動畫值,但不會得知動畫產生的特定物件或屬性。它只會執行計算,而您必須用自己的邏輯監聽更新和處理資料。ObjectAnimatorValueAnimator 的子類別,可讓您將物件和屬性設為動畫,並處理所有動畫工作。也就是說,您會提供 ObjectAnimator 要加入動畫效果的物件、讓物件會隨著時間而變更的屬性,以及要套用至該屬性的一組值,然後開始播放動畫。

此外,變更活動版面配置時,LayoutTransition 類別會啟用自動轉換動畫。如要為部分版面配置啟用轉換功能,請建立 LayoutTransition 物件,並呼叫 setLayoutTransition() 將其設為任何 ViewGroup。這樣一來,每當在群組中新增或移除項目時,都會執行預設動畫。如要指定自訂動畫,請在 LayoutTransition 上呼叫 setAnimator(),並提供自訂的 Animator,例如上方所述的 ValueAnimatorObjectAnimator

詳情請參閱「屬性動畫」說明文件。您也可以在 API 示範應用程式中查看使用動畫 API 的幾個範例。

擴充 UI 架構

  • ListView 和 GridView 的選擇題

    setChoiceMode() 新增 CHOICE_MODE_MULTIPLE_MODAL 模式可讓使用者從 ListViewGridView 選取多個項目。與動作列搭配使用時,使用者可以選取多個項目,然後從動作列的選項清單中 (已轉換為多選擇動作模式) 選擇要執行的動作。

    如要啟用選擇題,請呼叫 setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL),並使用 setMultiChoiceModeListener() 註冊 MultiChoiceModeListener

    使用者長按某個項目時,動作列會切換為「複選」動作模式。系統會呼叫 onItemCheckedStateChanged() 來選取項目以通知 MultiChoiceModeListener

    如需選擇題的範例,請參閱 API 示範範例應用程式中的 List15.java 類別。

  • 用於轉換檢視畫面的新 API

    新的 API 可讓您輕鬆地將 2D 和 3D 轉換套用至活動版面配置中的檢視畫面。我們提供多種物件屬性,這些屬性會定義檢視區塊的版面配置位置、方向、透明度等項目,方便您進行新的轉換。

    設定檢視畫面屬性的新方法包括:setAlpha()setBottom()setLeft()setRight()setBottom()setPivotX()setPivotY()setRotationX()setRotationY()setScaleX()setScaleY()setAlpha() 等。

    部分方法也有對應的 XML 屬性,您可以在版面配置檔案中指定,以套用預設轉換。可用的屬性包括:translationXtranslationYrotationrotationXrotationYscaleXscaleYtransformPivotXtransformPivotYalpha

    只要將部分新的檢視畫面屬性與新的動畫架構 (如上所述) 搭配使用,就能輕鬆將一些精美的動畫套用至檢視區塊。舉例來說,如要旋轉 Y 軸的檢視畫面,請向 ObjectAnimator 提供 View、「rotationY」屬性以及起始值和結束值:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }
    

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
    
  • 全新全像主題

    標準系統小工具和整體外觀經過重新設計,並納入新的「全像」使用者介面主題。系統會使用標準樣式和主題系統套用新主題。

    根據預設,凡是以 Android 3.0 平台為目標版本的應用程式,只要將 android:minSdkVersionandroid:targetSdkVersion 值設為 "11",就會沿用全像投影主題。然而,如果您的應用程式也會套用自己的主題,則除非您更新樣式來沿用全像主題,否則主題會覆寫全像。

    如要將全像主題套用至個別活動,或在您自己的主題定義中沿用這些活動,請使用其中一個新的 Theme.Holo 主題。如果您的應用程式與 Android 3.0 以下版本相容,並套用自訂主題,則應根據平台版本選取主題

  • 全新小工具
    • AdapterViewAnimator

      AdapterView 的基礎類別,可在切換檢視畫面時執行動畫。

    • AdapterViewFlipper

      簡單的 ViewAnimator,可在已新增的兩個以上檢視畫面之間建立動畫效果。一次只會顯示一個兒童。如果要求,它可以定期自動切換每個子項。

    • CalendarView

      允許使用者輕觸日期,從日曆中選取日期,並且可將日曆捲動或快速滑向所需日期。您可以設定小工具中顯示的日期範圍。

    • ListPopupWindow

      以錨點在主機檢視畫面中並顯示選項清單,例如在 EditText 檢視畫面中輸入內容時顯示建議清單。

    • NumberPicker

      可讓使用者從預先定義的範圍中選取數字。小工具會顯示輸入欄位和向上和向下按鈕,以供選取數字。輕觸輸入欄位可讓使用者捲動值或再次輕觸,直接編輯目前的值。此外,您也可以將位置對應至字串,以便顯示對應的字串,而非索引位置。

    • PopupMenu

      在錨定於檢視畫面的強制回應彈出式視窗中顯示 Menu。彈出式視窗會顯示在錨定檢視畫面下方 (如果有空間的話);如果沒有空間,則會顯示在錨定檢視畫面上方。如果系統顯示 IME (螢幕鍵盤),則在使用者輕觸選單之前,彈出式視窗並不會與 IME 重疊。

    • SearchView

      提供搜尋框,您可以設定將搜尋查詢傳送至指定活動,並顯示搜尋建議 (與傳統搜尋對話方塊相同)。如要在動作列中提供搜尋小工具,這個小工具特別實用。詳情請參閱「建立搜尋介面」一文。

    • StackView

      此檢視畫面會在 3D 堆疊中顯示子項,並可讓使用者滑動瀏覽 rolodex 等檢視畫面。

圖像

  • 硬體加速 2D 圖形

    您現在可以為應用程式啟用 OpenGL 轉譯器,方法是在資訊清單元素的 <application> 元素中設定 android:hardwareAccelerated="true",或為個別 <activity> 元素設定。

    這個標記可協助應用程式加快繪圖速度。進而讓動畫更流暢、捲動更順暢,並且整體效能和回應使用者互動。

  • 查看硬體和軟體層的支援

    根據預設,View 未指定任何圖層。您可以使用 setLayerType()layerType 屬性,指定由硬體或軟體層 (由 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 值指定) 支援檢視畫面。

    硬體圖層是由硬體專屬紋理 (通常是 OpenGL 硬體上的框架緩衝區物件或 FBO) 提供支援,並且會使用 Android 的硬體轉譯管道算繪檢視畫面,但前提是必須為檢視區塊階層啟用硬體加速功能。關閉硬體加速時,硬體層的運作方式與軟體層完全相同。

    軟體層由點陣圖提供支援,因此即使已啟用硬體加速功能,也能使用 Android 的軟體算繪管道算繪檢視畫面。受影響的檢視樹狀結構經常更新時,應避免使用軟體層。每次更新都會需要重新轉譯軟體層,因此速度可能較慢。

    詳情請參閱 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 說明文件。

  • Renderscript 3D 圖形引擎

    Renderscript 是執行階段 3D 架構,可提供用來建構 3D 場景的 API,以及與平台無關的特殊著色器語言,以達到最佳效能。您可以使用 Renderscript 加快圖形作業與資料處理速度。Renderscript 是為應用程式、桌布、輪轉介面等建立高效能 3D 效果的理想方法。

    詳情請參閱「使用 Renderscript 進行 3D 轉譯與運算」說明文件。

媒體

  • 縮時攝影影片

    Camcorder API 現可支援錄製縮時錄影影片。setCaptureRate() 可設定影格擷取速率。

  • 圖片串流的紋理支援

    新的 SurfaceTexture 可讓您擷取圖片串流做為 OpenGL ES 紋理。為 Camera 執行個體呼叫 setPreviewTexture() 後,就能指定 SurfaceTexture 來繪製影片播放或預覽影格中的項目。

  • HTTP 直播

    應用程式現在可以將 M3U 播放清單網址傳遞至媒體架構,開始 HTTP 直播工作階段。媒體架構支援大部分的 HTTP 即時串流規格,包括自動調節位元率。詳情請參閱「支援的媒體格式」文件。

  • EXIF 資料

    ExifInterface 包含相片光圈、ISO 和曝光時間的新欄位。

  • Camcorder 設定檔

    新的 hasProfile() 方法和多個影片品質設定檔 (例如 QUALITY_1080PQUALITY_720PQUALITY_CIF 等) 可讓您決定攝錄影機品質選項。

  • 數位媒體檔案傳輸

    這個平台內建透過 USB 對媒體/相片傳輸通訊協定 (MTP/PTP) 的支援,可讓使用者輕鬆在裝置和主機電腦之間傳輸任何類型的媒體檔案。開發人員可以憑藉這項支援來打造應用程式,讓使用者建立或管理多媒體檔案,然後讓他們可能需要在不同裝置間傳輸或共用互動式多媒體檔案。

  • 數位版權管理 (DRM)

    新的可擴充數位版權管理 (DRM) 架構,用於檢查和強制執行數位權利。這個程式庫分成兩個架構層:

    • DRM 架構 API,可向應用程式公開,並透過 Dalvik VM 執行適用於標準應用程式。
    • 原生程式碼 DRM 管理員可實作架構 API,並提供 DRM 外掛程式的介面,用於處理各種 DRM 配置的版權管理和解密作業。

    應用程式開發人員可透過這項架構提供抽象的整合式 API,進而簡化受保護內容的管理作業。這個 API 可隱藏 DRM 作業的複雜度,並可針對受保護的、未受保護的內容以及各種 DRM 配置提供一致的作業模式。

    針對裝置製造商、內容擁有者和網際網路數位媒體供應商,DRM 架構的外掛程式 API 提供了在 Android 系統中新增所選 DRM 配置的支援,以便安全強制執行內容保護。

    預先發布版並未提供任何原生 DRM 外掛程式,用於檢查和強制執行數位權利。不過,裝置製造商可能會在自己的裝置中運送 DRM 外掛程式。

    您可以在 android.drm 套件中找到所有 DRM API。

鍵盤支援

  • 支援 Control、Meta、Caps Lock、Num Lock 和捲動鎖定輔助鍵。詳情請參閱 META_CTRL_ON 和相關欄位。
  • 支援全電腦式鍵盤,包括支援 Escape、Home、End、Delete 等按鍵。您可以查詢 getKeyboardType() 並檢查 KeyCharacterMap.FULL,判斷重要事件是否來自完整鍵盤
  • TextView 現已支援使用鍵盤剪下、複製、貼上和選取全部功能,同時使用 Control+X、Control+C、Control+V 和 Control + A 鍵。也支援 PageUp/PageDown、Home/End 和鍵盤式文字選取功能。
  • KeyEvent 新增了多種方法,讓您可以更輕鬆且一致地檢查按鍵修飾符的狀態。請查看 hasModifiers(int)hasNoModifiers()metaStateHasModifiers()metaStateHasNoModifiers()
  • 應用程式可將 ActivityDialogView 設為子類別,並實作 onKeyShortcut(),藉此實作自訂鍵盤快速鍵。每當某個鍵與 Control 鍵合併時,架構會呼叫此方法。建立選項選單時,您可以為每個 <item> 元素 (或搭配 setShortcut()) 設定 android:alphabeticShortcutandroid:numericShortcut 屬性,註冊鍵盤快速鍵。
  • Android 3.0 隨附 ID 為 KeyCharacterMap.VIRTUAL_KEYBOARD 的新「虛擬鍵盤」裝置。虛擬鍵盤具有電腦樣式的美國按鍵對應,適合用於合成重要事件以測試輸入。

分割觸控事件

先前,只有一個檢視畫面可以一次接受觸控事件。Android 3.0 版支援將觸控事件分割至多個檢視畫面,甚至是視窗,因此不同檢視畫面可接受同時的觸控事件。

如果應用程式指定 Android 3.0 版,系統預設會啟用分割觸控事件。也就是說,當應用程式將 android:minSdkVersionandroid:targetSdkVersion 屬性的值設為 "11" 時。

不過,下列屬性可讓您在特定檢視區塊群組和不同視窗中停用跨檢視區塊的分割觸控事件。

  • 檢視區塊群組的 android:splitMotionEvents 屬性可讓您停用在版面配置中子檢視畫面之間發生的分割觸控事件。例如:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    如此一來,線性版面配置中的子項檢視畫面就無法分割觸控事件,一次只有一個檢視畫面可以接收觸控事件。

  • android:windowEnableSplitTouch 樣式屬性可讓您停用多個視窗的分割觸控事件,方法是將其套用至活動或整個應用程式的主題。例如:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    將這個主題套用至 <activity><application> 時,系統只會接受目前活動視窗中的觸控事件。例如,為了停用橫跨多個視窗的分割觸控事件,系統列就無法與活動同時接收觸控事件。這「不會」影響活動中的檢視畫面能否分割觸控事件。根據預設,活動仍可在不同檢視畫面中分割觸控事件。

    如要進一步瞭解如何建立主題,請參閱「套用樣式和主題」。

WebKit

  • 新增 WebViewFragment 類別,建立由 WebView 組成的片段。
  • 新的 WebSettings 方法:
  • 新的 WebView 方法:
    • onPause() 回呼:在 WebView 隱藏時暫停與 WebView 相關聯的任何處理作業。當 WebView 不在前景時,這項功能可以減少不必要的 CPU 或網路流量。
    • onResume() 回呼,用於繼續處理與 WebView 相關聯的處理,這類 WebView 已在 onPause() 期間暫停。
    • saveWebArchive() 可讓您將目前的檢視畫面儲存為裝置上的網頁封存。
    • showFindDialog() 會在目前的檢視畫面中啟動文字搜尋。

Browser

瀏覽器應用程式新增了下列功能以支援網頁應用程式:

  • 媒體擷取

    根據 HTML 媒體擷取規格的定義,瀏覽器允許網頁應用程式存取裝置的音訊、圖片和影片擷取功能。舉例來說,下列 HTML 會提供輸入內容,讓使用者擷取要上傳的相片:

    <input type="file" accept="image/*;capture=camera" />
    

    或者,使用者可以選擇排除 capture=camera 參數,選擇使用相機擷取新圖片,或從裝置中選取圖片 (例如從圖片庫應用程式選取)。

  • 裝置螢幕方向

    根據裝置螢幕方向事件規格的定義,瀏覽器允許網頁應用程式監聽 DOM 事件,該事件可提供裝置實體方向和動作的相關資訊。

    裝置方向會以 x 軸、y 軸和 z 軸表示,度數和動作會以加速和旋轉率資料表示。網頁可以使用事件類型 "deviceorientation" 呼叫 window.addEventListener,並註冊 "devicemotion" 事件類型來註冊動作事件,藉此註冊方向事件。

  • CSS 3D 轉換

    根據 CSS 3D 轉換模組規格的定義,瀏覽器允許以三種維度轉換 CSS 轉譯的元素。

JSON 公用程式

新的類別 JsonReaderJsonWriter 可協助您讀取及寫入 JSON 串流。新 API 可以和 org.json 類別相輔相成,這些類別會操控記憶體中的文件。

如要建立 JsonReader 的執行個體,請呼叫其建構函式方法,並傳遞動態饋給 JSON 字串的 InputStreamReader。接著,透過呼叫 beginObject() 開始讀取物件、使用 nextName() 讀取鍵名,並使用與類型相關的方法 (例如 nextString()nextInt()) 讀取值,並在 hasNext() 為 true 時繼續此操作。

如要建立 JsonWriter 的執行個體,請呼叫其建構函式,並傳遞適當的 OutputStreamWriter。然後,以類似讀取器的方式編寫 JSON 資料,並使用 name() 新增屬性名稱和適當的 value() 方法,新增個別的值。

這些類別預設為嚴格限制。每個類別的 setLenient() 方法會將這些方法設為更寬鬆地接受這些類別。這個寬鬆剖析模式也與 org.json 的預設剖析器相容。

新功能常數

<uses-feature> Manfest 元素應用於告知外部實體 (例如 Google Play),應用程式依附的硬體和軟體功能組合。在這個版本中,Android 新增下列新常數,應用程式可透過這個元素宣告:

  • "android.hardware.faketouch"

    宣告時,表示應用程式與提供模擬觸控螢幕 (或更好的) 裝置相容。配備模擬觸控螢幕的裝置會提供使用者輸入系統,可模擬部分觸控螢幕功能。例如滑鼠或遙控器,這類輸入系統可驅動螢幕上的遊標。這類輸入系統支援基本的觸控事件,例如按下、向上和拖曳。不過,在觸控模擬裝置上,較複雜的輸入類型 (例如手勢、快速滑過等) 可能較為困難或無法實現 (多點觸控手勢絕對不可行)。

    如果您的應用程式需要複雜的手勢,而且您「不想」從設有模擬觸控螢幕的裝置中篩除應用程式,則應使用 <uses-feature> 元素宣告 "android.hardware.faketouch"。如此一來,您的應用程式才能提供給最多的裝置類型,包括僅提供模擬觸控螢幕輸入的裝置。

    所有包含觸控螢幕的裝置也支援 "android.hardware.faketouch",因為觸控螢幕功能是觸控式觸控功能的超集。因此,除非您實際需要使用觸控螢幕,否則應新增觸控式觸控的 <uses-feature> 元素。

新權限

  • "android.permission.BIND_REMOTEVIEWS"

    您必須在 <service> 資訊清單元素中宣告為必要權限,才能實作 RemoteViewsService。舉例來說,建立使用 RemoteViewsService 填入集合檢視畫面的應用程式小工具時,資訊清單項目可能會如下所示:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />
    

全新平台技術

  • 儲存空間
    • 支援 eMMC 儲存空間的 ext4 檔案系統支援。
    • 用於支援 MTP 裝置的 FUSE 檔案系統。
    • 支援 USB 主機模式,以便支援鍵盤和 USB 集線器。
    • 支援 MTP/PTP
  • Linux 核心
    • 升級至 2.6.36
  • Dalvik VM
    • 用於支援及最佳化 SMP 的新程式碼
    • 對 JIT 基礎架構做出多項改善
    • 改善垃圾收集器:
      • 已針對 SMP 進行調整
      • 支援較大的堆積大小
      • 統一點陣圖和位元組緩衝區的處理
  • Dalvik 核心程式庫
    • 更快導入新的 NIO (新型 I/O 程式庫)
    • 改善例外狀況訊息
    • 修復漏洞和效能問題

API 差異報表

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

API 級別

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

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

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