功能與 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,可改善輸入法編輯器 (IME) 的轉場效果,例如螢幕小鍵盤。這些 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 中的低延遲解碼

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 時,可以安裝多個具有相同 FQDN 的設定檔,這些設定檔會與 Home 供應商的網路相符。

支援 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 不會知道建議內容,直到使用者選取其中一項為止。如要瞭解 IME 和密碼管理工具如何支援這項功能,請參閱「將自動填入功能與鍵盤整合」。

與內容擷取服務共用資料

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

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