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…() 方法現在會傳回安全插邊,避免瀑布區域和凹口。如要在瀑布式螢幕區域中算繪應用程式內容,請按照下列步驟操作:
呼叫
DisplayCutout.getWaterfallInsets(),取得瀑布式凹角的確切尺寸。將視窗版面配置屬性
layoutInDisplayCutoutMode設為LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS,允許視窗延伸至螢幕所有邊緣的凹口和瀑布區域。請務必確保挖孔或瀑布區域沒有任何重要內容。
轉軸角度感應器和摺疊式裝置
Android 11 提供了 TYPE_HINGE_ANGLE 新感應器,以及可監控轉軸角度並提供裝置兩個組成部分之間角度測量值的 SensorEvent,讓在具有轉軸式螢幕設定的裝置上執行的應用程式能夠判斷轉軸的角度。您可以使用這些原始測量結果,在使用者操作裝置時執行精細的動畫。
請參閱「摺疊式裝置」。
對話
對話功能改善
Android 11 對對話的處理方式進行了多項改善。對話是指兩人以上之間的即時雙向通訊。這些對話會特別醒目,使用者可以透過多種新選項與其互動。
如要進一步瞭解對話以及應用程式如何支援對話,請參閱「使用者和對話」。
即時通訊泡泡
開發人員現在可以使用泡泡,在整個系統中顯示對話。泡泡是 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 簽名配置 v4 檔案。必須將第 4 版簽名檔案放在 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_LSTMIFWHILEELUHARD_SWISHFILLRANK
全新機器學習控制項
NNAPI 1.3 推出全新控制項,可協助機器學習順利執行:
QoS API:新的服務品質 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()
詳情請參閱類神經網路記憶體網域範例。
Dependency 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 轉換
Android 11 導入了新的 API,可改善輸入法編輯器 (IME) 的轉場效果,例如螢幕小鍵盤。這些 API 可讓您更輕鬆地調整應用程式內容,與 IME 的顯示和消失,以及狀態和導覽列等其他元素保持同步。
如要在任何 EditText 具有焦點時顯示 IME,請呼叫 view.getInsetsController().show(Type.ime())。(您可以在與聚焦 EditText 相同階層的任何檢視畫面上呼叫這個方法,不一定要在 EditText 上呼叫)。如要隱藏 IME,請呼叫 view.getInsetsController().hide(Type.ime())。您可以呼叫 view.getRootWindowInsets().isVisible(Type.ime()),檢查目前是否顯示 IME。
如要同步處理應用程式檢視畫面與 IME 的顯示和消失,請將 WindowInsetsAnimation.Callback 提供給 View.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; } });
如要移動 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 11 更新了 android.icu 套件,改用 66 版 ICU 程式庫,而 Android 10 則使用 63 版。新版程式庫包含更新的 CLDR 語言代碼資料,以及多項 Android 國際化支援強化功能。
新版程式庫的重要異動如下:
- 許多格式設定 API 現在都支援擴充
FormattedValue的新傳回物件類型。 LocaleMatcherAPI 經過強化,新增了建構工具類別、支援java.util.Locale類型,以及提供比對結果相關額外資料的結果類別。- 現已支援 Unicode 13。
媒體
分配 MediaCodec 緩衝區
Android 11 包含新的 MediaCodec API,可讓應用程式在分配輸入和輸出緩衝區時擁有更多控制權。讓應用程式更有效率地管理記憶體。
新類別:
新方法:
MediaCodec.getQueueRequest()MediaCodec.getOutputFrame()MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
此外,MediaCodec.Callback() 中兩種方法的行為也已變更:
onInputBufferAvailable()- 如果應用程式設定為使用 Block Model API,則應使用
MediaCodec.getQueueRequest搭配索引,將 LinearBlock/HardwareBuffer 附加至版位,而不是使用索引呼叫MediaCodec.getInputBuffer()和MediaCodec.queueInputBuffer()。 onOutputBufferAvailable()- 應用程式可以使用
MediaCodec.getOutputFrame()搭配索引,取得包含更多資訊和 LinearBlock/HardwareBuffer 緩衝區的OutputFrame物件,而不必使用索引呼叫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。這項 API 比 MediaExtractor 更具彈性,可進一步控管媒體擷取功能。
從 USB 裝置擷取音訊
如果應用程式沒有 RECORD_AUDIO 權限,並使用 UsbManager 要求直接存取具備音訊擷取功能的 USB 音訊裝置 (例如 USB 耳機),畫面上會出現新的警示訊息,要求使用者確認授予裝置使用權限。系統會忽略所有「一律使用」選項,因此當應用程式要求存取權時,使用者每次都必須查看警示並授予權限。
為了避免這個行為,應用程式應該要求 RECORD_AUDIO 權限。
同時存取麥克風
Android 11 在 AudioRecord、MediaRecorder 和 AAudioStream 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 驗證狀態 (verstat) 資訊。這項資訊會顯示在來電的通話詳細資料中。
如果 CallScreeningService 具備 READ_CONTACTS 權限,當使用者聯絡人中的號碼有來電或撥出電話時,應用程式就會收到通知。
詳情請參閱「防止來電顯示假冒」。
Open Mobile API 更新
如要瞭解 Android 11 以上版本的 OMAPI 支援,請參閱「Open Mobile API 讀取器支援」。
高效能 VPN
如果應用程式指定目標 API 級別 30 以上,或在 API 級別 29 以上推出的裝置上執行,則可將 IKEv2/IPsec 套用至使用者設定和應用程式型 VPN。
VPN 會在作業系統上原生執行,簡化在應用程式中建立 IKEv2/IPsec VPN 連線所需的程式碼。
個別程序網路存取控管
如要瞭解如何為個別程序啟用網路存取權,請參閱「管理網路用量」。
允許多個已安裝的 Passpoint 設定使用相同的 FQDN
從 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()。
高效能圖形偵錯層注入
應用程式現在可以將外部圖形層 (GLES、Vulkan) 載入原生應用程式程式碼,提供與可進行偵錯應用程式相同的功能,但不會產生效能負擔。使用 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,可查詢是否支援同時使用多個相機,包括前置和後置鏡頭。
如要檢查執行應用程式的裝置是否支援,請使用下列方法:
getConcurrentCameraIds()會傳回攝影機 ID 組合的Set,這些組合可同時串流,並在由相同應用程式程序設定時保證串流組合。isConcurrentSessionConfigurationSupported()會查詢相機裝置是否能同時支援對應的工作階段設定。
更完善支援多影格 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() 方法的時間戳記建立雜湊值。
其他資源
詳情請參閱 Medium 上的文章:全新 Android 11 工具,讓應用程式更具隱私性和穩定性。
資源載入器
Android 11 推出新的 API,可讓應用程式動態擴充資源的搜尋和載入方式。新的 API 類別 ResourcesLoader 和 ResourcesProvider 主要負責提供新功能。兩者搭配使用,即可提供額外的資源和資產,或修改現有資源和資產的值。
ResourcesLoader 物件是容器,可為應用程式的 Resources 執行個體提供 ResourcesProvider 物件。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 擴充了 AssistStructure.ViewNode,並新增 getHintIdEntry() 方法,可傳回檢視畫面提示文字的資源 ID。這個方法會提供與語言代碼無關的值,可用於計算簽章雜湊。
資料集顯示事件
為協助自動填入服務改善建議,Android 11 提供一種方法,可找出自動填入服務提供資料集,但使用者未選取任何資料集的情況。在 Android 11 中,FillEventHistory 會回報新的 TYPE_DATASETS_SHOWN 事件類型。每當自動填入服務向使用者顯示一或多個資料集時,FillEventHistory 就會記錄這類事件。自動填入服務可將這些事件與現有的 TYPE_DATASET_SELECTED 事件搭配使用,判斷使用者是否選取任何提供的自動填入選項。
IME 整合
鍵盤和其他 IME 現在可以在建議列或類似介面中,以內嵌方式顯示自動填入建議,而非在下拉式選單中顯示。為保護密碼和信用卡號碼等機密資訊,系統會向使用者顯示建議,但 IME 不會知道建議內容,直到使用者選取其中一項為止。如要瞭解 IME 和密碼管理工具如何支援這項功能,請參閱「將自動填入功能與鍵盤整合」。
與內容擷取服務共用資料
自 Android 11 起,應用程式可以與裝置的內容擷取服務共用資料。這項功能可讓裝置更輕鬆地提供情境智慧,例如顯示使用者環境中目前播放的歌曲名稱。
如要將應用程式中的資料提供給內容擷取服務,請在 ContentCaptureManager 的執行個體上呼叫 shareData() 方法。如果系統接受資料共用要求,應用程式會收到唯寫檔案描述元,可與內容擷取服務共用。