功能與 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 重新設計現有的 Widget 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 程式庫開始使用,該程式庫提供開發人員友善的 API 介面,以及註解處理器支援功能。

遊戲模式

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

詳情請參閱「遊戲模式」。

子母畫面 (PiP) 最佳化建議

Android 12 針對 PiP 模式推出了以下改善項目:

支援新的 PiP 手勢

Android 12 現已支援 PiP 視窗的隱藏和雙指撥動手勢

  • 如要隱藏視窗,使用者可以將視窗拖曳至左側或右側邊緣。如要取消隱藏視窗,使用者可以輕觸隱藏視窗的可見部分,或將視窗拖曳出來。

  • 使用者現在可以使用雙指撥動方式進行縮放,調整子母畫面視窗的大小。

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 Media 程式庫中使用。

自 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 供應商擴充功能

許多裝置製造商合作夥伴都已建構自訂相機擴充功能,例如散景、HDR、夜間模式等,希望應用程式能使用這些功能,在裝置上打造獨特的體驗。CameraX 程式庫已支援這些自訂供應商擴充功能。在 Android 12 中,這些供應商擴充功能現在已直接在平台中公開。

這項新增功能可協助具有複雜 Camera2 實作項目的應用程式,在不必大幅變更舊版程式碼的情況下,充分利用供應商擴充功能。Camera2 擴充功能 API 會提供與 CameraX 相同的擴充功能組合,且許多不同裝置都已支援這些擴充功能,因此您可以直接使用這些擴充功能,無須額外設定。

詳情請參閱 CameraExtensionCharacteristics

支援 Quad Bayer 相機感應器

許多 Android 裝置現在都搭載超高解析度相機感應器,通常採用四像素或 Nona Bayer 拜耳排列模式,可在圖像品質和低光源效能方面提供極大的彈性。Android 12 推出了新的平台 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 已展開,可從使用動畫 GIF 和動畫 WebP 檔案格式的圖片解碼所有影格和時間資料。在 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 中新增下列核心程式庫:

Class 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