Android 11 為開發人員推出了強大的新功能和 API。以下各節可協助您瞭解應用程式功能,並開始使用相關的 API。
如需新增、修改及移除 API 的詳細清單,請參閱 API 差異比較表。如要進一步瞭解新的 API,請參閱 Android API 參考資料 - 新的 API 會醒目顯示,以利於查看。此外,如要瞭解平台異動可能影響應用程式的領域,請務必查看針對指定 Android R 為目標的應用程式和所有應用程式的 Android 11 行為異動,以及隱私權相關異動。
全新使用體驗
裝置控制選項
Android 11 包含新的 ControlsProviderService
API,可用來公開已連接的外部裝置的控制選項。這些控制項會顯示在 Android 電源選單中的「裝置控制項」下方。詳情請參閱「控制外部裝置」。
媒體控制項
Android 11 更新媒體控制項的顯示方式。媒體控制項會顯示在快速設定附近。多個應用程式的工作階段會排列成可滑動的輪轉介面,其中包括在手機上本機播放的串流、遠端串流 (例如在外部裝置或投放工作階段中偵測到的串流),以及先前播放的可續傳工作階段。
使用者不必啟動應用程式,就能從輪轉介面重新啟動先前的工作階段。當開始播放時,使用者會照常與媒體控制項互動。
詳情請參閱媒體控制選項。
主螢幕
更有效地支援刊登序列螢幕
Android 11 提供多個 API,支援刊登序列顯示,且這些 API 會圍繞裝置邊緣顯示。系統會將這些螢幕視為具有螢幕凹口的螢幕變化版本。現有的 DisplayCutout
.getSafeInset…()
方法現在會傳回安全的插邊,避免發生刊登序列區域和凹口。如要在刊登序列區域中算繪應用程式內容,請按照下列步驟操作:
呼叫
DisplayCutout.getWaterfallInsets()
取得刊登序列插邊的確切尺寸。將視窗版面配置屬性
layoutInDisplayCutoutMode
設為LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
,允許視窗延伸至畫面所有邊緣的凹口和刊登序列區域。您必須確保未在凹口或刊登序列區域沒有任何基本內容。
轉軸角度感應器與摺疊式裝置
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 有幾項變更:
- 不含參數的
BubbleMetadata.Builder()
建構函式已淘汰。請改用兩個新建構函式:BubbleMetadata.Builder(PendingIntent, Icon)
或BubbleMetadata.Builder(String)
。 - 呼叫
BubbleMetadata.Builder(String)
從捷徑 ID 建立BubbleMetadata
。傳遞的字串應與提供給Notification.Builder
的捷徑 ID 相符。 - 使用
Icon.createWithContentUri()
或新方法createWithAdaptiveBitmapContentUri()
建立泡泡圖示。
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-Tools,adb install
就會自動使用這項功能。如果不支援,則會在不通知使用者的情況下使用預設的安裝方法。
使用下列 ADB 指令來使用這項功能。如果裝置不支援漸進式安裝,指令就會失敗並輸出詳細說明。
adb install --incremental
在執行 ADB 漸進式 APK 安裝之前,您必須先簽署 APK 並建立 APK Signature Scheme 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 推出新的控制選項,協助機器學習運作順暢:
QoS API:新版 Service API 支援 NNAPI 中的優先順序和工作期限,且支援下列新功能:
記憶體網域輸入/輸出:NNAPI 1.3 支援將記憶體網域做為輸入和要執行的輸出。這麼做可移除不同系統元件中不必要的相同資料副本,進而改善 Android 類神經網路的執行階段效能。這項功能會新增一組新的 NDK API,以便與
ANeuralNetworksMemoryDesc
和ANeuralNetworkMemory
物件搭配使用,包括下列函式:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
詳情請參閱類神經網路記憶體網域範例。
依附元件 API 與同步圍欄支援:NNAPI 1.3 支援包含依附元件的非同步運算,在叫用小型鏈結模型時可大幅降低負擔。這項功能會新增下列函式:
控制流程:NNAPI 1.3 支援使用新的圖表運算
ANEURALNETWORKS_IF
和ANEURALNETWORKS_WHILE
,支援一般控制流程,且這些作業會使用新的ANEURALNETWORKS_MODEL
運算元類型接受其他模型做為引數。此外,這項功能也會新增下列函式:
NDK Thermal API
當裝置過熱時,裝置可能會對 CPU 和/或 GPU 進行節流措施,進而以非預期方式影響應用程式。如果應用程式或遊戲使用複雜的圖形、大量運算或持續的網路活動,就更有可能引發問題。
使用 Android 11 的 NDK Thermal API 可監控裝置的溫度變化,然後採取行動以維持較低的耗電量和裝置溫度。這個 API 與 Java Thermal API 類似,可用來接收任何熱力狀態變更的通知,或直接輪詢目前狀態。
文字與輸入
改善輸入法編輯器轉場效果
為改善輸入法編輯器 (IME) 等輸入法編輯器 (IME) 的轉換作業,Android 11 導入了新的 API。這些 API 可讓您輕鬆調整應用程式的內容,以便與輸入法編輯器的外觀與消失效果同步,並搭配狀態和導覽列等其他元素。
如要在任何 EditText
已聚焦時顯示輸入法編輯器,請呼叫 view.getInsetsController().show(Type.ime())
。在與聚焦 EditText
相同階層中的任何檢視畫面上,都可以呼叫此方法,不必特別在 EditText
上呼叫此方法。)如要隱藏輸入法編輯器,請呼叫 view.getInsetsController().hide(Type.ime())
。您可以呼叫 view.getRootWindowInsets().isVisible(Type.ime())
,檢查輸入法編輯器目前是否顯示。
如要將應用程式的檢視畫面與輸入法編輯器的顯示和消失,請將 WindowInsetsAnimation.Callback
提供給 View.setWindowInsetsAnimationCallback()
,以設定檢視畫面的事件監聽器。(您可以在「任何」檢視畫面上設定這個事件監聽器,不一定要是 EditText
)。onPrepare()
onStart()
然後在轉場的每個進度呼叫 onProgress()
。轉換作業完成後,IME 會呼叫 onEnd()
。在轉換過程中,您隨時可以呼叫 WindowInsetsAnimation.getFraction()
來瞭解轉換進度。
如需如何使用這些 API 的範例,請參閱新的 WindowInsetsAnimation 程式碼範例。
控制輸入法編輯器動畫
您也可以控管 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 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.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
此外,MediaCodec.Callback()
中兩種方法的行為已變更:
onInputBufferAvailable()
- 應用程式應使用
MediaCodec.getQueueRequest
搭配索引,而不是使用索引呼叫MediaCodec.getInputBuffer()
和MediaCodec.queueInputBuffer()
,而會將 LinearBlock/HardwareBuffer 附加至該版位。 onOutputBufferAvailable()
- 應用程式可能會使用
MediaCodec.getOutputFrame()
搭配索引來取得包含更多資訊的OutputFrame
物件和 LinearBlock/HardwareBuffer 緩衝區,而不是使用索引呼叫MediaCodec.getOutputBuffer()
。
MediaCodec 中的低延遲解碼作業
Android 11 強化了 MediaCodec
,支援遊戲和其他即時應用程式的低延遲解碼功能。您可以將 FEATURE_LowLatency
傳遞至 MediaCodecInfo.CodecCapabilities.isFeatureSupported()
,檢查轉碼器是否支援低延遲解碼。
如要開啟或關閉低延遲解碼功能,請執行下列任一操作:
- 使用
MediaCodec.configure()
將新鍵KEY_LOW_LATENCY
設為 0 或 1。 - 使用
MediaCodec.setParameters()
將新參數鍵PARAMETER_KEY_LOW_LATENCY
設為 0 或 1。
新 AAudio 函式 AAudioStream_release()
AAudioStream_close()
函式會同時釋放並關閉音訊串流。這可能造成危險。如有其他程序在關閉後嘗試存取串流,程序就會停止運作。
新函式 AAudioStream_release()
會釋出串流,但不會關閉串流。這會釋放資源,並將串流呈現已知狀態。在您呼叫 AAudioStream_close()
之前,物件會一直存在。
MediaParser API
MediaParser 是全新的低階 API,適用於媒體擷取。比 MediaExtractor 更具彈性,也提供媒體擷取功能的額外控制。
從 USB 裝置擷取音訊
當沒有 RECORD_AUDIO
權限的應用程式使用 UsbManager
要求直接存取具備音訊擷取功能的 USB 音訊裝置 (例如 USB 耳機) 時,系統會顯示新的警告訊息,要求使用者確認使用裝置的權限。系統會忽略所有「always use」選項,因此每當應用程式要求存取權時,使用者都必須確認警示訊息並授予權限。
為了避免這個行為,應用程式應要求 RECORD_AUDIO
權限。
同時存取麥克風
Android 11 將新方法新增至 AudioRecord
、MediaRecorder
和 AAudioStream
API。無論所選用途為何,這些方法都可啟用及停用並行擷取的功能。請參閱「分享音訊輸入」。
輸出端切換器
針對使用 Cast 和 mediarouter API 的應用程式,Android 11 將實作新行為。
除了從應用程式內存取投放選項之外,系統媒體播放器中也會顯示切換選項。這有助於使用者在切換觀看和聆聽情境時流暢切換裝置,例如在廚房和手機觀看影片,或在住家或車輛中聆聽音訊。請參閱輸出切換器。
連線
Wi-Fi Passpoint 強化功能
如要進一步瞭解 Android 11 中新增的 Passpoint 功能,請參閱「Passpoint」相關說明。
Wi-Fi 建議 API 已展開
Android 11 擴充了 Wi-Fi Recommendationion API 以提升應用程式的網路管理功能,包括:
- 連線管理應用程式可以允許中斷連線要求,藉此管理自己的網路。
- Passpoint 網路已整合至 Recommendationion API,供使用者參考。
- Analytics (分析) API 可讓您取得網路品質的相關資訊。
CallScreeningService 更新
從 Android 11 開始,CallScreeningService 可針對來電呼叫 STIR/SHAKEN 驗證狀態 (verstat) 的相關資訊。這項資訊會顯示在來電的通話詳細資料中。
如果 CallScreeningService
保留 READ_CONTACTS
權限,當使用者接到來電或撥打使用者聯絡人中的號碼時,應用程式就會收到通知。
詳情請參閱「避免假冒來電顯示」。
開啟 Mobile API 更新
如要瞭解 Android 11 以上版本的 OMAPI 支援,請參閱「Open Mobile API 讀取工具支援」。
高效能 VPN
如果應用程式指定 API 級別 30 以上,或在 API 級別 29 及以上啟動的裝置上執行,則可針對使用者設定的 VPN 和應用程式型 VPN,將 IKEv2/IPsec 套用至 VPN。
VPN 會在作業系統原生上執行,簡化在應用程式中建立 IKEv2/IPsec VPN 連線所需的程式碼。
每項程序的網路存取權控管
如要瞭解如何為每個程序啟用網路存取權,請參閱「管理網路用量」一文。
允許具有相同 FQDN 的多個已安裝 Passpoint 設定
從 Android 11 開始,您可以使用 PasspointConfiguration.getUniqueId()
取得 PasspointConfiguration
物件的專屬 ID,讓應用程式的使用者安裝多個具有相同完整網域名稱 (FQDN) 的設定檔。
如果電信業者在其網路上部署了多個行動裝置國家/地區代碼 (MCC) 和行動網路識別碼 (MNC) 的組合,但只有一個 FQDN,這項功能就非常實用。在 Android 11 以上版本中,當使用者安裝含有 MCC 或 MNC 的 SIM 卡時,即可安裝多個使用相同 FQDN 的設定檔,且該 FQDN 符合 Google Home 供應商的網路做為條件。
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()
。
高效能圖形偵錯層插入
應用程式現在可以在原生應用程式程式碼中載入外部圖形層 (GLES、Vulkan),藉此公開與可進行偵錯的應用程式相同的功能,但不會造成效能負擔。使用 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,以查詢一次使用多個相機 (包括前置和後置鏡頭) 的查詢支援。
如要檢查執行應用程式的裝置是否支援,請使用下列方法:
getConcurrentCameraIds()
會傳回相機 ID 組合的Set
。當以相同應用程式程序進行設定時,可與保證串流組合並行串流。isConcurrentSessionConfigurationSupported()
會查詢相機裝置是否能並行支援對應的工作階段設定。
針對含有多個畫面的 HEIF 圖片提供更佳支援
從 Android 11 開始,如果您呼叫 ImageDecoder.decodeDrawable()
並傳遞包含一系列影格的 HEIF 圖片 (例如動畫或連拍相片),此方法會傳回包含整個圖像序列的 AnimatedImageDrawable
。在較舊的 Android 版本中,這個方法只會傳回單一影格的 BitmapDrawable
。
如果 HEIF 圖形包含多個不在序列中的影格,您可以呼叫 MediaMetadataRetriever.getImageAtIndex()
擷取個別影格。
無障礙功能
無障礙服務開發人員最新消息
如要建立自訂無障礙服務,可以在 Android 11 中使用下列功能:
- 面向使用者的無障礙服務說明現在除了純文字以外,還支援 HTML 和圖片。這種彈性可以讓使用者更輕鬆地解釋您的服務內容,以及服務能提供哪些協助。
- 如要使用比
contentDescription
更具語意意義的 UI 元素狀態說明,請呼叫getStateDescription()
方法。 - 如要要求觸控事件略過系統的觸控探索系統,請呼叫
setTouchExplorationPassthroughRegion()
。同樣地,如要要求手勢略過系統的手勢偵測工具,請呼叫setGestureDetectionPassthroughRegion()
。 - 您可以要求輸入法編輯器動作 (例如「Enter」和「next」),以及未啟用
FLAG_SECURE
旗標的視窗螢幕截圖。
其他功能
應用程式程序結束原因
Android 11 引入 ActivityManager.getHistoricalProcessExitReasons()
方法,可回報近期程序終止的原因。應用程式可以使用這個方法收集當機診斷資訊,例如程序是否因 ANR、記憶體問題或其他原因導致。此外,您可以使用新的 setProcessStateSummary()
方法儲存自訂狀態資訊,供日後分析使用。
getHistoricalProcessExitReasons()
方法會傳回 ApplicationExitInfo
類別的執行個體,其中包含應用程式程序死亡的相關資訊。只要在這個類別的執行個體呼叫 getReason()
,即可判斷應用程式程序終止的原因。舉例來說,REASON_CRASH
的傳回值表示應用程式發生未處理的例外狀況。如果應用程式需要確保離開事件的專屬 ID,則可維持應用程式專屬 ID,例如以 getTimestamp()
方法時間戳記為依據的雜湊值。
其他資源
詳情請參閱 Medium 文章,瞭解新的 Android 11 工具有助應用程式更私密且穩定。
資源載入器
Android 11 導入了新的 API,可讓應用程式動態擴大資源的搜尋及載入方式。新的 API 類別 ResourcesLoader
和 ResourcesProvider
主要負責提供新功能。藉由搭配運用,您可以提供其他資源和資產,或是修改現有資源和資產的值。
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 類型完全相同。
自動填入強化功能
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 和密碼管理工具如何支援這項功能,請參閱「將自動填入功能與鍵盤整合」。
與內容擷取服務共用資料
從 Android 11 開始,應用程式可與裝置的內容擷取服務共用資料。這項功能可讓裝置更輕鬆地提供情境情報,例如顯示使用者環境中正在播放的歌曲名稱。
如要讓應用程式資料提供給內容擷取服務,請在 ContentCaptureManager
例項上呼叫 shareData()
方法。如果系統接受資料共用要求,應用程式就會收到唯寫檔案描述元,與內容擷取服務共用。