功能與 API 總覽

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

如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解新的 API,請參閱 Android API 參考資料 - 新的 API 會醒目顯示,以利於查看。此外,如要瞭解平台變更可能對應用程式造成的影響,請務必查看指定 Android R 的應用程式所有應用程式的 Android 11 行為變更,以及隱私權變更

全新體驗

裝置控制項

Android 11 包含新的 ControlsProviderService API,可用於公開已連線外部裝置的控制項。這些控制項會顯示在 Android 電源鍵選單的「裝置控制」下方。詳情請參閱「控制外部裝置」。

媒體控制

Android 11 更新了媒體控制選項的顯示方式。媒體控制選項會顯示在快速設定附近。多個應用程式的工作階段會排列在可滑動的輪播介面中,包括在手機上播放的串流、遠端串流 (例如在外部裝置上偵測到的串流或投放工作階段),以及先前可繼續播放的工作階段 (依上次播放順序排列)。

使用者不必啟動應用程式,就能從輪轉介面重新啟動先前的工作階段。開始播放後,使用者就能以一般方式操作媒體控制項。

詳情請參閱媒體控制項

螢幕

更妥善支援瀑布式螢幕

Android 11 提供多種 API,支援瀑布式螢幕,也就是環繞裝置邊緣的螢幕。這類螢幕會視為螢幕凹口的變種版本。現有的 DisplayCutout.getSafeInset…() 方法現在會傳回安全插邊,以避開瀑布區域和凹口。如要在瀑布區域中算繪應用程式內容,請執行下列操作:

轉軸角度感應器和折疊式裝置

Android 11 推出新的感應器 TYPE_HINGE_ANGLESensorEvent,可監控轉軸角度,並提供裝置兩個整數部分之間的角度測量值 (以度為單位),讓應用程式在轉軸式螢幕設定的裝置上執行時,判斷轉軸角度。使用者操作裝置時,您可以使用這些原始測量值執行精細的動畫。

請參閱「摺疊式裝置」。

對話

對話改善

Android 11 改善了對話的處理方式,對話是指兩位以上使用者之間的即時雙向通訊。這些對話會特別醒目顯示,使用者也能透過多種新方式與其互動。

如要進一步瞭解對話和應用程式支援對話的方式,請參閱「使用者和對話」。

即時通訊泡泡

開發人員現在可以使用對話框,在系統中顯示對話。對話框是 Android 10 的實驗功能,必須透過開發人員選項啟用;Android 11 則不需要。

如果應用程式指定 Android 11 (API 級別 30) 以上版本,除非通知符合新的對話規定,否則不會以對話框形式顯示。具體來說,通知必須與捷徑建立關聯。

在 Android 11 之前,如要讓通知顯示為泡泡,您必須明確指定通知一律以文件 UI 模式啟動。從 Android 11 開始,您不必再明確設定這項設定;如果通知以泡泡形式顯示,平台會自動將通知設為一律以文件 UI 模式啟動。

泡泡功能在效能方面有許多改善,使用者也能更靈活地為每個應用程式啟用及停用泡泡。對於實作實驗性支援的開發人員,Android 11 的 API 有幾項變更:

5G 視覺指標

如要瞭解如何在使用者裝置上顯示 5G 指標,請參閱「在使用者連上 5G 網路時通知他們」。

隱私權

Android 11 導入了大量變更和限制,可進一步保護使用者隱私。詳情請參閱「隱私權」頁面。

安全性

生物辨識驗證更新

為協助您控管應用程式資料的安全等級,Android 11 針對生物特徵辨識驗證進行了多項改良。這些變更也會顯示在 Jetpack Biometric 程式庫中。

驗證類型

Android 11 推出 BiometricManager.Authenticators 介面,可用於宣告應用程式支援的驗證類型

判斷使用的驗證類型

使用者完成驗證後,您可以呼叫 getAuthenticationType(),檢查使用者是使用裝置憑證還是生物特徵辨識憑證完成驗證。

進一步支援單次使用驗證金鑰

Android 11 進一步支援使用每次驗證金鑰進行驗證

已淘汰的方法

Android 11 已淘汰下列方法:

  • setDeviceCredentialAllowed() 方法。
  • setUserAuthenticationValidityDurationSeconds() 方法。
  • 不接受任何引數的 canAuthenticate() 超載版本。

安全共用大型資料集

在某些情況下 (例如機器學習或媒體播放),您的應用程式可能會想使用與其他應用程式相同的大型資料集。在舊版 Android 中,您的應用程式和其他應用程式都必須下載相同資料集的個別副本。

為減少網路和磁碟上的資料備援,Android 11 允許使用共用資料 Blob,在裝置上快取這些大型資料集。如要進一步瞭解如何共用資料集,請參閱共用大型資料集的深入指南

在 OTA 重新啟動後執行檔案型加密,不需使用者憑證

裝置完成 OTA 更新並重新啟動後,系統會立即提供置於憑證保護儲存空間的憑證加密 (CE) 金鑰,供檔案型加密 (FBE) 作業使用。也就是說,在 OTA 更新後,您的應用程式可以在使用者輸入 PIN 碼、解鎖圖案或密碼之前,繼續執行需要 CE 金鑰的作業。

成效和品質

無線偵錯

Android 11 支援使用 Android Debug Bridge (adb),從工作站以無線方式部署應用程式並進行偵錯。舉例來說,您可以將可進行偵錯的應用程式部署至多部遠端裝置,不僅不必實際透過 USB 連接裝置,也不用處理常見的 USB 連線問題 (例如安裝驅動程式)。詳情請參閱「在硬體裝置上執行應用程式」。

透過 ADB 漸進式安裝 APK

即使只對應用程式進行小幅變更,在裝置上安裝大型 (2 GB 以上) APK 也可能需要很長時間。ADB (Android Debug Bridge) 漸進式 APK 安裝作業會安裝足夠的 APK 來啟動應用程式,同時在背景串流播放剩餘資料,藉此加快這個程序。如果裝置支援這項功能,且您已安裝最新版 SDK Platform-Toolsadb install 就會自動使用這項功能。如果系統不支援,則會預設使用無訊息安裝方法。

使用下列 adb 指令即可使用這項功能。如果裝置不支援漸進式安裝,指令會失敗並輸出詳細說明。

adb install --incremental

執行 ADB 增量 APK 安裝作業前,您必須簽署 APK 並建立 APK 簽署配置 v4 檔案。如要使用這項功能,v4 簽署檔案必須放在 APK 旁邊。

使用原生記憶體分配器偵測錯誤

GWP-ASan 是一種原生記憶體配置器功能,可協助找出釋放後使用和堆積緩衝區溢位錯誤。您可以為應用程式的特定子程序或全域啟用這項功能。詳情請參閱 GWP-ASan 指南

Neural Networks API 1.3

Android 11 擴充並改良了 Neural Networks API (NNAPI)

新作業

NNAPI 1.3 導入新的運算元型別 TENSOR_QUANT8_ASYMM_SIGNED,支援 TensorFlow Lite 的新量化配置

此外,NNAPI 1.3 還推出下列新作業:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

全新機器學習控制選項

NNAPI 1.3 導入了新的控制項,可協助機器學習順暢運作:

NDK Thermal API

當裝置過熱時,裝置可能會對 CPU 和/或 GPU 進行節流措施,進而以非預期方式影響應用程式。如果應用程式或遊戲使用複雜的圖形、大量計算或持續的網路活動,就更有可能引發問題。

在 Android 11 中使用 NDK Thermal API 監控裝置的溫度變化,然後採取相應措施,以維持較低的耗電量和裝置溫度。這個 API 與 Java Thermal API 類似,可用於接收任何熱力狀態變更的通知,或直接輪詢目前狀態。

文字和輸入

改善 IME 轉換

Android 11 導入了新 API,可改善輸入法編輯器 (例如螢幕鍵盤) 的轉場效果。這些 API 可讓您更輕鬆地調整應用程式內容,與 IME 的顯示和隱藏狀態,以及狀態列和導覽列等其他元素同步。

如要在任何 EditText 具有焦點時顯示輸入法編輯器,請呼叫 view.getInsetsController().show(Type.ime())。(您可以在與聚焦 EditText 相同的階層中,對任何檢視區塊呼叫這個方法,不一定要對 EditText 呼叫。)如要隱藏 IME,請呼叫 view.getInsetsController().hide(Type.ime())。您可以呼叫 view.getRootWindowInsets().isVisible(Type.ime()),檢查 IME 目前是否顯示。

如要讓應用程式的檢視畫面與 IME 的顯示和隱藏狀態同步,請在檢視畫面上設定監聽器,並提供 WindowInsetsAnimation.CallbackView.setWindowInsetsAnimationCallback()。(您可以在任何檢視區塊上設定這個接聽程式,不一定要是 EditText。) IME 會呼叫接聽程式的 onPrepare() 方法,然後在轉場效果開始時呼叫 onStart()。接著,系統會在轉換期間的每個進展階段呼叫 onProgress()。轉換完成後,IME 會呼叫 onEnd()。在轉換過程中的任何時間點,您都可以呼叫 WindowInsetsAnimation.getFraction(),瞭解轉換進度。

如需這些 API 的使用範例,請參閱新的 WindowInsetsAnimation 程式碼範例。

控制 IME 動畫

您也可以控制 IME 動畫,或是其他系統資訊列 (例如導覽列) 的動畫。如要這麼做,請先呼叫 setOnApplyWindowInsetsListener(),為視窗插邊變更設定新的監聽器:

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

如要移動輸入法編輯器或其他系統列,請呼叫控制器的 controlWindowInsetsAnimation() 方法:

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

ICU 程式庫更新

Android 11 會更新 android.icu 套件,使用 ICU 程式庫的 66 版,而 Android 10 則使用 63 版。新版程式庫包含更新的 CLDR 語言代碼資料,以及 Android 國際化支援的許多強化功能。

新版程式庫的主要變更包括:

  • 許多格式化 API 現在支援擴充 FormattedValue 的新回傳物件型別。
  • LocaleMatcher API 經過強化,新增了建構工具類別、支援 java.util.Locale 型別,以及提供相符項目額外資料的結果類別。
  • 現已支援 Unicode 13。

媒體

分配 MediaCodec 緩衝區

Android 11 包含新的 MediaCodec API,可讓應用程式在分配輸入和輸出緩衝區時,擁有更多控制權。這樣應用程式就能更有效率地管理記憶體。

新課程:
新方法:

此外,MediaCodec.Callback() 中的兩種方法行為也已變更:

onInputBufferAvailable()
如果設定為使用 Block Model API,應用程式應使用 MediaCodec.getQueueRequest 和索引,並將 LinearBlock/HardwareBuffer 附加至插槽,而非使用索引呼叫 MediaCodec.getInputBuffer()MediaCodec.queueInputBuffer()
onOutputBufferAvailable()
應用程式可使用帶有索引的 MediaCodec.getOutputFrame() 取得 OutputFrame 物件,其中包含更多資訊和 LinearBlock/HardwareBuffer 緩衝區,而不必使用帶有索引的 MediaCodec.getOutputBuffer() 呼叫 MediaCodec.getOutputFrame()

MediaCodec 中的低延遲解碼

Android 11 強化了MediaCodec,可支援遊戲和其他即時應用程式的低延遲解碼。您可以將 FEATURE_LowLatency 傳遞至 MediaCodecInfo.CodecCapabilities.isFeatureSupported(),檢查轉碼器是否支援低延遲解碼。

如要開啟或關閉低延遲解碼功能,請執行下列任一操作:

新的 AAudio 函式 AAudioStream_release()

函式 AAudioStream_close() 會同時釋放及關閉音訊串流。這可能造成危險。如果另一個程序在串流關閉後嘗試存取,該程序就會異常終止。

新函式 AAudioStream_release() 會釋放串流,但不會關閉串流。這樣做可釋出資源,並將串流設為已知狀態。物件會持續存在,直到您呼叫 AAudioStream_close() 為止。

MediaParser API

MediaParser 是用於媒體擷取的新低階 API。這項工具比 MediaExtractor 更具彈性,且可進一步控管媒體擷取功能。

從 USB 裝置擷取音訊

如果應用程式沒有 RECORD_AUDIO 權限,並使用 UsbManager 要求直接存取具備音訊擷取功能的 USB 音訊裝置 (例如 USB 耳機),畫面上會出現新的警示訊息,要求使用者確認授予裝置使用權限。系統會忽略所有「一律使用」選項,因此當應用程式要求存取權時,使用者每次都必須查看警示並授予權限。

為避免發生這種情況,應用程式應要求 RECORD_AUDIO 權限。

同時存取麥克風

Android 11 在 AudioRecordMediaRecorderAAudioStream API 中新增了方法。無論選取的用途為何,這些方法都能啟用及停用同時擷取功能。請參閱「分享音訊輸入內容」。

輸出端切換器

Android 11 針對使用 Cast 和 mediarouter API 的應用程式,實作了新行為。

除了從應用程式存取投放選項外,切換選項也會顯示在系統媒體播放器中。這樣一來,使用者在不同裝置間切換時,就能享有流暢的體驗,例如在廚房觀看影片,或在手機上觀看影片;在家中或車上聆聽音訊。請參閱輸出切換器

連線能力

Wi-Fi Passpoint 強化功能

如要瞭解 Android 11 新增的 Passpoint 功能,請參閱「Passpoint」。

Wi-Fi Suggestion API 擴展

Android 11 擴充了 Wi-Fi 建議 API,可提升應用程式的網路管理功能,包括:

  • 連線管理應用程式可允許中斷連線要求,藉此管理自己的網路。
  • Passpoint 網路已整合至 Suggestion API,可向使用者建議。
  • 您可以使用 Analytics API 取得有關聯播網品質的資訊。

CallScreeningService 更新

自 Android 11 起,CallScreeningService 可以要求取得來電的 STIR/SHAKEN 驗證狀態 (verstat) 資訊。這項資訊會顯示在來電的通話詳細資料中。

如果 CallScreeningService持有READ_CONTACTS權限,當使用者聯絡人中的號碼有來電或撥出電話時,應用程式就會收到通知。

詳情請參閱「防止來電顯示遭竄改」。

Open Mobile API 更新

如要瞭解 Android 11 以上版本支援的 OMAPI,請參閱「支援開放式行動 API 讀取器」。

高效能 VPN

如果應用程式指定 API 級別 30 以上版本,或是在 API 級別 29 以上版本推出的裝置上執行,則可將 IKEv2/IPsec 套用至 VPN,包括使用者設定的 VPN 和應用程式專屬的 VPN。

VPN 會在作業系統中原生執行,簡化在應用程式中建立 IKEv2/IPsec VPN 連線所需的程式碼。

依程序控管網路存取權

如要瞭解如何逐一啟用程序的網路存取權,請參閱「管理網路用量」。

允許安裝多個具有相同 FQDN 的 Passpoint 設定

從 Android 11 開始,您可以使用 PasspointConfiguration.getUniqueId() 取得 PasspointConfiguration 物件的專屬 ID,讓應用程式使用者安裝多個具有相同完整網域名稱 (FQDN) 的設定檔。

如果電信業者在網路上部署多組行動裝置國家/地區代碼 (MCC) 和行動網路代碼 (MNC) 組合,但只有一個完整網域名稱 (FQDN),這項功能就非常實用。在 Android 11 以上版本中,使用者安裝含有 MCC 或 MNC 的 SIM 卡時,可以安裝多個與家用供應商網路相符的設定檔,且這些設定檔具有相同的 FQDN。

支援 GNSS 天線

Android 11 推出 GnssAntennaInfo 類別,讓應用程式能更充分運用全球導航衛星系統 (GNSS) 提供的公分級精確定位功能。

詳情請參閱天線校正資訊指南。

圖形

NDK 圖片解碼器

NDK ImageDecoder API 提供標準 API,可讓 Android C/C++ 應用程式直接將圖片解碼。應用程式開發人員不再需要使用架構 API (透過 JNI) 或組合第三方圖片解碼程式庫。詳情請參閱圖片解碼器開發人員指南

影格速率 API

Android 11 提供 API,可讓應用程式將預期影格速率告知系統,以減少支援多種更新率的裝置發生畫面抖動。如要瞭解如何使用這項 API,請參閱影格速率指南

要求並檢查低延遲支援

某些螢幕可以執行圖像後續處理作業,例如部分外接螢幕和電視。這項後續處理作業可提升圖像品質,但可能會增加延遲。支援 HDMI 2.1 的新型螢幕具有自動低延遲模式 (ALLM,也稱為遊戲模式),可關閉後續處理程序,盡量縮短延遲時間。如要進一步瞭解 ALLM,請參閱 HDMI 2.1 規格

如果可用,視窗可以要求使用自動低延遲模式。ALLM 特別適合遊戲和視訊會議等應用程式,因為這類應用程式的低延遲比最佳畫質更重要。

如要開啟或關閉最低後續處理,請呼叫 Window.setPreferMinimalPostProcessing(), 或將視窗的 preferMinimalPostProcessing 屬性設為 true。並非所有螢幕都支援最低後續處理;如要瞭解特定螢幕是否支援,請呼叫新方法 Display.isMinimalPostProcessingSupported()

高效能的圖像偵錯層注入

應用程式現在可將外部圖形層 (GLESVulkan) 載入原生應用程式程式碼,以公開與可偵錯應用程式相同的功能,但不會產生效能負擔。使用 GAPID 等工具剖析應用程式時,這項功能尤其重要。如要剖析應用程式,請在應用程式資訊清單檔案中加入下列中繼資料元素,而不是將應用程式設為可偵錯:

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

圖片和相機

在擷取畫面期間關閉通知音效和震動

從 Android 11 開始,應用程式在主動使用相機時,可以透過 setCameraAudioRestriction() 僅關閉震動、同時關閉聲音和震動,或兩者都不關閉。

更豐富的 Android Emulator 相機支援功能

如要瞭解 Android 11 以上版本模擬器提供的相機擴充支援功能,請參閱「相機支援」。

支援同時使用多部攝影機

Android 11 新增了 API,可查詢是否支援同時使用多部攝影機,包括前置和後置攝影機。

如要檢查應用程式執行的裝置是否支援這項功能,請使用下列方法:

更完善地支援含有多個影格的 HEIF 圖片

從 Android 11 開始,如果您呼叫 ImageDecoder.decodeDrawable() 並傳遞含有影格序列的 HEIF 圖片 (例如動畫或連拍相片),這個方法會傳回含有整個圖片序列的 AnimatedImageDrawable。在舊版 Android 中,這個方法只會傳回單一影格的 BitmapDrawable

如果 HEIF 圖片包含多個非序列的影格,您可以呼叫 MediaMetadataRetriever.getImageAtIndex() 擷取個別影格。

無障礙設定

無障礙服務開發人員最新消息

如果您建立自訂無障礙服務,可以在 Android 11 中使用下列功能:

  • 現在除了純文字,無障礙服務的使用者說明也支援 HTML 和圖片。這項彈性功能可讓您更輕鬆地向使用者說明服務的用途和助益。
  • 如要使用語意上比 contentDescription 更有意義的 UI 元素狀態說明,請呼叫 getStateDescription() 方法。
  • 如要要求觸控事件略過系統的觸控探索器,請呼叫 setTouchExplorationPassthroughRegion()。同樣地,如要要求手勢略過系統的手勢偵測工具,請呼叫 setGestureDetectionPassthroughRegion()
  • 您可以要求執行「輸入」和「下一個」等 IME 動作,以及擷取未啟用 FLAG_SECURE 標記的視窗螢幕截圖。

其他功能

應用程式程序結束原因

Android 11 導入了 ActivityManager.getHistoricalProcessExitReasons() 方法,可回報近期任何程序終止的原因。應用程式可使用這個方法收集當機診斷資訊,例如程序終止是否是由於 ANR、記憶體問題或其他原因。此外,您可以使用新的 setProcessStateSummary() 方法儲存自訂狀態資訊,以供日後分析。

getHistoricalProcessExitReasons() 方法會傳回 ApplicationExitInfo 類別的執行個體,其中包含與應用程式程序終止相關的資訊。只要在這個類別的例項上呼叫 getReason(),即可判斷應用程式的程序遭到終止的原因。舉例來說,如果傳回值為 REASON_CRASH,表示應用程式發生未處理的例外狀況。如果應用程式需要確保結束事件的獨特性,可以維護應用程式專屬的 ID,例如根據 getTimestamp() 方法的時間戳記計算出的雜湊值。

其他資源

如需更多資訊,請參閱 Medium 上的「new Android 11 tools to make apps more private and stable」(Android 11 新工具可讓應用程式更注重隱私權和穩定性) 一文。

資源載入器

Android 11 推出全新 API,可讓應用程式動態擴充資源的搜尋和載入方式。新版 API 類別 ResourcesLoaderResourcesProvider 主要負責提供新功能。兩者共同提供額外資源和資產,或修改現有資源和資產的值。

ResourcesLoader 物件是容器,可將 ResourcesProvider 物件提供給應用程式的 Resources 執行個體。反過來說,ResourcesProvider 物件提供的方法可從 APK 和資源表載入資源資料。

這個 API 的主要用途之一是載入自訂素材資源。您可以使用 loadFromDirectory() 建立 ResourcesProvider,重新導向檔案資源和資產的解析度,導致系統搜尋特定目錄,而非應用程式 APK。您可以透過 AssetManager API 類別的 open() 方法系列存取這些資產,就像存取 APK 中綁定的資產一樣。

APK 簽署配置 v4

Android 11 新增了 APK 簽署配置 v4 的支援功能。這項配置會在另一個檔案 (apk-name.apk.idsig) 中產生新類型的簽名,但其他方面與 v2 和 v3 類似。APK 不會變更。這項配置支援 ADB 漸進式 APK 安裝,可加快 APK 安裝速度。

動態意圖篩選器

如要接收意圖,應用程式必須在編譯時宣告可接收的資料類型,方法是在應用程式資訊清單中定義意圖篩選器。在 Android 10 以下版本中,應用程式無法在執行階段變更意圖篩選器。這對虛擬化應用程式 (例如虛擬機器和遠端桌面) 來說是個問題,因為這些應用程式無法確切瞭解使用者會在其中安裝哪些軟體。

Android 11 導入了 MIME 群組,這項新的資訊清單元素可讓應用程式在意圖篩選器中宣告動態 MIME 類型集,並在執行階段以程式輔助方式修改。如要使用 MIME 群組,請在應用程式資訊清單中加入含有新 android:mimeGroup 屬性的資料元素:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

android:mimeGroup 屬性的值是任意字串 ID,用於在執行階段識別 MIME 群組。您可以將 MIME 群組的 ID 傳遞至 PackageManager API 類別中的下列新方法,存取及更新 MIME 群組的內容:

以程式輔助方式將 MIME 類型新增至 MIME 群組時,其運作方式與資訊清單中明確宣告的靜態 MIME 類型完全相同。

自動填入功能強化

Android 11 導入了自動填入服務的改良功能。

AssistStructure.ViewNode 中的提示 ID

自動填入服務通常會根據檢視區塊的屬性,計算檢視區塊的簽章雜湊值。計算簽章雜湊時,建議加入檢視提示,但提示字串可能會隨手機的語言代碼而異。為解決這個問題,Android 11 擴充了 AssistStructure.ViewNode,新增 getHintIdEntry() 方法,可傳回檢視畫面提示文字的資源 ID。這個方法提供與語言代碼無關的值,可用於計算簽章雜湊。

顯示的資料集事件

為協助自動填入服務改善建議,Android 11 提供方法,可識別自動填入服務顯示資料集,但使用者未選取任何資料集的情況。在 Android 11 中, FillEventHistory 會回報新的 TYPE_DATASETS_SHOWN 事件類型。每當自動填入服務向使用者顯示一或多個資料集時,FillEventHistory 就會記錄這類事件。自動填入服務可搭配現有的 TYPE_DATASET_SELECTED 事件使用這些事件,判斷使用者是否選取任何提供的自動填入選項。

輸入法編輯器整合

鍵盤和其他 IME 現在可以在建議列或類似介面中以內嵌方式顯示自動填入建議,而非在下拉式選單中顯示。為保護密碼和信用卡號碼等私密資訊,系統會向使用者顯示建議,但 IME 不會知道建議內容,直到使用者選取其中一項為止。如要瞭解 IME 和密碼管理工具如何支援這項功能,請參閱「將自動填入功能與鍵盤整合」。

與內容擷取服務共用資料

從 Android 11 開始,應用程式可以與裝置的內容擷取服務共用資料。這項功能可讓裝置更輕鬆地提供情境智慧,例如顯示使用者環境中目前播放的歌曲名稱。

如要讓內容擷取服務存取應用程式資料,請在 ContentCaptureManager 的執行個體上呼叫 shareData() 方法。如果系統接受資料共用要求,應用程式會收到唯寫檔案描述元,並與內容擷取服務共用。