功能與 API 總覽

Android 12 為開發人員推出了強大的新功能和 API。以下各節可協助您瞭解應用程式功能,並開始使用相關的 API。

如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解新的 API,請造訪 Android API 參考資料。系統會醒目顯示新的 API,方便您查看相關資訊。此外,如要瞭解平台變更可能影響應用程式的領域,請務必查看指定 Android 12 為目標版本的應用程式所有應用程式的 Android 12 行為變更。

使用者體驗

Material You

Android 12 引進了名為 Material You 的新設計語言,可協助您建構更個人化、更美觀的應用程式。如要在應用程式中導入所有最新的 Material Design 3 更新,請嘗試使用 Material Design 元件的 Alpha 版本。

Material You

改善小工具

Android 12 翻新了現有的 Widgets API,改善平台和啟動器的使用者與開發人員體驗。我們製作了一份指南,協助您確保小工具與 Android 12 相容,並以新功能重新整理。

詳情請參閱「Android 12 小工具改善項目」。

多媒體內容插入

Android 12 推出了新的整合式 API,可讓應用程式從任何可用來源接收多媒體內容:剪貼簿、鍵盤或拖曳。

詳情請參閱「接收多媒體內容」。

應用程式啟動畫面 API

Android 12 為所有應用程式推出了新的應用程式啟動動畫,包括從啟動點開始的應用程式動態、顯示應用程式圖示的啟動畫面,以及應用程式本身的轉換。詳情請參閱啟動畫面開發人員指南

圓角 API

Android 12 推出了 RoundedCornerWindowInsets.getRoundedCorner(int position),可提供圓角的半徑和中心點。

詳情請參閱圓角

豐富的觸覺體驗

Android 12 擴充了多項工具,可針對 UI 事件建立資訊豐富的觸覺回饋、為遊戲提供沉浸式且愉快的體驗,以及利用注意力觸覺技術提高工作效率。

致動器效果

Android 12 新增了低滴答等生動效果,利用最新致動器的較寬廣頻率頻寬。遊戲開發人員現在可以獨立存取多個不同的致動器,只要在遊戲控制器中獨立存取,即可為多個致動器同步提供相同的效果或不同的觸覺效果。我們建議開發人員使用常數基本做為豐富觸覺效果的建構模塊,這些常數可以強化 UI 事件,觸覺編輯器也是依序處理較複雜的效果。這些 API 可在 Pixel 4 裝置上試用,我們也會繼續與裝置製造商合作夥伴攜手,為整個生態系統的使用者提供最新的觸覺技術支援。

音訊耦合觸覺效果

Android 12 應用程式可以使用手機的震動功能,產生從音訊工作階段衍生的觸覺回饋。您可以藉此機會打造更身歷其境的遊戲和音訊體驗。例如,觸覺技術強化鈴聲有助於辨識來電者,或者駕駛遊戲可以模擬粗糙地形。

詳情請參閱 HapticGenerator 參考說明文件。

AppSearch

Android 12 導入了高效能的裝置端搜尋引擎 AppSearch 做為系統服務。AppSearch 可讓應用程式為結構化資料建立索引 並透過內建的全文搜尋功能搜尋資料。此外,AppSearch 還支援原生搜尋功能,例如高效率的索引和擷取、多語言支援以及關聯性排名。

說明在 AppSearch 中建立索引和搜尋的圖表

AppSearch 有兩個變種版本:一個用於應用程式的本機索引,與舊版 Android 相容,或在 Android 12 中為整個系統維護的中央索引。透過中央索引,應用程式會允許系統預先安裝的情報元件,在系統 UI 途徑上顯示相關資料。系統 UI 介面上顯示的資料確切取決於原始設備製造商 (OEM)。此外,您的應用程式也能安全地與其他應用程式共用資料,讓應用程式也能搜尋這些資料。

如要進一步瞭解 AppSearch,請參閱開發人員指南,並開始搭配 AppSearch Jetpack 程式庫使用。AppSearch 提供方便開發人員使用的 API 介面和註解處理工具。

遊戲模式

遊戲模式 API遊戲模式乾預可讓您根據使用者設定或遊戲專屬設定,透過將特性 (例如效能或電池續航力) 按優先順序排列來將遊戲過程最佳化。

詳情請參閱遊戲模式

子母畫面 (PiP) 建議和改善項目

Android 12 為子母畫面模式推出了下列改善項目:

支援新的子母畫面手勢

Android 12 現在支援在子母畫面視窗儲存和雙指撥動縮放手勢

  • 如要隱藏視窗,使用者可以將視窗向左或向右拖曳。如要釋放視窗,使用者可以選擇輕觸隱藏視窗的可見部分,或將視窗拖曳至外。

  • 使用者現在可以使用雙指撥動縮放功能調整子母畫面視窗大小。

Android 12 新增了大幅改善外觀,改善全螢幕和子母畫面視窗之間的動畫轉換效果。強烈建議您實作所有適用的變更;完成此操作後,這些變更會自動縮放至大螢幕,例如折疊式裝置和平板電腦。

這些功能如下:

新的來電通知,可決定來電排名的重要性

Android 12 新增了來電通知樣式 Notification.CallStyle。使用此範本,可讓應用程式在狀態列中顯示醒目顯示通話時間的醒目方塊,藉此指出進行中的通話的重要性;使用者可以輕觸這個方塊返回通話。

由於來電和進行中的通話對使用者而言最為重要,因此這類通知在通知欄的排名為最高排名。這個排名機制也能讓系統將這些優先呼叫轉送給其他裝置。

為所有類型的呼叫實作以下程式碼。

Kotlin

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

使用 forIncomingCall() 為來電建立通話樣式通知。

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

使用 forOngoingCall() 為進行中的通話建立通話樣式通知。

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

使用 forScreeningCall() 建立過濾來電的來電樣式通知。

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

支援豐富的通知圖片

在 Android 12 中,您現在可以在 MessagingStyle()BigPictureStyle() 通知中提供動畫圖片,讓應用程式的通知體驗更豐富。此外,您的應用程式現在可以讓使用者在透過通知欄回覆訊息時,傳送圖片訊息。

改善手勢操作的沉浸模式

Android 12 整合了現有行為,方便使用者在沉浸模式下執行手勢操作指令。此外,Android 12 也提供固定式沉浸模式的回溯相容性行為

最近分享的網址 (僅限 Pixel)

在 Pixel 裝置上,使用者現在可以直接從「最近使用」畫面分享最近瀏覽網頁內容的連結。在應用程式中造訪內容後,使用者可以滑動至「最近使用」畫面,找出用來查看內容的應用程式,然後輕觸連結按鈕即可複製或分享該網址。

詳情請參閱「啟用最近的網址分享」。

安全性和隱私權

隱私資訊主頁

垂直時間軸會列出可存取位置資訊的應用程式,以及存取時間
圖 1.位置使用畫面是「隱私權資訊主頁」的一部分。

在支援 Android 12 或以上版本的裝置上,系統設定會顯示「隱私權資訊主頁」畫面。在這畫面,使用者可以透過個別存取其畫面,看到應用程式存取位置、相機和麥克風的資訊。每個畫面都會顯示不同應用程式各自存取特定類型資料的時間軸。圖 1 顯示位置資訊的資料存取時間軸。

您的應用程式可以為使用者提供理由,協助他們瞭解應用程式存取位置、相機或麥克風資訊的原因。原因可能會顯示在新版「隱私資訊主頁」畫面上、應用程式的權限頁面上,或是兩處同時顯示。

藍牙權限

Android 12 導入了 BLUETOOTH_SCANBLUETOOTH_ADVERTISEBLUETOOTH_CONNECT 權限。這些權限可讓以 Android 12 為目標版本的應用程式更容易與藍牙裝置互動,尤其是不需要存取裝置位置資訊的應用程式。

更新應用程式的藍牙權限聲明

如要讓裝置做好指定 Android 12 或以上版本的準備,請更新應用程式的邏輯。請勿宣告舊版藍牙權限組合,而應宣告更新型藍牙權限

權限群組查詢

在 Android 12 或以上版本中,您可以查詢系統如何將平台提供的權限整理為權限群組:

隱藏應用程式重疊視窗

為了讓開發人員進一步控管使用者與開發人員應用程式互動時看到的內容,Android 12 推出了在具備 SYSTEM_ALERT_WINDOW 權限的應用程式,隱藏繪製視窗的功能。

宣告 HIDE_OVERLAY_WINDOWS 權限後,應用程式可以呼叫 setHideOverlayWindows(),指出當應用程式專屬視窗顯示時,應隱藏所有 TYPE_APPLICATION_OVERLAY 類型的視窗。應用程式可能會在顯示敏感畫面 (例如交易確認流程) 時選擇執行這項操作。

顯示 TYPE_APPLICATION_OVERLAY 類型的視窗的應用程式,應考慮可能更適合其用途的替代選項,例如子母畫面對話框

已知簽署者權限保護旗標

自 Android 12 起,您可以在宣告時期利用簽章層級權限knownCerts 屬性,指定已知簽署憑證的摘要。

應用程式可以宣告此屬性,並使用 knownSigner 標記,讓裝置和應用程式將簽章權限授予其他應用程式,而不必在裝置製造和出貨時簽署應用程式。

裝置屬性認證

Android 12 會擴充一組應用程式,可在這些應用程式產生新金鑰時,驗證認證憑證中的裝置屬性。

自 Android 9 (API 級別 28) 起,使用 Keymaster 4.0 或以上版本的裝置政策擁有者 (DPO) 可以驗證這些認證憑證中的裝置屬性。從 Android 12 開始,凡是指定 Android 12 (API 級別 31) 以上版本的應用程式,都可以使用 setDevicePropertiesAttestationIncluded() 方法執行這項驗證程序。

產生的裝置屬性包含下列 Build 欄位:

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

安全螢幕鎖定通知動作

自 Android 12 起,Notification.Action.Builder 類別會支援 setAuthenticationRequired() 方法,讓應用程式在叫用特定通知動作前,要求裝置必須解鎖。這個方法可讓裝置在鎖定裝置上的通知增添一層安全防護。

BiometricPrompt 的可本地化字串

Android 12 推出了新的 API,可協助您改善應用程式的生物特徵辨識驗證使用者體驗。新的 BiometricManager.Strings 巢狀類別包含 getButtonLabel()getPromptMessage()getSettingName() 方法,可讓應用程式擷取使用者可理解的本地化按鈕標籤、提示訊息或應用程式設定名稱。這些標籤可以針對使用的生物特徵辨識驗證方法,建立更精準的面向指示,例如「使用人臉解鎖」或「使用指紋繼續操作」。

訊息應用程式中的網路釣魚偵測功能 (僅限 Pixel)

偵測到可疑訊息時,使用者會看到類似這則訊息。

在支援的 Pixel 裝置上,Android 12 會對熱門訊息應用程式接收的訊息執行網路釣魚偵測。系統會運用裝置端機器學習技術偵測可疑活動偵測到此情形時,系統會在訊息應用程式的 UI 上方顯示安全性重疊,以便警告使用者。舉例來說,網路釣魚偵測會在使用者遇到下列潛在風險時發出警告:

  • 可疑的要求,例如傳送驗證碼、匯款或類似要求
  • 不信任的網址
  • 惡意附件
  • 連結至惡意應用程式

除了警告使用者外,疊加畫面還能讓使用者回報可疑訊息,並針對系統發出的警告提供意見回饋。

開發人員可以在應用程式資訊清單檔案中新增包含 com.google.android.ALLOW_PHISHING_DETECTION 字串的新中繼資料標記,即可停用這項功能。例如:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

媒體

相容媒體轉碼

從 Android 12 (API 級別 31) 開始,系統可將裝置上錄製的 HEVC(H.265)HDR (HDR10 和 HDR10+) 影片自動轉碼為 AVC (H.264),這種格式與標準播放器相當相容。這樣就能利用新型轉碼器 (如果有的話),但不會影響與舊版應用程式的相容性。

詳情請參閱相容的媒體轉碼一文。

效能類別

Android 12 導入了名為「效能類別」的標準,效能類別可指定除了 Android 基準要求以外的硬體功能。由於每部 Android 裝置都會聲明自身支援的效能類別,開發人員可以在執行階段查看裝置的效能類別,並提供能充分利用裝置功能的進階體驗。

詳情請參閱「效能類別」一節。

改善影片編碼

Android 12 定義了一組標準鍵,用於控管影片編碼的量化參數 (QP) 值,讓開發人員可以避免使用廠商專屬的程式碼。

MediaFormat API 和 NDK 媒體程式庫會提供新的金鑰。

從 Android 12 影片編碼器開始,系統會強制執行最低品質門檻。這樣可確保使用者在對場景較高的影片編碼時,不會遇到極低的畫質。

音訊焦點

自 Android 12 (API 級別 31) 起,如果應用程式要求音訊焦點,但其他應用程式已具備焦點並正在播放,系統會淡出播放中的應用程式。

詳情請參閱「Android 12 以上版本中的音訊焦點」一文。

MediaDrm 更新

如要判斷目前的 MediaDrm API 是否需要安全解碼器元件,請按照下列步驟操作:

  1. 建立 MediaDrm
  2. 開啟工作階段以取得工作階段 ID。
  3. 使用工作階段 ID 建立 MediaCrypto
  4. 呼叫 MediaCrypto.requiresSecureDecoderComponent(mimeType)

使用新方法 requiresSecureDecoder(@NonNull String mime)requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) 時,您可以在建立 MediaDrm 後立即判斷。

相機

Camera2 供應商擴充功能

我們的許多裝置製造商合作夥伴都已建構自訂相機擴充功能,例如散景、高動態範圍、夜間模式等,希望應用程式能用來在裝置上打造與眾不同的體驗。CameraX 程式庫已支援這些自訂供應商擴充功能。在 Android 12 中,這些供應商擴充功能現已直接在平台中公開。

這項新增做法可讓採用複雜 Camera2 的應用程式運用供應商擴充功能,不必對舊版程式碼進行重大變更。Camera2 Extension API 所公開的擴充功能組合與 CameraX 中完全相同,而且已在許多不同裝置上受到支援,因此您不必進行額外設定就能使用。

詳情請參閱 CameraExtensionCharacteristics

支援 Quad bayer 鏡頭感應器

現今許多 Android 裝置都搭載超高解析度相機感應器 (通常採用 Quad 或 Nona Bayer 模式),因此能提供絕佳的影像品質和低光源效能。Android 12 推出了全新的平台 API,可讓第三方應用程式充分運用這些多功能的感應器。新版 API 支援這些感應器的獨特行為,並考量到這些 API 在完整解析度或「最大解析度」模式與「預設」模式運作時,可能支援不同的串流設定和組合。

圖形和圖片

允許應用程式直接存取空值標記追蹤記錄

從 Android 12 開始,您可以透過 ApplicationExitInfo.getTraceInputStream() 方法,以通訊協定緩衝區的形式存取應用程式的原生程式碼錯誤空值。通訊協定緩衝區使用這個結構定義進行序列化。 在此之前,您只能透過 Android Debug Bridge (ADB) 存取這項資訊。

詳情請參閱「讓應用程式直接存取空值標記追蹤記錄」。

AVIF 圖片支援

Android 12 支援使用 AV1 圖片檔案格式 (AVIF) 的圖片。AVIF 是一種容器格式,適用於使用 AV1 編碼的圖片和一系列圖片序列。AVIF 充分運用影片壓縮的影格內編碼內容。與舊版的圖片格式 (例如 JPEG) 相比,這種方式可大幅提升相同檔案大小的影像品質。如要深入瞭解這種格式的優點,請參閱 Jake Archibald 的網誌文章

輕鬆模糊處理、色彩濾鏡和其他特效

Android 12 新增了 RenderEffect,可將模糊、色彩濾鏡、Android 著色器效果等常見的圖形效果套用至 View 和算繪階層。「效果」可以結合為鏈結效果 (組成內外特效) 或混合效果。由於處理能力有限,不同 Android 裝置可能不支援這項功能。

您也可呼叫 View.setRenderEffect(RenderEffect),將效果套用至 View 的基礎 RenderNode

如要實作 RenderEffect

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

原生動畫圖片解碼

在 Android 12 中,NDK ImageDecoder API 已擴展,可從使用動畫 GIFWebP 動畫檔案格式的圖片解碼所有影格和時間資料。在 Android 11 中導入時,這個 API 只會解碼這些格式動畫的第一張圖片。

請使用 ImageDecoder 而非第三方程式庫,進一步減少 APK 大小,且方便進行日後的安全性和效能相關更新。

如要進一步瞭解 API,請參閱 API 參考資料GitHub 範例

連線能力

讓隨附應用程式保持喚醒狀態

為支援隨附應用程式保持運作以管理裝置,Android 12 推出了可執行以下操作的 API:

  • 可讓你在配對裝置在有效範圍內時喚醒應用程式。
  • 保證當裝置保持在有效範圍內時,處理程序會繼續執行。

如要使用 API,您的裝置必須透過隨附裝置管理工具連線。詳情請參閱 CompanionDeviceManager.startObservingDevicePresence()CompanionDeviceService.onDeviceAppeared()

隨附裝置管理工具設定檔

使用隨附裝置設定檔,在單次要求內要求多項權限的權限對話方塊。

Android 12 (API 級別 31) 以上版本的隨附應用程式可在與手錶連線後使用隨附裝置的設定檔。透過使用設定檔,應用程式能夠整合多種裝置類型專用權限的授予程序,只要一個步驟就能處理完畢,可簡化註冊流程。

連線到裝置時,系統便會授予這些隨附應用程式整合的權限,並只在裝置連線期間有效。刪除應用程式或移除連線後,便會一併移除權限。

詳情請參閱 AssociationRequest.Builder.setDeviceProfile()

改善頻寬預估功能

在 Android 12 中,getLinkDownstreamBandwidthKbps()getLinkUpstreamBandwidthKbps() 提供的頻寬估計功能都已經過改善,可改善 Wi-Fi 和行動網路連線。傳回的值現在代表裝置上所有應用程式的各電信業者或 Wi-Fi SSID、網路類型和信號等級使用者歷來的加權平均處理量。如此一來,系統就可以傳回更準確、更實際的預估處理量、針對應用程式的冷啟動提供預估,而且相較於使用其他處理量估算方法,需要的週期較少。

強化 Wi-Fi Aware (NAN) 功能

Android 12 強化了 Wi-Fi Aware 功能:

  • 在搭載 Android 12 (API 級別 31) 以上版本的裝置上,您可以使用 onServiceLost() 回呼,在應用程式因服務停止運作或移出範圍後失去發現的服務時收到快訊。
  • 設定多個資料路徑 (NAN 資料路徑) 的方式正在改變,更有效率。先前版本使用 L2 訊息來交換啟動者的對等資訊,因而產生延遲。在搭載 Android 12 以上版本的裝置上,回應者 (伺服器) 可設為接受任何對等互連,也就是無需預先知道啟動條件資訊。這樣可以加快資料路徑的產生速度,並且針對單一網路要求啟用多個點對連結。
  • 為避免架構因資源不足而拒絕探索或連線要求,您可以在搭載 Android 12 以上版本的裝置上呼叫 WifiAwareManager.getAvailableAwareResources()。這個方法的傳回值可讓您取得可用資料路徑的數量、可用的發布工作階段數,以及可用的訂閱工作階段數。

同時點對點 + 網際網路連線

當指定 Android 12 (API 級別 31) 以上版本的裝置在支援硬體支援的裝置上執行時,建立與對等互連裝置的連線時,使用點對點連線並不會中斷現有的 Wi-Fi 連線。如要檢查是否支援這項功能,請使用 WifiManager.isMultiStaConcurrencySupported()

啟用螢幕關閉 NFC 付款功能

如果應用程式指定 Android 12 以上版本,只要將 requireDeviceScreenOn 設為 false,即可在不開啟裝置螢幕的情況下啟用 NFC 付款功能。如要進一步瞭解螢幕關閉或鎖定時的 NFC 付款功能,請參閱「螢幕關閉和螢幕鎖定行為」。

儲存空間

Android 12 推出了下列儲存空間管理功能:

核心功能

應用程式自動更新

Android 12 針對使用 PackageInstaller API 的應用程式引入 setRequireUserAction() 方法。這個方法可讓安裝程式應用程式執行應用程式更新,而不需要使用者確認動作。

裝置晶片組資訊

Android 12 會在 android.os.Build 中新增兩個常數,透過 SDK 公開 SoC 晶片組供應商和模型資訊。您可以分別呼叫 Build.SOC_MANUFACTURERBuild.SOC_MODEL 來擷取這項資訊。

核心 Java API 更新

根據與開發人員的要求和合作,我們在 Android 12 中新增了下列核心程式庫:

類別 API
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime