功能與 API 總覽

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

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

全新使用體驗

裝置控制選項

Android 11 提供新的 ControlsProviderService API,可用來公開已連線外部裝置的控制項。這些控制項會顯示在 Android 電源選單的「Device controls」中。詳情請參閱「控制外部裝置」一文。

媒體控制項

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

使用者不必啟動應用程式,即可從輪轉介面重新啟動先前的工作階段。播放開始時,使用者會照常與媒體控制項互動。

詳情請參閱「媒體控制項」。

螢幕

更有效地支援刊登序列

Android 11 提供多個 API,可支援瀑布顯示畫面,這類螢幕會在裝置邊緣周圍環繞。這類螢幕會視為含有螢幕凹口的螢幕變化版本。現有的 DisplayCutout.getSafeInset…() 方法現在會傳回安全插邊,避開刊登序列區域和凹口。如要在刊登序列區域中轉譯應用程式內容,請按照下列步驟操作:

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

若是採用轉軸式螢幕設定的裝置,Android 11 可透過 TYPE_HINGE_ANGLE 提供新的感應器,以及可監控轉軸角度的全新 SensorEvent 來監控轉軸角度,並提供裝置兩個內外部分之間的測量結果,方便在轉軸式螢幕設定裝置上執行的應用程式判斷轉軸的角度。您可以利用這些原始測量結果,在使用者操控裝置時執行精細的動畫。

請參閱「摺疊式裝置」。

對話內容

改良對話功能

Android 11 改善了對話的處理方式。對話是指兩個以上人之間的 即時雙向通訊這類對話有特別的顯眼程度,使用者可以透過幾種新選項與對話互動。

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

即時通訊泡泡

開發人員現在可使用對話框,協助顯示整個系統中的對話。Bubbles 是 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 生物特徵辨識程式庫中。

驗證類型

Android 11 導入了 BiometricManager.Authenticators 介面,可用來宣告應用程式支援的驗證類型

判斷使用哪種驗證類型

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

針對單次使用驗證金鑰的其他支援

Android 11 對使用單次使用驗證金鑰的驗證方式提供更多支援

已淘汰的方法

Android 11 淘汰了下列方法:

  • setDeviceCredentialAllowed() 方法。
  • setUserAuthenticationValidityDurationSeconds() 方法。
  • canAuthenticate() 的超載版本沒有引數。

安全地共用大型資料集

在某些情況下,例如涉及機器學習或媒體播放的情況,您的應用程式可能會想與其他應用程式使用相同的大型資料集。在舊版 Android 中,應用程式和另一個應用程式需要下載相同資料集的獨立副本。

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

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

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

效能與品質

無線偵錯

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 類似,可用來接收任何熱力狀態變更的通知,或直接輪詢目前狀態。

文字和輸入

改善輸入法編輯器轉場效果

Android 11 推出了新的 API,改善輸入法編輯器 (IME) 的轉換效果,例如螢幕小鍵盤。這些 API 與狀態和導覽列等其他元素,可在同步處理時,輕鬆調整應用程式內容。

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

如要同步處理應用程式的檢視畫面與輸入法編輯器的外觀和消失功能,請將 WindowInsetsAnimation.Callback 提供給 View.setWindowInsetsAnimationCallback(),以便在檢視畫面上設定事件監聽器。(您可以在「任何」檢視畫面設定這個事件監聽器,不一定要是 EditText)。 IME 會呼叫事件監聽器的 onPrepare() 方法,然後在轉換開始時呼叫 onStart()。然後在轉換中的每個進度時呼叫 onProgress()。轉換完成後,IME 會呼叫 onEnd()。在轉換過程中,您隨時可以呼叫 WindowInsetsAnimation.getFraction() 來瞭解轉移作業的進度。

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

控制輸入法編輯器動畫

您也可以控制輸入法編輯器動畫,或是導覽列等其他系統列的動畫。方法是先呼叫 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;
   }
});

如要移動 IME 或其他系統資訊列,請呼叫控制器的 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 10 的 63 版相比,Android 11 會更新 android.icu 套件來使用 ICU 程式庫 66 版。新的程式庫版本包含更新後的 CLDR 語言代碼資料,以及 Android 中國際化支援的多項強化功能。

新版程式庫的重大異動包括:

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

媒體

分配 MediaCodec 緩衝區

Android 11 提供新的 MediaCodec API,可讓應用程式在分配輸入和輸出緩衝區時進一步控管。這可讓應用程式更有效率地管理記憶體。

新課程:
新方法:

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

onInputBufferAvailable()
若應用程式設為使用 Block Model API,則不應透過索引呼叫 MediaCodec.getInputBuffer()MediaCodec.queueInputBuffer(),而是使用 MediaCodec.getQueueRequest 搭配索引,並將 LinearBlock/HardwareBuffer 附加至該運算單元。
onOutputBufferAvailable()
應用程式可利用索引使用 MediaCodec.getOutputFrame() 取得更多資訊和 LinearBlock/HardwareBuffer 緩衝區的 OutputFrame 物件,而非透過索引呼叫 MediaCodec.getOutputBuffer()

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 Suggestion API 來提升應用程式的網路管理功能,包括:

  • 連線管理應用程式可透過允許中斷連線要求來管理自己的網路。
  • Passpoint 網路已整合至 Suggestion API,因此可向使用者提供建議。
  • Analytics (分析) API 可讓您取得網路品質的相關資訊。

CallScreeningService 更新

從 Android 11 開始,CallScreeningService 可要求取得來電的 STIR/SHAKEN 驗證狀態 (反面) 相關資訊。這項資訊會在來電的呼叫詳細資料中提供。

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

詳情請參閱「避免假冒來電顯示」。

開啟 Mobile API 更新

如要瞭解 Android 11 以上版本對 OMAPI 的支援情形,請參閱 Open Mobile API 讀取器支援功能

高效能 VPN

如果應用程式指定 API 級別 30 以上級別,或是在啟動 API 級別 29 及以上版本的裝置上運作,就能將 IKEv2/IPsec 套用至 VPN,用於使用者設定和應用程式型 VPN。

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

個別程序的網路存取權控管

如要瞭解如何針對個別程序啟用網路存取權,請參閱「管理網路用量」。

允許使用相同的 FQDN 設定多個已安裝的 Passpoint 設定

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

如果電信業者只用單一 FQDN,在其網路上部署多個行動裝置國家/地區代碼 (MCC) 和行動網路代碼 (MNC) 的組合時,這項功能就非常實用。在 Android 11 及以上版本中,當使用者透過 MCC 或 MNC 安裝 SIM 卡時,可以用同一個 FQDN 安裝多個設定檔,這些設定檔就會符合家用供應商的網路。

GNSS 天線支援

Android 11 導入了 GnssAntennaInfo 類別,可讓應用程式充分運用全球導航衛星系統 (GNSS) 可提供的公分準確定位。

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

圖形

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 等工具分析應用程式時,這項功能特別重要。如要剖析應用程式,請在應用程式資訊清單檔案中加入下列 meta-data 元素,而不要將應用程式設為可進行偵錯:

<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 動作 (例如「Enter」和「next」),以及未啟用 FLAG_SECURE 旗標的視窗螢幕截圖。

其他功能

應用程式處理程序結束原因

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

getHistoricalProcessExitReasons() 方法會傳回 ApplicationExitInfo 類別的執行個體,其中包含應用程式程序死亡的相關資訊。在這個類別的例項上呼叫 getReason(),就可以判斷應用程式程序終止的原因。舉例來說,傳回 REASON_CRASH 值表示應用程式中發生未處理的例外狀況。如果應用程式需要確保離開事件不重複,可以保留應用程式專屬的 ID,例如以 getTimestamp() 方法時間戳記為基礎的雜湊值。

其他資源

詳情請參閱「推出新的 Android 11 工具,讓應用程式在 Medium 上更私密且穩定」。

資源載入器

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) 中產生新類型的簽章,但其他形式與第 2 版和第 3 版不同。不會對 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 類型完全相同。

自動填入強化功能

Android 11 改善了自動填入服務。

AssistStructure.ViewNode 中的提示 ID

這項功能通常適用於自動填入服務,根據檢視畫面屬性計算檢視畫面的簽名雜湊。計算簽名雜湊時,檢視提示是特別好的屬性,但提示字串可能會隨著手機的語言代碼而改變。為解決這個問題,Android 11 會使用新的 getHintIdEntry() 方法展開 AssistStructure.ViewNode,傳回檢視區塊提示文字的資源 ID。這個方法提供與語言代碼無關的值,可用來計算簽名雜湊。

資料集顯示事件數

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

IME 整合

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

使用內容擷取服務共用資料

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

如要讓內容擷取服務使用應用程式資料,請在 ContentCaptureManager 例項上呼叫 shareData() 方法。如果系統接受資料共用要求,應用程式會收到僅供寫入的檔案描述元,以便與內容擷取服務共用。