Android 4.0 API

API 級別: 14

Android 4.0 (ICE_CREAM_SANDWICH) 是主要的平台版本,為使用者及應用程式添加多項新功能 開發人員。除了下方所述的所有新功能和 API 之外,Android 4.0 也是另一項重要任務 之所以發布平台版本,是因為 Android 3.x 提供各式各樣的 API 和 Holographic 主題 小螢幕裝置應用程式開發人員現在擁有單一平台和整合式 API 架構 可讓您使用提供 無論是手機、平板電腦等裝置, Android:Android 4.0 (API 級別 14) 以上版本。

開發人員可以用 Android 4.0 平台 適用於 Android SDK 的可下載元件。可下載的平台包括 Android 程式庫和系統映像檔,以及一組模擬器外觀 內容。如要開始針對 Android 4.0 進行開發或測試 使用 Android SDK Manager 將這個平台下載到 SDK。

API 總覽

以下各節提供 Android 4.0 新 API 的技術總覽。

聯絡人提供者中的 Social API

ContactsContract 供應商定義的 Contact API 是 支援新的社交功能,例如裝置擁有者的個人設定檔 這類應用程式可讓使用者邀請個別聯絡人加入電腦上安裝的 裝置。

使用者個人資料

Android 現在包含代表裝置擁有者的個人設定檔, ContactsContract.Profile 資料表。可維護使用者身分的社交應用程式 可在 ContactsContract.Profile 中建立新的 ContactsContract.RawContacts 項目,以改善使用者的個人資料。也就是代表裝置使用者的原始聯絡人 不屬於 ContactsContract.RawContacts URI 定義的傳統原始聯絡人表格而是必須新增一份 位於 CONTENT_RAW_CONTACTS_URI 的桌子。未加工 系統會將這個表格中的聯絡人匯總至使用者可見的單一設定檔,並加上「我」標籤。

如要新增設定檔的原始聯絡人,您必須使用 android.Manifest.permission#WRITE_PROFILE 權限。同樣地,為了讀取設定檔 資料表,您必須要求 android.Manifest.permission#READ_PROFILE 權限。不過 大多數應用程式都不需要讀取使用者個人資料,即使為 讀取使用者設定檔屬於機密權限,因此您也應該向使用者 存在的懷疑。

邀請意圖

INVITE_CONTACT 意圖動作允許應用程式 叫用一個動作,指出使用者想將聯絡人新增至社交網路。應用程式 接收應用程式會使用這個視窗邀請指定聯絡人 社群網路。大多數應用程式都會在這項作業的接收端完成。舉例來說, 使用者選取「新增連線」時,內建「使用者」應用程式會叫用邀請意圖的 使用者聯絡人詳細資料中列出的社交應用程式。

如要讓應用程式顯示在「新增連結」中清單時,您的應用程式必須提供同步轉換介面 同步處理社交網路上的聯絡資訊。接著,您必須向系統指出 應用程式會透過下列方式回應 INVITE_CONTACT 意圖 在應用程式的同步處理設定檔中加入 inviteContactActivity 屬性,並使用 系統傳送邀請意圖時,應啟動的活動完整名稱。 接著,啟動的活動可以從意圖的 並執行必要工作來邀請聯絡人加入網路,或將人員新增至 與使用者交流互動

大型相片

Android 應用程式現可支援聯絡人的高解析度相片。現在,當你將相片推送到 聯絡記錄後,系統會同時處理 96x96 的縮圖 (與先前情況相同) 和 256x256「顯示相片」儲存在新的檔案式相片商店中 (確切的儲存尺寸 日後可能會有差異)。您可以在聯絡人中加入大型相片, 相片位於PHOTO 然後由系統將此處理成適當的縮圖並顯示相片 。

聯絡人使用意見回饋

新的 ContactsContract.DataUsageFeedback API 可用於追蹤 使用者透過特定方式聯絡他人的頻率,例如他們使用聯繫的頻率 每個電話號碼或電子郵件地址。這項資訊有助於提升每位聯絡人的排名 方法,並為每位使用者提供更好的聯絡方式。

日曆供應程式

全新 Calendar API 可讓您讀取、新增、修改及刪除日曆、活動、參與者 提醒和快訊,相關資訊儲存在日曆供應程式中。

許多應用程式和小工具都能使用這些 API 讀取及修改日曆活動。不過 其中一些最吸引人的用途是同步轉換介面,可將使用者的日曆從 其他日曆服務,以統一位置存取所有 使用者事件。例如,Google 日曆活動會透過 管理員 Google Calendar Sync 轉接器,以便使用 Android 的內建功能檢視這些活動 行事曆應用程式。

Google 日曆供應商中日曆與活動相關資訊的資料模型為 由 CalendarContract 定義。使用者的所有日曆資料都會儲存在 各種 CalendarContract 子類別定義的資料表數量:

  • CalendarContract.Calendars 資料表包含特定日曆的資料 可能不準確或不適當這個表格中的每一列都含有單一日曆的詳細資料,例如名稱 顏色、同步資訊等。
  • CalendarContract.Events 資料表包含事件專屬資訊。 此表格中的每一列都含有單一事件的資訊,例如 活動標題、地點、開始時間和結束時間等。活動可能會發生一次或週期性 以便重複使用參與者、提醒和延伸屬性會儲存在不同的表格, 使用活動的 _ID 將其連結至活動。
  • CalendarContract.Instances 資料表會顯示以下項目的開始和結束時間: 發生這類事件在這個資料表中,每一列都代表一次出現記錄。一次性活動 執行個體與事件會具有一對一的對應關係。如果是週期性活動,多個資料列 自動產生相應於該事件的多次發生。
  • CalendarContract.Attendees」表格包含活動與會者或邀請對象 可能不準確或不適當每一列都代表同一活動的一位邀請對象。它會指定 的人是對事件的回應。
  • CalendarContract.Reminders」表格會保留快訊/通知資料。 每一列都代表一次事件的一則快訊。一個活動可以設定多個提醒。開啟 每個活動的提醒是在 MAX_REMINDERS 中指定,由同步轉換介面設定, 為指定日曆的擁有者。系統會根據活動提醒的分鐘數指定提醒時間 排程並指定鬧鐘方式,例如使用快訊、電子郵件或 SMS 設定提醒 使用者。
  • CalendarContract.ExtendedProperties 資料表包含不透明資料欄位 才能使用同步處理功能提供者不對這個表格中的項目採取行動,除非要刪除資料表 刪除。

如要透過日曆提供者存取使用者的日曆資料,您的應用程式必須要求存取 READ_CALENDAR 權限 (用於讀取權限) 和 WRITE_CALENDAR (用於寫入權限)。

事件意圖

如果您只想將事件新增至使用者的日曆,則可使用 ACTION_INSERT 意圖搭配 Events.CONTENT_URI 定義的資料,以便啟動 建立新活動的「日曆」應用程式活動。使用意圖不需要任何 權限,還可使用下列額外功能指定活動詳細資料:

語音留言提供者

新語音信箱供應商可讓應用程式新增語音留言到 裝置,以單一圖像呈現所有使用者的語音留言。舉例來說: 使用者可能有多個語音留言來源,例如 電話服務供應商,以及 VoIP 或其他替代語音的電話號碼 免費 Google Cloud 服務這些應用程式可以使用 Voicemail Provider API,為裝置新增語音留言。 內建的「電話」應用程式會將所有語音留言以整合簡報呈現給使用者。 雖然系統只有「電話」應用程式可讀取所有語音留言, 每個提供語音信箱的應用程式,皆可讀取已新增至系統的應用程式 (但無法讀取 讀取來自其他服務的語音留言)。

由於 API 目前不允許第三方應用程式讀取來自 系統,只有具備語音信箱的第三方應用程式才應該使用語音信箱 API 要提供給使用者

VoicemailContract 類別會定義 語音信箱供應商。VoicemailContract.VoicemailsVoicemailContract.Status 子類別提供了應用程式可由應用程式 插入語音留言資料,以便儲存在裝置中。如需語音留言供應商應用程式的範例,請參閱 語音信箱供應商 示範

多媒體

Android 4.0 新增多個 API,適用於與相片、相片等媒體互動的應用程式。 影片和音樂

媒體效果

你可以使用新的媒體特效架構,為圖片和圖片 影片。舉例來說,圖片效果 可讓您輕鬆修復紅眼、將圖片轉成灰階 調整亮度、調整飽和度、旋轉圖片、套用魚眼效果等。 系統會在 GPU 上執行所有效果,以取得最高效能。

為獲得最佳效能,效果會直接套用至 OpenGL 紋理,因此應用程式 必須具備有效的 OpenGL 內容,才能使用效果 API。要套用的紋理 則可能來自點陣圖、影片或相機。然而,有一些限制 紋理必須符合以下規則:

  1. 這些範圍必須繫結至 GL_TEXTURE_2D 紋理圖片
  2. 當中必須包含至少一個 mipmap 層級

Effect 物件定義可套用的單一媒體特效 產生圖片建立 Effect 的基本工作流程如下:

  1. 從 OpenGL ES 2.0 結構定義呼叫 EffectContext.createWithCurrentGlContext()
  2. 請使用傳回的 EffectContext 呼叫 EffectContext.getFactory(),以傳回例項 (共 EffectFactory 個)。
  3. 呼叫 createEffect(),並向其傳遞 來自 @link android.media.effect.EffectFactory} 的效果名稱,例如 EFFECT_FISHEYEEFFECT_VIGNETTE

您可以呼叫 setParameter() 並傳遞參數名稱和參數值,調整效果參數。每種效果都接受 不同參數,一起記錄為效果名稱舉例來說,EFFECT_FISHEYE 有一個參數適用於scale 扭曲失真

如要對紋理套用效果,請在紋理上呼叫 apply() Effect 並傳入輸入紋理、寬度和高度,以及輸出內容 生成的圖片輸入紋理必須繫結至 GL_TEXTURE_2D 紋理 圖片 (通常只要呼叫 glTexImage2D() 函式)。您可以提供多個 mipmap 層級。如果輸出紋理尚未繫結至 紋理圖片,系統會將效果自動繫結為 GL_TEXTURE_2D 和一個 mipmap 層級 (0),兩者俱有相同的 mipmap 層級 這些尺寸

我們保證支援EffectFactory中列出的所有效果。 不過,並非所有裝置都支援外部程式庫提供的某些額外效果。 因此,您必須先呼叫 isEffectSupported()

遙控器用戶端

新的 RemoteControlClient 可讓媒體播放器啟用播放功能 遠端控制用戶端 (例如裝置螢幕鎖定) 的控制項。媒體播放器也可以 遙控器目前播放的媒體相關資訊,例如曲目 資訊和專輯封面。

如要為媒體播放器啟用遠端控制用戶端,請將 RemoteControlClient 及其建構函式執行個體化,然後向此函式傳遞廣播 ACTION_MEDIA_BUTTONPendingIntent。意圖也必須在處理 ACTION_MEDIA_BUTTON 事件的應用程式中,宣告明確的 BroadcastReceiver 元件。

如要宣告播放器可處理的媒體控制項輸入項目,您必須在您的遊戲上呼叫 setTransportControlFlags() RemoteControlClient,傳遞一組 FLAG_KEY_MEDIA_* 旗標,例如 FLAG_KEY_MEDIA_PREVIOUSFLAG_KEY_MEDIA_NEXT

接著,您必須將其傳遞至 MediaManager.registerRemoteControlClient() 來註冊 RemoteControlClient。 註冊完成後,您在 RemoteControlClient 例項化時宣告的廣播接收器會收到 ACTION_MEDIA_BUTTON 。您收到的意圖包括所按下媒體鍵的 KeyEvent,可透過 getParcelableExtra(Intent.EXTRA_KEY_EVENT) 的意圖擷取。

如要在遙控器上顯示媒體播放的相關資訊,請呼叫 editMetaData() 並將中繼資料新增至傳回的 RemoteControlClient.MetadataEditor。您可以為媒體圖片提供點陣圖 數值,以及曲目標題這類文字資訊。適用對象 有關可用鍵的資訊,請參閱 MediaMetadataRetriever 中的 METADATA_KEY_* 旗標。

如需實作範例,請參閱隨機音樂播放器, 提供相容性邏輯,以便在 Android 4.0 上啟用遠端控制用戶端 同時繼續支援裝置改回 Android 2.1。

媒體播放器

  • 現在必須具備 INTERNET 權限,才能從 MediaPlayer 串流播放線上媒體。如果您使用 MediaPlayer 播放網路內容時,請務必新增 INTERNET 存取資訊清單的權限,或無法在 Android 裝置上播放媒體 4.0.
  • setSurface() 可定義 Surface 做為影片接收器。
  • setDataSource() 可讓你: 透過要求傳送額外的 HTTP 標頭,這對 HTTP(S) 即時串流很有幫助
  • HTTP(S) 直播現在會遵守所有請求的 HTTP Cookie

媒體類型

Android 4.0 新增:

  • HTTP/HTTPS 即時串流通訊協定第 3 版
  • ADTS 原始 AAC 音訊編碼
  • WebP 圖片
  • Matroska 影片

詳情請參閱支援的媒體 格式:

相機

Camera 類別現在提供用於偵測臉孔及控制的 API 焦點和測量區域

臉部偵測

相機應用程式現在可以透過 Android 的臉部偵測 API 強化相關功能, 只能偵測拍攝對象的臉部,還可偵測眼睛和嘴巴等特定臉部特徵。

如要偵測相機應用程式中的臉孔,您必須呼叫 setFaceDetectionListener() 註冊 Camera.FaceDetectionListener。接著,您可以開始 相機介面並呼叫 startFaceDetection() 即可開始偵測臉孔。

當系統在相機場景中偵測到一或多個臉孔時,就會呼叫您回呼中的 onFaceDetection() 回呼, 實作 Camera.FaceDetectionListener,包括 Camera.Face 物件。

Camera.Face 類別的執行個體會提供 所偵測到的臉孔,包括:

  • Rect 會指定相對於相機的錶面邊界 目前的視野
  • 介於 1 到 100 之間的整數,表示系統判定物件是 人臉
  • 可用於追蹤多個臉孔的專屬 ID
  • 多個 Point 物件,指出眼睛和嘴巴的位置 定位於

注意:臉部偵測功能可能不支援某些類型的手機 因此,請務必呼叫 getMaxNumDetectedFaces() 以確認裝置是否退回 大於零的值此外,某些裝置可能無法辨識眼睛和嘴巴 在這種情況下,Camera.Face 物件中的這些欄位會是空值。

聚焦和測光區域

相機應用程式現在可以控制相機對焦與測光區域 餘額 具備自動曝光功能這兩項功能都會使用新的 Camera.Area 類別來指定 攝影機目前檢視畫面的聚焦區域或計量付費範圍。Camera.Area 類別的執行個體會使用 Rect 和區域權重來定義區域邊界,代表該類別的重要性等級 其他要考慮的區域,以整數表示。

設定焦點區域或計量區域前,請先分別呼叫 getMaxNumFocusAreas()getMaxNumMeteringAreas()。如果這些函式傳回 0, 裝置不支援對應的功能。

如要指定要使用的聚焦或計量區域,只要呼叫 setFocusAreas()setMeteringAreas() 即可。每個物件都會收集 Camera.Area 物件的 List,用於指出待考量的區域 用於對焦點或計量功能例如,您可以實作可讓使用者設定 焦點區域,只要輕觸預覽畫面中的一個區域,即可轉譯為 Camera.Area 物件,並要求相機將焦點放在場景該區域。 該區域的焦點或曝光度會隨著場景中的場景變化而更新。

持續自動對焦相片

你現在可以在拍照時啟用連續自動對焦 (CAF)。如要在 相機應用程式,請傳遞 FOCUS_MODE_CONTINUOUS_PICTUREsetFocusMode()。準備拍攝時 相片,呼叫 autoFocus()Camera.AutoFocusCallback 會立即收到回呼,指出是否 那就是 AI 開發原則如要在收到回呼後恢復 CAF,您必須呼叫 cancelAutoFocus()

注意:拍照時也支援連續自動對焦 影片,使用 FOCUS_MODE_CONTINUOUS_VIDEO,也就是 已在 API 級別 9 中新增。

其他相機功能

攝影機廣播意圖

  • Camera.ACTION_NEW_PICTURE: 表示使用者已拍攝新相片。內建的「相機」應用程式會叫用這個 API 但第三方相機應用程式也應在相片拍攝完成後播送這個意圖 拍照後
  • Camera.ACTION_NEW_VIDEO: 表示使用者已拍攝新影片。內建的「相機」應用程式會叫用這個 API 但第三方相機應用程式也應在影片錄製後播送 拍攝影片後

Android Beam (透過 NFC 推送 NDEF 功能)

Android Beam 是全新的 NFC 功能,可讓您將 NDEF 訊息從某部裝置傳送到 另一個程序 (也稱為「NDEF Push」的程序),系統會在兩個 支援 Android Beam 的 Android 裝置靠近手機 (約 4 公分) 但玩家的後盾就會碰觸NDEF 訊息中的資料可以包含任何你想分享的資料 能在裝置間切換例如「使用者」應用程式會分享聯絡人、YouTube 會分享影片,以及瀏覽瀏覽器 會透過 Android Beam 分享網址。

如要使用 Android Beam 在裝置之間傳輸資料,您需要建立 NdefMessage,其中包含活動當下要分享的資訊 前景接著,您必須將 NdefMessage 傳遞至系統 (兩個其中之一) 方式:

在系統成功傳送 NDEF 後,您想執行特定程式碼, 訊息傳給其他裝置,可以實作 NfcAdapter.OnNdefPushCompleteCallback 並使用 setNdefPushCompleteCallback() 進行設定。系統會 並在訊息傳送時呼叫 onNdefPushComplete()

在接收裝置上,系統會分派 NDEF Push 訊息與一般 NFC 的方式類似 標記內。系統會使用 ACTION_NDEF_DISCOVERED 叫用意圖 操作來啟動活動,並根據 NdefMessage 中的第一個 NdefRecord 設定網址或 MIME 類型。針對您要指定的活動 回應,您可以針對應用程式重視的網址或 MIME 類型宣告意圖篩選器。如要 請參閱 NFC 開發人員指南。

如果您想讓 NdefMessage 傳送 URI,現在可以使用便利好用的功能 方法 createUri,根據字串或 Uri 物件建立新的 NdefRecord。如果 URI 是 如果您希望應用程式在 Android Beam 事件期間也接收的特殊格式,則 應使用相同的 URI 配置為活動建立意圖篩選器,以便接收 所接收的 NDEF 訊息

您也應該傳送「Android 應用程式記錄」時間:NdefMessage 可以確認您的應用程式會處理傳入的 NDEF 訊息,即使 篩選同一個意圖動作您可以透過以下方法建立 Android 應用程式記錄: 呼叫 createApplicationRecord() 並傳送 應用程式的套件名稱。當其他裝置收到包含 應用程式記錄和多個應用程式都包含處理指定意圖的活動, 系統會根據比對結果,將訊息傳遞到應用程式中的活動中 (根據 應用程式記錄中)。如果目標裝置目前未安裝您的應用程式, 系統會使用 Android 應用程式記錄啟動 Google Play,並將使用者導向 才能安裝該應用程式。

如果您的應用程式未使用 NFC API 執行 NDEF Push 訊息,則 Android 會提供 預設行為:當應用程式在某部裝置的前景中,且 Android Beam 由另一個 Android 裝置叫用,則其他裝置會收到一則 NDEF 訊息, 可識別應用程式的 Android 應用程式記錄。如果接收端裝置的 應用程式就會啟動如果尚未安裝,Google Play 會開啟並 使用者才能安裝您的應用程式

如要進一步瞭解 Android Beam 和其他 NFC 功能,請參閱 NFC 基本概念開發人員指南。部分範例程式碼 如需使用 Android Beam,請參閱 Android Beam 示範

Wi-Fi P2P

Android 現在支援在 Android 裝置與 Android 裝置之間的 Wi-Fi 點對點 (P2P) 連線 其他類型的裝置 (符合 Wi-Fi Alliance 的 Wi-Fi DirectTM 規範) 認證計劃)。Android 架構提供了 一組 Wi-Fi P2P API,可讓您在每部裝置時搜尋並連結其他裝置 支援 Wi-Fi P2P,而且距離超過 藍牙連線。

新的套件「android.net.wifi.p2p」內含用於執行點對點作業的所有 API 並且提供 Wi-Fi 連線。您需要處理的主要類別是 WifiP2pManager,只要呼叫 getSystemService(WIFI_P2P_SERVICE) 即可取得。WifiP2pManager 中的 API 可讓您:

此外,您也需要使用其他介面和類別,例如:

如要使用 Wi-Fi P2P API,應用程式必須要求下列使用者權限:

Android 系統也會在某些 Wi-Fi P2P 活動期間播送多種不同的動作:

詳情請參閱 WifiP2pManager 說明文件。其他 請查看 Wi-Fi P2P 示範 範例應用程式。

藍牙健康裝置

Android 現已支援藍牙健康設定檔裝置,因此您可以建立使用 透過藍牙與支援藍牙的健康裝置進行通訊,例如心率監測器。 血糖、溫度計和體重計

與一般耳機和 A2DP 設定檔裝置類似,必須使用 BluetoothProfile.ServiceListenerHEALTH 設定檔類型呼叫 getProfileProxy(),才能與設定檔建立連線 Proxy 物件

取得健康設定檔 Proxy (BluetoothHealth) 物件) 連線及與配對的健康裝置通訊時,必須納入下列新 藍牙類別:

如要進一步瞭解如何使用藍牙健康設定檔,請參閱 BluetoothHealth 的說明文件。

無障礙設定

Android 4.0 為視障使用者提供更豐富的無障礙體驗 和擴充 API 開發進階無障礙服務

「輕觸探索」模式

視障人士現在可透過輕觸及拖曳手指的方式, 畫面,聆聽內容的語音說明。因為觸控探索模式的作用類似 它讓螢幕閱讀器能夠以與螢幕相同的方式識別說明文字 當使用者使用 D-Pad 或軌跡球進行瀏覽 - 閱讀畫面上的資訊後 由android:contentDescriptionsetContentDescription()產生,模擬「懸停」活動。所以 要提醒您,您應該為 尤其是 ImageButtonEditText ImageView 和其他可能不含描述性字詞的小工具 文字。

View 無障礙功能

如要強化無障礙服務 (例如螢幕閱讀器) 取得的資訊,您可以採取下列做法: 在自訂 View 元件中,實作適用於無障礙功能事件的新回呼方法。

請注意,sendAccessibilityEvent() 方法在 Android 中的行為已變更 4.0.與先前的 Android 版本相同,當使用者在裝置上啟用無障礙服務時 而且會觸發點擊或懸停等輸入事件,系統就會在相應檢視畫面上呼叫 sendAccessibilityEvent()。先前, sendAccessibilityEvent() 的實作會 初始化 AccessibilityEvent 並傳送至 AccessibilityManager。新行為需要一些額外的回呼 方法,讓檢視區塊及其父項可以為事件新增更多背景資訊:

  1. 叫用時,sendAccessibilityEvent()sendAccessibilityEventUnchecked() 方法會延後 至 onInitializeAccessibilityEvent()

    View 的自訂實作可能想要導入 onInitializeAccessibilityEvent(),以便: 將其他無障礙資訊附加至 AccessibilityEvent,但也應呼叫上層實作項目, 提供標準內容說明、項目索引等預設資訊。 不過,請勿在此回呼中加入其他文字內容, 下一步。

  2. 初始化後,如果事件是其中一種類型,應填入文字 資訊,檢視畫面會收到對 dispatchPopulateAccessibilityEvent() 的呼叫, 遵從onPopulateAccessibilityEvent() 回呼。

    View 的自訂實作通常應實作 onPopulateAccessibilityEvent() 以新增其他 將文字內容傳送到 AccessibilityEvent (如果缺少 android:contentDescription 文字,或是 不足。如要在 AccessibilityEvent,呼叫 getText()add()

  3. 此時,View 會呼叫 requestSendAccessibilityEvent()的 父母檢視模式。這樣每個家長檢視畫面就能藉由多種方式充實無障礙資訊 新增 AccessibilityRecord,直到 最後到達根檢視畫面,該檢視畫面會使用 sendAccessibilityEvent() 將事件傳送至 AccessibilityManager

除了上述新方法 (在擴充 View 類別時相當實用) 以外,您也可以擴充 AccessibilityDelegate 並在檢視畫面中使用View setAccessibilityDelegate()。 進行這項操作時,檢視畫面中的每個無障礙方法都會將呼叫延後至以下項目中相對應的方法: 委派內容。舉例來說,當檢視區塊收到對 onPopulateAccessibilityEvent() 的呼叫時,就會傳遞給 使用 View.AccessibilityDelegate 建立相同方法任何未由 代表預設行為會將委派項目傳回檢視畫面。這可以只覆寫 不擴充 View 類別的情況下,針對特定檢視畫面的必要方法。

如要維持與 Android 4.0 以下版本的相容性,同時支援 全新的無障礙功能 API 可透過最新版的 v4 支援 程式庫 (位於 Compatibility Package, r4) 使用一組公用程式類別,以回溯相容的方式提供新的無障礙功能 API 設計。

無障礙服務

如果您開發無障礙服務,請提供各種無障礙事件的相關資訊 目前已大幅擴充系統,為使用者提供更進階的無障礙意見回饋。於 是根據檢視組合產生事件,提供更加充足的背景資訊,以及 可讓無障礙服務掃遍檢視區塊階層,取得額外的檢視資訊及 特殊情況

如果您要開發無障礙服務 (例如螢幕閱讀器),可以 並請按照以下程序,執行額外的內容資訊及掃遍檢視區塊階層:

  1. 收到應用程式的 AccessibilityEvent 時 呼叫 AccessibilityEvent.getRecord() 以擷取特定的 AccessibilityRecord (可能會附加多筆記錄附加至 事件)。
  2. AccessibilityEvent 或個別 AccessibilityRecord 中,您可以呼叫 getSource() 來擷取 AccessibilityNodeInfo 物件。

    AccessibilityNodeInfo 代表單一節點 都會使用您可以查詢該視窗內容的無障礙資訊 節點。AccessibilityEvent 傳回的 AccessibilityNodeInfo 物件說明事件來源,而來源 AccessibilityRecord 描述活動的前身 來源。

  3. 使用 AccessibilityNodeInfo 即可查詢資訊 則可呼叫 getParent()getChild() 來掃遍檢視畫面 甚至是在節點中加入子檢視畫面

為了讓您的應用程式以無障礙服務的形式發布到系統, 必須宣告與 AccessibilityServiceInfo 對應的 XML 設定檔。如要進一步瞭解如何建立 無障礙服務,請參閱 AccessibilityServiceSERVICE_META_DATA 以瞭解 XML 設定的相關資訊。

其他無障礙功能 API

如要瞭解裝置的無障礙狀態,AccessibilityManager 有一些新的 API,例如:

拼字檢查服務

新的拼字檢查工具架構可讓應用程式建立拼字檢查工具, 輸入法架構 (適用於輸入法編輯器)如要建立新的拼字檢查工具,您必須實作 延伸 SpellCheckerService 及擴充 SpellCheckerService.Session 類別,以提供拼字建議 顯示在介面回呼方法所提供的文字上。在 SpellCheckerService.Session 回呼方法中,您必須傳回 視為 SuggestionsInfo 物件來提供拼字建議。

使用拼字檢查工具服務的應用程式必須宣告服務要求的 BIND_TEXT_SERVICE 權限。 服務也必須將意圖篩選器宣告為 <action android:name="android.service.textservice.SpellCheckerService" /> 做為意圖的動作,且 包含宣告拼字設定資訊的 <meta-data> 元素 檢查工具

查看範例 拼字檢查服務應用程式 範例 拼字檢查用戶端用戶端應用程式。

文字轉語音引擎

Android 的文字轉語音 (TTS) API 功能已大幅擴充,讓應用程式能夠: 更易於導入自訂 TTS 引擎;想要使用 TTS 引擎的應用程式, 以下提供幾個全新的 API 供您選取引擎

使用文字轉語音引擎

在先前的 Android 版本中,您可以使用 TextToSpeech 類別 ,以使用系統提供的 TTS 引擎執行文字轉語音 (TTS) 作業,或設定 使用 setEngineByPackageName() 自訂引擎在 Android 4.0 中,setEngineByPackageName() 方法 現已淘汰,現在您可以將這個引擎與新的 TextToSpeech 建構函式 (可接受 TTS 引擎的套件名稱) 搭配使用。

您也可以使用 getEngines() 查詢可用的 TTS 引擎。這個方法會傳回 TextToSpeech.EngineInfo 物件清單,其中包含引擎的 圖示、標籤和套件名稱

建構文字轉語音引擎

之前,自訂搜尋引擎必須使用未記錄的原生標頭來建構引擎。 檔案。在 Android 4.0 中,您可以使用完整的架構 API 來建構 TTS 引擎。

基本設定需要實作 TextToSpeechService 回應 INTENT_ACTION_TTS_SERVICE 意圖。 TTS 引擎主要工作是在服務中的 onSynthesizeText() 回呼期間發生 擴充 TextToSpeechService系統提供這個方法 物件:

  • SynthesisRequest:此檔案包含各種資料,包括 合成語音、語言代碼、語音速率和語音音調。
  • SynthesisCallback:這是 TTS 引擎的介面 並以串流音訊的形式傳送結果語音資料。首先,引擎必須呼叫 start() 以表示引擎已可放送 然後呼叫 audioAvailable() 在位元組緩衝區中傳遞音訊資料引擎將所有音訊通過 緩衝區,請呼叫 done()

該架構現已支援使用 true API 建立 TTS 引擎,並支援原生程式碼 已移除查看有關相容性層的網誌文章 :將舊的 TTS 引擎轉換為新架構。

如需使用新 API 的 TTS 引擎範例,請參閱 Text To Speech Engine 範例應用程式。

網路使用率

Android 4.0 可讓使用者精準掌握應用程式所使用的網路數據量。 使用者可以運用「設定」應用程式提供的控制項,管理網路數據用量和用量上限 甚至禁止個別應用程式使用背景資料。為了避免使用者停用您的 應用程式如何在背景存取資料,而您應該擬定相關策略來運用這些資料 連線效率,並根據可用的連線類型調整用量。

如果您的應用程式會執行大量網路交易,您應提供能讓使用者進行設定 讓使用者控管應用程式的資料習慣,例如應用程式同步處理資料的頻率, 只在連上 Wi-Fi 時上傳/下載資料,以及是否在漫遊時使用數據服務等。 使用者就不太可能在需要監控的情況下 應用程式用量即將達到上限,因為他們可以精準控管應用程式使用的資料量。 如要為這些設定提供偏好設定,請將這類活動納入資訊清單 宣告 ACTION_MANAGE_NETWORK_USAGE 的意圖篩選器 動作。例如:

<activity android:name="DataPreferences" android:label="@string/title_preferences">
    <intent-filter>
       <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

此意圖篩選器會向系統指出這是控制 限制應用程式的數據用量因此,如果使用者查看應用程式正在使用 「設定」應用程式「查看應用程式設定」請點選畫面上的按鈕 以便使用者調整應用程式使用的資料量。

另請注意,getBackgroundDataSetting() 現已 已淘汰且一律傳回 true,請改用 getActiveNetworkInfo()。嘗試任何網路前的準備 交易,請務必呼叫 getActiveNetworkInfo() 取得代表目前網路的 NetworkInfo,並查詢 isConnected() 檢查裝置 以獲得最佳效能和最安全的連線您也可以檢查其他連線屬性,例如裝置是否 漫遊或連上 Wi-Fi。

Enterprise

Android 4.0 擴充企業應用程式所需的功能,並提供以下功能。

VPN 服務

新的 VpnService 可讓應用程式自行建構 VPN (虛擬 私人網路),以 Service 的形式執行。VPN 服務會為 虛擬網路具備自己的位址和轉送規則,並且使用 檔案描述元

如要建立 VPN 服務,請使用 VpnService.Builder,讓您能指定 包括網路位址、DNS 伺服器、網路路徑等完成後,您就能建立 呼叫 establish() 來傳回 ParcelFileDescriptor,即可擷取介面。

VPN 服務可攔截封包,因此可能會對安全性造成影響。因此,如果您 實作 VpnService,那麼您的服務就必須要求 BIND_VPN_SERVICE,確保只有系統可繫結至該系統 ( 系統已獲得此權限,應用程式無法提出要求)。如何使用 VPN 服務 使用者必須在系統設定中手動啟用。

裝置政策

管理裝置限制的應用程式現可使用 setCameraDisabled()USES_POLICY_DISABLE_CAMERA 屬性 (在政策設定檔中套用 <disable-camera /> 元素) 停用相機。

憑證管理

新的 KeyChain 類別提供 API,可讓您匯入和存取 安裝憑證憑證可以簡化兩個用戶端的安裝作業 憑證 (用於驗證使用者的身分) 和憑證授權單位憑證 ( 驗證伺服器身分)。網路瀏覽器或電子郵件用戶端等應用程式可以存取 以便透過伺服器驗證使用者身分請參閱《KeyChain》 說明文件。

裝置感應器

Android 4.0 新增了以下兩種感應器:

如果裝置同時具備 TYPE_AMBIENT_TEMPERATURETYPE_RELATIVE_HUMIDITY 感應器,你可以用來計算露點 以及絕對濕度

上一次的溫度感應器 TYPE_TEMPERATURE 已淘汰。應使用 TYPE_AMBIENT_TEMPERATURE 感應器 。

此外,Android 的三個合成感應器也有顯著改善,現在其低 讓輸出內容更順暢這些感應器包括重力感應器 (TYPE_GRAVITY)、旋轉向量感應器 (TYPE_ROTATION_VECTOR) 和線性加速感應器 (TYPE_LINEAR_ACCELERATION)。改良後的感應器必須仰賴陀螺儀 感應器來提升輸出品質,因此感應器只會在有陀螺儀的裝置顯示。

動作列

ActionBar 已更新,以便支援多項新行為。大多數 重要的是,在容器中執行時,系統會妥善管理動作列的大小和設定 能在不同大小的螢幕上提供最佳使用者體驗。例如: 當螢幕較窄 (例如手機方向為直向) 時,動作列的 導覽分頁會顯示在「堆疊列」中顯示在主要動作列正下方你可以 可使用「分割動作列」所有待辦事項都放在底部獨立列中 顯示在畫面上

分割動作列

如果動作列內含多個操作項目,有些操作項目可能不會全部納入 螢幕較窄,因此系統會在溢位選單中放置更多格式。不過,Android 4.0 版本 可以啟用「分割動作列」讓更多待辦事項可以出現在 。如要啟用分割動作列,請在android:uiOptions"splitActionBarWhenNarrow" <application>敬上 標記或 個別 <activity> 標記 。啟用後,系統會在底部 螢幕較窄時,所有待辦事項的畫面上 (主要畫面上不會顯示任何操作項目) 動作列)。

如要使用 ActionBar.Tab API 提供的導覽分頁, 但不需要在頂端顯示主要動作列 (如果您只想在頂端顯示分頁),然後啟用 按照上述方式啟用分割動作列,並呼叫 setDisplayShowHomeEnabled(false) 以停用 應用程式圖示。如果主要動作列中沒有任何內容 左側只列出頂端的導覽分頁,以及頂端的操作項目 。

動作列樣式

如要將自訂樣式套用至動作列,您可以使用新的樣式屬性 backgroundStackedbackgroundSplit 套用背景 堆疊長條圖和分割列的可繪項目或顏色。您也可以在以下位置設定這些樣式: 搭配 setStackedBackgroundDrawable()setSplitBackgroundDrawable() 使用。

動作提供者

新的 ActionProvider 類別可讓您建立 待辦事項動作供應程式可定義動作檢視畫面、預設動作行為和子選單 。當您要建立 動態行為 (例如變數動作檢視畫面、預設動作或子選單) 是擴充 ActionProvider 的理想解決方案,目的是建立可重複使用的元件 在片段或活動中處理各種操作項目轉換。

舉例來說,ShareActionProvider 是可以協助「分享」的 ActionProvider 擴充功能動作列。不使用 叫用 ACTION_SEND 意圖的傳統操作項目,您可以 使用此動作提供者,以顯示動作檢視畫面的下拉式選單。 ACTION_SEND 意圖。使用者選取要使用的應用程式時 ShareActionProvider 會記住您選取的動作,並提供該選項 在動作檢視畫面中,你可以更快速地與該應用程式分享資訊。

如要為操作項目宣告動作供應程式,請加入 android:actionProviderClass 屬性 (位於活動選項選單的 <item> 元素中),以及動作的類別名稱 {0}。例如:

<item android:id="@+id/menu_share"
      android:title="Share"
      android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider" />

你在活動的「onCreateOptionsMenu()」中 回呼方法,從選單項目擷取動作供應程式的執行個體,然後設定 意圖:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options, menu)
    val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider
    // Set the share intent of the share action provider.
    shareActionProvider?.setShareIntent(createShareIntent())
    ...
    return super.onCreateOptionsMenu(menu)
}

Java

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    ShareActionProvider shareActionProvider =
          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
    // Set the share intent of the share action provider.
    shareActionProvider.setShareIntent(createShareIntent());
    ...
    return super.onCreateOptionsMenu(menu);
}

如需使用 ShareActionProvider 的範例,請參閱 ApiDemos 中的 ActionBarShareActionProviderActivity

可收合動作檢視畫面

提供動作檢視畫面的動作項目現可在動作檢視狀態與 傳統操作項目狀態先前僅支援 SearchView 作為動作檢視時的收合,但您現在可以為任何待辦事項新增動作檢視畫面 將展開狀態 (顯示動作檢視) 和收合狀態 (操作項目為 顯示)。

如要宣告內含動作檢視畫面的操作項目可以收合,請在選單的 XML 檔案中,為 <item> 元素的 android:showAsAction 屬性加入 “collapseActionView" 標記。

如要在動作檢視畫面之間切換展開和收合時接收回呼,請註冊 呼叫 setOnActionExpandListener() 來搭配個別 MenuItemMenuItem.OnActionExpandListener 例項。一般而言,建議您在 onCreateOptionsMenu() 回呼期間執行這項操作。

如要控制可收合的動作檢視畫面,可以在以下位置呼叫 collapseActionView()expandActionView(): 個別的 MenuItem

建立自訂動作檢視畫面時,您也可以實作新的 CollapsibleActionView 介面,以便在檢視區塊展開時接收回呼 已收合。

動作列的其他 API

  • setHomeButtonEnabled() 可讓您指定 圖示/標誌的行為是否為前往首頁或「向上」的按鈕(傳遞「true」讓程式碼的行為是 按鈕)。
  • setIcon()setLogo() 可讓您在執行階段定義動作列圖示或標誌。
  • Fragment.setMenuVisibility() 可讓您啟用 或停止顯示片段宣告的選項選單項目。如果 片段已新增至活動,但未顯示,因此選單項目應 隱藏。
  • FragmentManager.invalidateOptionsMenu() 可讓您在片段生命週期的各種狀態期間使活動選項選單失效 可能無法使用 Activity 中的對等方法。

使用者介面和檢視畫面

Android 4.0 推出了多種新的檢視畫面和其他 UI 元件。

GridLayout

GridLayout 是新的檢視區塊群組,可將子檢視區塊放在矩形中 格線。與 TableLayout 不同的是,GridLayout 會依附於 階層,而且不使用資料表列等中繼檢視畫面來提供結構。 子項會改為指定應涵蓋哪些列和欄 (儲存格可以橫跨多個儲存格) 資料列和/或資料欄),根據預設,會在格線的資料列與資料欄之間依序排列。 GridLayout 方向會決定順序子項是否 預設為水平或垂直方向。您可以使用 新的 Space 檢視畫面的執行個體,或是設定相關邊界參數 兒童

請參閱 ApiDemos 以取得使用 GridLayout 的範例。

紋理檢視

TextureView 是全新的檢視畫面,可用來顯示內容串流,例如 視為影片或 OpenGL 場景雖然與 SurfaceView 類似,但 TextureView 的獨特之處在於其行為與一般檢視畫面類似,而非建立 獨立視窗,因此您可以將其視為任何其他 View 物件。例如: 可以使用變形效果、使用 ViewPropertyAnimator 加入動畫,或 使用 setAlpha() 調整不透明度。

請注意,TextureView 只能在硬體加速視窗中運作。

詳情請參閱 TextureView 說明文件。

切換小工具

新的 Switch 小工具是雙狀態切換鈕,可讓使用者拖曳至任一狀態 另一種狀態 (或者輕觸) 便可在兩個狀態之間切換。

您可以使用 android:textOnandroid:textOff 屬性來指定文字 。android:text 屬性也是 可讓你在切換鈕加上標籤

如需切換鈕的範例,請參閱 switches.xml 版面配置檔案 和個別切換鈕 活動。

Android 3.0 導入了 PopupMenu,可建立彈出的簡易內容選單 放在您指定的錨點 (通常位於所選項目的點)。Android 4.0 擴充套件 PopupMenu 具有一些實用功能:

偏好設定

新的 TwoStatePreference 抽象類別可做為 提供雙州選取選項的偏好設定。新的 SwitchPreferenceTwoStatePreference 的擴充功能,可在Switch 偏好設定檢視畫面,方便使用者自行開啟或關閉設定,而不需開啟 偏好設定畫面或對話方塊舉例來說,「設定」應用程式會使用 SwitchPreference 進行 Wi-Fi 和藍牙設定。

系統主題

所有指定 Android 4.0 應用程式的預設主題 (透過設定 targetSdkVersionminSdkVersion 變更為 “14" 以上版本) 此時已是 「裝置預設值」主題:Theme.DeviceDefault。可能是 深色 Holo 主題或由特定裝置定義的其他深色主題。

Theme.Holo 主題系列保證不會變更 執行同一版本的 Android 時,將應用程式保持在最佳狀態如果你明確指定 將任一 Theme.Holo 主題套用至活動,您可以 請放心,這些主題不會在相同類型的不同裝置上改變角色。 平台版本。

如果您希望應用程式與整體裝置主題融為一體 (例如使用不同的原始設備製造商 (OEM) 時) 為系統提供不同的預設主題),您必須明確套用 Theme.DeviceDefault 系列的主題。

選項選單按鈕

從 Android 4.0 開始,您會發現手機不再需要使用選單硬體按鈕。 但是,如果現有的應用程式提供選項選單,且預期會出現 選單按鈕。為確保現有應用程式能繼續正常運作,系統會提供 顯示專為舊版 Android 設計的應用程式畫面上的選單按鈕。

為提供最佳使用者體驗,全新和更新後的應用程式應改用 ActionBar 來提供選單項目的存取權,並將 targetSdkVersion 設為 "14",以利用最新的架構預設行為。

系統 UI 瀏覽權限的控制項

自 Android 早期發展以來,系統管理了一個名為 狀態的 UI 元件 長條,位於手機頂部,提供電信業者等資訊 訊號、時間、通知等Android 3.0 新增了平板電腦的系統列 裝置,位於螢幕底部,提供系統導覽控制項 (首頁、 返回等) 以及狀態列傳統提供的元素介面。於 在 Android 4.0 版本中,系統提供了稱為導覽列的新型系統 UI。個人中心 我們調整的導覽列是導覽列 連線控制介面 若是裝置沒有硬體相應的介面可供瀏覽,卻沒有 系統列的通知使用者介面及設定控制項。因此,提供導覽的裝置 此外,頂端也會顯示狀態列

不過,在這之前,您可以使用 FLAG_FULLSCREEN 標記隱藏手機的狀態列。在 Android 4.0 中 系統資訊列的顯示設定已更新,能更準確地反映系統資訊列的行為 和導覽列:

  • SYSTEM_UI_FLAG_LOW_PROFILE 標記會取代 STATUS_BAR_HIDDEN 標記。設定之後,這個旗標會啟用「低設定檔」啟動系統列模式 導覽列導覽按鈕會變暗,以及系統列中的其他元素。啟用中 這樣就能打造更多沉浸式遊戲,避免干擾系統操作機制 按鈕。
  • SYSTEM_UI_FLAG_VISIBLE 標記會取代 STATUS_BAR_VISIBLE 標記,要求顯示系統列或導覽列。
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION 是新的旗標,會要求 導覽列就會完全隱藏請注意,這項功能僅適用於導覽列 ,且「不會」隱藏平板電腦上的系統資訊列)。導覽 系統收到使用者輸入內容後,就會立即回到檢視畫面。因此,這個模式非常實用 主要用於影片播放或其他需要整個螢幕,但使用者輸入內容 不需要。

您可以在活動的任何檢視畫面上呼叫 setSystemUiVisibility(),為系統列和導覽列設定各個標記。 視窗管理員會結合 (OR 在一起) 視窗中所有檢視畫面的所有標記, 只要視窗有輸入焦點,就能將這些指令套用至系統 UI。當視窗失去輸入內容時 (使用者離開應用程式或顯示對話方塊),您的標記就會停止運作。 同樣地,如果您從檢視區塊階層中移除這些檢視區塊,其旗標也會失效。

透過系統 UI 的瀏覽權限變更,同步處理活動中的其他事件 (適用於 舉例來說,在系統 UI 隱藏時隱藏動作列或其他 UI 控制項),您應註冊 View.OnSystemUiVisibilityChangeListener,即可在瀏覽權限時收到通知 系統列或導覽列的變更。

請參閱 OverscanActivity 類別。

輸入架構

Android 4.0 開始支援遊標懸停事件,以及新的觸控筆和滑鼠按鈕事件。

懸停事件

View 類別現在支援「懸停」事件,提供更豐富的互動體驗 透過指標裝置 (例如滑鼠或其他可在螢幕上驅動螢幕畫面的裝置) 進行投放 )。

如要在檢視畫面上接收懸停事件,請實作 View.OnHoverListener 和 向 setOnHoverListener() 註冊。懸停時 事件發生時,事件監聽器會收到對 onHover() 的呼叫,並提供 View 收到事件,以及用於描述懸停事件類型的 MotionEvent 。懸停事件可以是下列任一種:

如果 View.OnHoverListener 會處理懸停事件,則 View.OnHoverListener 應從 onHover() 傳回 true。如果您的 事件監聽器傳回 false,然後懸停事件就會照常分派到父項檢視畫面。

如果您的應用程式使用了會變更外觀的按鈕或其他小工具 您現在可以在狀態清單可繪項目中使用 android:state_hovered 屬性, 當遊標懸停在檢視區塊上時,會提供不同的背景可繪項目。

如需最新懸停事件的相關示範,請參閱下文中的「懸停」類別: ApiDemos。

觸控筆和滑鼠按鈕事件

Android 現在提供 API,可從觸控筆輸入裝置 (例如數位工具) 接收輸入內容 平板電腦週邊裝置或支援觸控筆的觸控螢幕。

觸控筆輸入的運作方式與觸控或滑鼠輸入類似。觸控筆接觸時 應用程式接收觸控事件,就像使用手指 輕觸螢幕。當觸控筆懸停在數位工具上方時,應用程式會收到懸停動作 事件,就像在沒有按鈕的情況下將滑鼠遊標移動到螢幕上時一樣 按下按鈕。

應用程式可以查詢 「工具類型」使用 getToolType(),與 MotionEvent 中的每個指標建立關聯。目前定義的工具類型為:TOOL_TYPE_UNKNOWNTOOL_TYPE_FINGERTOOL_TYPE_MOUSETOOL_TYPE_STYLUS、 和 TOOL_TYPE_ERASER。查詢工具類型後 會選擇以不同方式處理觸控筆輸入 (例如以手指或滑鼠輸入)

應用程式也可以查詢「按鈕」 州」我們使用 getButtonState() 進行 MotionEvent 監控。目前定義的按鈕狀態為:BUTTON_PRIMARYBUTTON_SECONDARYBUTTON_TERTIARYBUTTON_BACKBUTTON_FORWARD。為了方便起見,「上一頁」和「下一頁」按鈕是 會自動對應至 KEYCODE_BACKKEYCODE_FORWARD 鍵。應用程式可以處理這些金鑰, 滑鼠按鈕、前後瀏覽

除了能準確測量聯絡人的位置和壓力外,還可以使用觸控筆輸入 此外,裝置還會回報觸控筆尖與數位化工具 (觸控筆傾斜角度) 之間的距離 以及觸控筆的螢幕方向應用程式可在軸代碼 AXIS_DISTANCEAXIS_TILTAXIS_ORIENTATION 上使用 getAxisValue() 查詢這項資訊。

如需工具類型、按鈕狀態和新軸碼的示範,請參閱 TouchPaint 類別中的方法。

屬性

新的 Property 類別可讓您以快速、有效且輕鬆的方式指定 屬性。此外, 允許傳遞欄位/方法參照,並允許程式碼設定/取得值 ,但不知道欄位/方法的詳細資訊。

舉例來說,如要為物件 foo 設定 bar 欄位的值,您應 變更:

Kotlin

foo.bar = value

Java

foo.bar = value;

如果您要針對基礎私人欄位 bar 呼叫 setter,先前會 :

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

不過,如要傳遞 foo 例項並讓其他程式碼設定 bar 值,但在 Android 4.0 之前的版本無法執行。

您可以使用 Property 類別宣告 Property Foo 類別的物件 BAR,讓您可以在以下例項的 foo 執行個體上設定欄位: Foo 類別,如下所示:

Kotlin

BAR.set(foo, value)

Java

BAR.set(foo, value);

View 類別現在會使用 Property 類別 您可以設定各種欄位,例如在 Android 3.0 中新增的轉換屬性 (ROTATIONROTATION_XTRANSLATION_X 等)。

ObjectAnimator 類別也會使用 Property 類別,因此您可以使用 Property 建立 ObjectAnimator,比字串型更快、更有效率且更安全 。

硬體加速

從 Android 4.0 開始,只要 應用程式已設定 targetSdkVersionminSdkVersion 變更為 “14" 以上版本。硬體加速功能通常可以使動畫更流暢 進而提高整體效能並回應使用者互動

如有需要,您也可以使用 hardwareAccelerated 手動停用硬體加速功能。 個別 <activity> 元素或 <application> 的屬性 元素。您也可以呼叫 setLayerType(LAYER_TYPE_SOFTWARE),停用個別檢視畫面的硬體加速。

如需硬體加速的詳細資訊 (包括不支援的繪圖清單) 請參閱硬體環境 加速處理文件。

JNI 變更

在先前的 Android 版本中,JNI 本機參照並非間接控制;使用的 Android 裝置 直接指標。只要垃圾收集器沒有移動物體,則不會出現問題 這個程式碼似乎可以正常運作,是因為系統可以編寫錯誤的程式碼。在 Android 4.0 中,系統現在會使用 間接參照以偵測這些錯誤。

如需 JNI 本機參照的說明,請參閱「本機和全域參考資料」JNI 提示。在 Android 4.0 中, 系統已強化 CheckJNI,以便偵測這些錯誤。觀看 Android 開發人員網誌的近期文章 ,瞭解 JNI 參照的常見錯誤以及修正方法。

這項變更僅會影響以 Android 4.0 為目標版本的應用程式,方法是將 targetSdkVersionminSdkVersion 變更為 “14" 以上版本。如果您已將這些屬性設為任何較低的值 則 JNI 本機參照的運作方式與先前版本相同。

WebKit

  • WebKit 已更新至 534.30 版
  • 支援印度文字型 (梵文字母、孟加拉文和泰米爾文,且支援複雜的字元) 使用 WebView 和內建瀏覽器時必須結合字符
  • 支援 WebView 和下列語言中的衣索比亞文、喬治亞文和亞美尼亞字型 內建瀏覽器
  • 支援 WebDriver 製造 更輕鬆地測試使用 WebView 的應用程式

Android 瀏覽器

「瀏覽器」應用程式新增以下功能來支援網頁應用程式:

權限

以下是新權限:

裝置功能

以下是新的裝置功能:

如需 Android 4.0 (API 級別) 中所有 API 變更的詳細資料 第 14 頁),請參閱 API 差異報告

舊版 API

除了上述所有項目,Android 4.0 自然支援先前版本中的所有 API。 因為 Android 3.x 平台只適用於大螢幕裝置 如果是手機專用的開發應用程式,您可能不知道 Android 新增的所有 API 有哪些新功能。

我們整理出幾項您可能沒注意到的知名 API,歡迎參考。 設定方式如下:

Android 3.0
  • Fragment:一種架構元件,可讓您區分 將活動的元素放入獨立模組,定義自己的 UI 和生命週期。詳情請參閱 片段開發人員指南。
  • ActionBar:取代頂端的傳統標題列 「活動」視窗「小工具」左上角包含應用程式標誌,並提供新的 選單項目介面。詳情請參閱 動作列開發人員指南。
  • Loader:協助非同步作業的架構元件 載入資料與 UI 元件,以便在不封鎖 主執行緒。詳情請參閱 載入器開發人員指南。
  • 系統剪貼簿:應用程式可將資料 (除了文字以外) 複製貼上至 也可能是整個系統通用的剪貼簿裁剪的資料可以是純文字、URI 或意圖。詳情請參閱 複製及貼上開發人員指南。
  • 拖曳:內建於檢視區塊架構的一組 API,可加快拖曳速度 作業。詳情請參閱 開發人員指南「拖曳」。
  • 全新的彈性動畫架構可讓你為任何 物件 (View、Drawable、Fragment、Object 或任何其他物件) 並定義動畫元素,例如 像是時間長度、內插、重複等等新架構造就 Android 中的動畫 比以往更加容易詳情請參閱 屬性動畫開發人員 指南。
  • RenderScript 圖形和運算引擎:RenderScript 可提供高效能 3D 原生層級的圖形算繪和運算 API,均以 C (C99 標準) 編寫, 可提供您預期的原生環境效能類型,同時維持可攜性 還能在各種 CPU 和 GPU 之間分配負載詳情請參閱 RenderScript 開發人員 指南。
  • 硬體加速 2D 圖形:您現在可以為 應用程式,方法是在資訊清單元素的 <application> 中設定 {android:hardwareAccelerated="true"} 元素或個別 <activity> 元素。如此一來 讓動畫更流暢、更流暢地捲動畫面,整體效能以及使用者反應更佳 互動。

    注意:如果將應用程式的 minSdkVersiontargetSdkVersion 設為 "14" 以上版本,系統預設會啟用硬體加速功能。

  • 還有許多其他福利等您發掘。請參閱 Android 3.0 平台 附註
Android 3.1
  • USB API:全新的強大 API,可整合已連線的周邊裝置 Android 應用程式。API 是以下列 ,包括支援 USB 主機和裝置互動。請參閱 USB 主機和配件開發人員指南。
  • MTP/PTP API:應用程式可直接與已連接的相機和其他 PTP 互動 裝置都會在附加/移除裝置時接收通知,以及管理 存取這些裝置,並在裝置間傳輸檔案和中繼資料。MTP API 會執行 PTP (影像傳輸通訊協定) 的 MTP (媒體傳輸通訊協定) 規格的一部分。詳情請參閱 android.mtp 說明文件。
  • RTP API:Android 向其內建的 RTP (即時傳輸通訊協定) 堆疊提供 API 哪些應用程式可用於管理隨選或互動式資料串流。尤其是應用程式 提供 VOIP、推送對講、會議和音訊串流等功能,都可以使用 API 來啟動 以及透過任何可用的網路傳輸或接收資料串流。請參閱 android.net.rtp 說明文件。
  • 支援搖桿和其他一般動作輸入。
  • 請參閱 Android 3.1 平台 和更多新 API 的注意事項
Android 3.2
  • 新的畫面支援 API,讓您進一步控管應用程式 能在不同的螢幕大小上顯示廣告API 利用 能按維度精準指定特定螢幕大小範圍, 密度獨立像素單位 (例如 600dp 或 720dp 寬度),而非一般化 螢幕大小 (例如大或特大)。例如,這很重要 是為了幫助您 區分 5 吋旁邊為 7 吋該類裝置一般都會歸類為 「大」螢幕。請參閱網誌文章 全新的螢幕大小管理工具
  • <uses-feature> 的新常數至 宣告橫向或直向螢幕螢幕方向規定。
  • 裝置的「螢幕大小」設定現在會變更螢幕方向 變更。如果應用程式指定的 API 級別為 13 以上,您就必須處理 "screenSize" 設定變更,藉此處理 "orientation" 設定變更。詳情請見 android:configChanges
  • 請參閱 Android 3.2 平台 其他新 API 的注意事項

API 級別

Android 4.0 API 會獲派整數 ID (14),儲存在帳戶中。 這個識別碼稱為「API 級別」,可讓系統正確判斷 在安裝應用程式之前,應用程式與系統相容。

如要在應用程式中使用 Android 4.0 中導入的 API,您需要編譯 將應用程式與支援 API 級別 14 或 更高。視您的需求而定,您可能還需要新增 將 android:minSdkVersion="14" 屬性設為 <uses-sdk> 元素。

詳情請參閱「什麼是 API? 關卡?