1. 程式人生 > >Android 7.0 API 概述

Android 7.0 API 概述

Android N for Developers

Android N 仍處於活動的開發狀態,但現在您可以將其作為 N Developer Preview 的一部分進行試用。 以下部分重點介紹面向開發者的一些新功能。

請務必查閱行為變更以瞭解平臺變更可能影響您的應用的領域,看看開發者指南,瞭解有關關鍵功能的更多資訊,並下載 API 參考以獲取新 API 的詳細資訊。

多視窗支援

在 Android N 中,我們為該平臺引入了一個新的而且非常需要的多工處理功能 — 多視窗支援。

現在,使用者可以一次在螢幕上開啟兩個應用。

  • 在執行 Android N 的手機和平板電腦上,使用者可以並排執行兩個應用,或者處於分屏模式時一個應用位於另一個應用之上。 使用者可以通過拖動兩個應用之間的分隔線來調整應用。
  • 在 Android TV 裝置上,應用可以將自身置於畫中畫模式,從而讓它們可以在使用者瀏覽或與其他應用互動時繼續顯示內容。

圖 1. 在分屏模式下執行的應用。

多視窗支援為您提供新的吸引使用者方式,特別是在平板電腦和其他更大螢幕的裝置上。 您甚至可以在您的應用中啟用拖放,從而使使用者可以方便地將內容拖放到您的應用或從其中拖出內容—這是一個非常好的增強使用者體驗的方式。

向您的應用新增多視窗支援並配置多視窗顯示的處理方式非常簡單。 例如,您可以指定您的 Activity 允許的最小尺寸,從而防止使用者將 Activity 調整到該尺寸以下。 您還可以為應用禁用多視窗顯示,這可確保系統將僅以全屏模式顯示應用。

如需瞭解詳細資訊,請參閱多視窗支援開發者文件。

通知增強功能

在 Android N 中,我們重新設計了通知,使其更易於使用並且速度更快。 部分變更包括:

  • 模板更新:我們正在更新通知模板,新強調了英雄形象和化身。 開發者將能夠充分利用新模板,只需進行少量的程式碼調整。
  • 訊息樣式自定義:您可以自定義更多與您的使用 MessageStyle 類的通知相關的使用者介面標籤。 您可以配置訊息、會話標題和內容檢視。
  • 捆綁通知:系統可以將訊息組合在一起(例如,按訊息主題)並顯示組。 使用者可以適當地進行 Dismiss 或 Archive 等操作。 如果您已實現 Android Wear 的通知,那麼您已經很熟悉此模型。
  • 直接回復:對於實時通訊應用,Android 系統支援內聯回覆,以便使用者可以直接在通知介面中快速回復簡訊。
  • 自定義檢視:兩個新的 API 讓您在通知中使用自定義檢視時可以充分利用系統裝飾元素,如通知標題和操作。

圖 2. 繫結的通知和直接回復。

如需瞭解如何實現新功能的資訊,請參閱通知指南。

個人資料指導的 JIT/AOT 編譯

在 Android N 中,我們添加了 Just in Time (JIT) 編譯器,對 ART 進行程式碼分析,讓它可以在應用執行時持續提升 Android 應用的效能。 JIT 編譯器對 Android 執行元件當前的 Ahead of Time (AOT) 編譯器進行了補充,有助於提升執行時效能,節省儲存空間,加快應用更新和系統更新速度。

個人資料指導的編譯讓 Android 執行元件能夠根據應用的實際使用以及裝置上的情況管理每個應用的 AOT/JIT 編譯。 例如,Android 執行元件維護每個應用的熱方法的個人資料,並且可以預編譯和快取這些方法以實現最佳效能。 對於應用的其他部分,在實際使用之前不會進行編譯。

除提升應用的關鍵部分的效能外,個人資料指導的編譯還有助於減少整個 RAM 佔用,包括關聯的二進位制檔案。 此功能對於低記憶體裝置非常尤其重要。

Android 執行元件在管理個人資料指導的編譯時,可最大程度降低對裝置電池的影響。 僅當裝置處於空閒狀態和充電時才進行編譯,從而可以通過提前執行該工作節約時間和省電。

快速的應用安裝路徑

Android 執行元件的 JIT 編譯器最實際的好處之一是應用安裝和系統更新的速度。 即使在 Android 6.0 中需要幾分鐘進行優化和安裝的大型應用,現在只需幾秒鐘就可以完成安裝。 系統更新也變得更快,因為省去了優化步驟。

隨時隨地低電耗模式...

Android 6.0 推出了低電耗模式,即裝置處於空閒狀態時,通過推遲應用的 CPU 和網路活動以實現省電目的的系統模式,例如,裝置放在桌上或抽屜裡時。

現在,在 Android N 中,低電耗模式又前進了一步,隨時隨地可以省電。只要螢幕關閉了一段時間,且裝置未插入電源,低電耗模式就會對應用使用熟悉的 CPU 和網路限制。這意味著使用者即使將裝置放入口袋裡也可以省電。

圖 3. 低電耗模式現在應用限制以延長電池壽命,即使裝置未處於靜止狀態。

螢幕關閉片刻後,裝置在使用電池時,低電耗模式將限制網路訪問,同時延遲作業和同步。 在短暫的維護時間範圍後,其允許應用訪問網路,並執行延遲的作業/同步。 開啟螢幕或將裝置插入電源會使裝置退出低電耗模式。

當裝置再次處於靜止狀態時,螢幕關閉且使用電池一段時間,低電耗模式針對 、 警報和 GPS/Wi-Fi 掃描應用完整 CPU 和網路限制。

無論裝置是否處於運動狀態,將應用調整到低電耗模式的最佳做法均相同,因此,如果您已更新應用以妥善處理低電耗模式,則一切就緒。 如果不是,請立即開始將應用調整到低電耗模式

Project Svelte:後臺優化

Project Svelte 在持續改善,以最大程度減少生態系統中一系列 Android 裝置中系統和應用使用的 RAM。 在 Android N 中,Project Svelte 注重優化在後臺中執行應用的方式。

後臺處理是大多數應用的一個重要部分。處理得當,可讓您實現非常棒的使用者體驗 — 即時、快速和情境感知。如果處理不得當,後臺處理會毫無必要地消耗 RAM(和電池),同時影響其他應用的系統性能。

自 Android 5.0 釋出以來, 已成為執行後臺工作的首選方式,其工作方式有利於使用者。 應用可以在安排作業的同時允許系統基於記憶體、電源和連線情況進行優化。 JobScheduler 可實現控制和簡潔性,我們想要所有應用都使用它。

另一個非常好的選擇是 GCMNetworkManager(Google Play 服務的一部分),其在舊版 Android 中提供類似的作業安排和相容性。

我們在繼續擴充套件 JobScheduler 和 GCMNetworkManager,以符合多個用例 — 例如,在 Android N 中,現在,您可以基於內容提供程式中的更改安排後臺工作。 同時,我們開始棄用一些較舊的模式,這些模式會降低系統性能,特別是低記憶體裝置的系統性能。

在 Android N 中,我們刪除了三個常用隱式廣播 — 、 和  — 因為這些廣播可能會一次喚醒多個應用的後臺程序,同時會耗盡記憶體和電池。 如果您的應用收到這些廣播,請充分利用 N Developer Preview 以遷移到 JobScheduler 和相關的 API。

如需瞭解詳情,請檢視後臺優化文件。

Data Saver

圖 4. 設定中的 Data Saver

在移動裝置的整個生命週期,蜂窩資料計劃的成本通常會超出裝置本身的成本。 對於許多使用者而言,蜂窩資料是他們想要節省的昂貴資源。

Android N 推出了 Data Saver 模式,這是一項新的系統服務,有助於減少應用使用的蜂窩資料,無論是在漫遊,賬單週期即將結束,還是使用少量的預付費資料包。 Data Saver 讓使用者可以控制應用使用蜂窩資料的方式,同時讓開發者開啟 Data Saver 時可以提供更多有效的服務。

使用者在 Settings 中啟用 Data Saver 且裝置位於按流量計費的網路上時,系統遮蔽後臺流量消耗,同時指示應用在前臺儘可能使用較少的流量 — 例如,通過限制用於流媒體服務的位元率、降低圖片質量、延遲最佳的預緩衝等方法來實現。 使用者可以將特定應用加入白名單以允許後臺按流量的流量消耗,即使在開啟 Data Saver 時也是如此。

Vulkan API

Android N 將一項新的 3D 渲染 API Vulkan™ 整合到平臺中。就像 OpenGL™ ES 一樣,Vulkan 是 3D 圖形和渲染的一項開放標準,由 Khronos Group 維護。

Vulkan 是完全從零開始設計,以最小化驅動器中的 CPU 開銷,並能讓您的應用更直接地控制 GPU 操作。 Vulkan 還允許多個執行緒同時執行工作,如命令緩衝區構建,以獲得更好的並行化。

Vulkan 開發工具和庫都已捲入 Android NDK。它們包括:

  • 驗證層(除錯庫)
  • SPIR-V 著色程式編譯器
  • SPIR-V 執行時著色器編譯庫

Vulkan 僅適用於已啟用 Vulkan 硬體的裝置上的應用,如 Nexus 5X、Nexus 6P 和 Nexus Player。 我們正在與合作伙伴密切合作,以儘快使 Vulkan 能面向更多的裝置。

如需要了解更多資訊,請參閱 API 文件

Quick Settings Tile API

圖 5. 通知欄中的快速設定圖塊。

“快速設定”通常用於直接從通知欄顯示關鍵設定和操作,非常簡單。 在 Android N 中,我們已擴充套件“快速設定”的範圍,使其更加有用更方便。

我們為額外的“快速設定”圖塊添加了更多空間,使用者可以通過向左或向右滑動跨分頁的顯示區域訪問它們。 我們還讓使用者可以控制顯示哪些“快速設定”圖塊以及顯示的位置 — 使用者可以通過拖放圖塊來新增或移動圖塊。

對於開發者,Android N 還添加了一個新的 API,從而讓您可以定義自己的“快速設定”圖塊,使使用者可以輕鬆訪問您應用中的關鍵控制元件和操作。

對於急需或頻繁使用的控制元件和操作,保留“快速設定”圖塊,且不應將其用作啟動應用的快捷方式。

定義圖塊後,您可以將它們顯示給使用者,使用者可通過拖放將圖塊新增到“快速設定”。

如需建立應用圖塊的更多資訊,請參閱可下載的 API 參考中的檔案android.service.quicksettings.Tile

號碼遮蔽

Android N 現在支援在平臺中進行號碼遮蔽,提供框架 API,讓服務提供商可以維護遮蔽的號碼列表。 預設簡訊應用、預設手機應用和提供商應用可以對遮蔽的號碼列表進行讀取和寫入操作。 其他應用則無法訪問此列表。

通過使號碼遮蔽成為平臺的標準功能,Android 為應用提供一致的方式來支援廣泛的裝置上的號碼遮蔽。 應用可以利用的其他優勢包括:

  • 還會遮蔽已遮蔽的來電號碼發出的簡訊
  • 通過 Backup & Restore(備份和還原)功能可以跨重置和裝置保留遮蔽的號碼
  • 多個應用可以使用相同的遮蔽號碼列表

此外,通過 Android 的運營商應用整合表示運營商可以讀取裝置上遮蔽的號碼列表,併為使用者執行服務端遮蔽,以阻止不需要的來電和簡訊通過任何介質(如 VOIP 端點或轉接電話)到達使用者。

如需瞭解詳細資訊,請參閱可下載的 API 參考中的 android.provider.BlockedNumberContract

來電過濾

Android N 允許預設的手機應用過濾來電。手機應用執行此操作的方式是實現新的 CallScreeningService,該方法允許手機應用基於來電的 執行大量操作,例如:

  • 拒絕來電
  • 不允許來電到達通話記錄
  • 不向使用者顯示來電通知

如需瞭解詳細資訊,請參閱可下載的 API 參考中的 android.telecom.CallScreeningService

多區域設定支援、多語言

Android N 現在允許使用者在設定中選擇多個區域設定,以更好地支援雙語用例。 應用可以使用新的 API 獲取使用者選擇的區域設定,然後為多區域設定使用者提供更成熟的使用者體驗 — 如以多個語言顯示搜尋結果,並且不會以使用者瞭解的語言翻譯網頁。

除多區域設定支援外,Android N 還擴充套件了使用者可用的語言範圍。 它針對常用語言提供超過 25 種的變體,如英語、西班牙語、法語和阿拉伯語。 它還針對 100 多種新語言添加了部分支援。

應用可以通過呼叫 LocaleList.GetDefault() 獲取使用者設定的區域設定列表。 為支援擴充套件的區域設定數量,Android N 正在改變其解析資源的方式。 請務必使用新的資源解析邏輯測試和驗證您的應用是否能如期執行。

如需有關新資源解析行為和應遵循的最佳做法的更多資訊,請參閱多語言支援

新增的表情符號

Android N 引入更多表情符號和表情符號相關功能,包括膚色表情符號和支援變數選擇符。 如果您的應用支援表情符號,請遵循以下準則,以便能充分利用這些表情符號相關功能優勢。

  • 在插入之前,檢查裝置是否包含表情符號。 若要檢查系統字型中有哪些表情符號,使用  方法。
  • 檢查表情符號是否支援變數選擇符。 變數選擇符使您能夠呈現一些彩色或黑白的表情符號。 在移動裝置上,應用應呈現彩色的表情符號,而不是黑白的。但是,如果您的應用顯示嵌入在文字中的表情符號,那應使用黑白變數。 若要確定表情符號是否有變數,使用變數選擇符。 如需有關支援變數的字元的完整清單,請參閱變數的 Unicode 文件中的 表情符號變數序列部分。
  • 檢查表情符號是否支援膚色。Android N 允許使用者按照他們的喜好修改表情符號呈現的膚色。 鍵盤應用應為有多個膚色的表情符號提供視覺化的指示,並應允許使用者選擇他們喜歡的膚色。 若要確定哪些系統表情符號有膚色修改器,使用  方法。 您可以通過讀取 Unicode 文件來確定哪些表情符號使用膚色。

Android 中的 ICU4J API

Android N 目前在 Android 框架(位於 android.icu 軟體包下)中提供 ICU4J API 的子集。 遷移很簡單,主要是需要從 com.java.icu 名稱空間更改為android.icu。 如果您已在您的應用中使用 ICU4J 捆綁包,切換到 Android 框架中提供的 android.icu API 可以大量節省 APK 大小。

如果要了解有關 Android ICU4J API 的更多資訊,請參閱 ICU4J 支援

OpenGL™ ES 3.2 API

Android N 添加了框架介面和對 OpenGL ES 3.2 的平臺支援,包括:

  • 來自 Android 擴充套件包 (AEP) 的所有擴充套件(EXT_texture_sRGB_decode 除外)。
  • 針對 HDR 的浮點幀緩衝和延遲著色。
  • BaseVertex 繪圖呼叫可實現更好的批處理和流媒體服務。
  • 強大的緩衝區訪問控制可減少 WebGL 開銷。

Android N 上適用於 OpenGL ES 3.2 的框架 API 與 GLES32 類一起提供。 使用 OpenGL ES 3.2 時,請務必通過 <uses-feature> 標記和android:glEsVersion 屬性在您的清單中宣告要求。

如需瞭解有關使用 OpenGL ES 的資訊,包括如何在執行時檢查裝置支援的 OpenGL ES 版本,請參閱 OpenGL ES API 指南

Android TV 錄製

Android N 通過新的錄製 API 添加了從 Android TV 輸入服務錄製和播放內容的功能。 構建在現有時移 API 之上,TV 輸入服務可以控制能夠錄製的渠道資料、保存錄制的會話的方式,同時可通過錄制的內容管理使用者互動。

Android for Work

Android for Work 針對執行 Android N 的裝置添加了許多新功能和 API。部分重要內容如下— 有關變更的完整列表,請參閱 Android for Work 更新

工作資料安全性挑戰

面向 N SDK 的個人資料所有者可以為在工作資料中執行的應用指定單獨的安全性挑戰。 當用戶嘗試開啟任何工作應用時將顯示工作挑戰。 成功完成安全性挑戰可解鎖工作資料並將其解密(如果需要)。 對於個人資料所有者,ACTION_SET_NEW_PASSWORD 提示使用者設定工作挑戰,ACTION_SET_NEW_PARENT_PROFILE_PASSWORD 提示使用者設定裝置鎖。

個人資料所有者可以使用 setPasswordQuality()setPasswordMinimumLength() 和相關方法針對工作挑戰設定不同的密碼策略(例如,PIN 必須多長,或是否可以使用指紋解鎖個人資料)。 個人資料所有者還可以使用新的 getParentProfileInstance() 方法返回的 DevicePolicyManager 例項設定裝置鎖定。 此外,個人資料所有者可以使用新的 setOrganizationColor() 和 setOrganizationName() 方法針對工作挑戰自定義憑據螢幕。

關閉工作

在有工作資料的裝置上,使用者可以切換工作模式。工作模式關閉時,管理的使用者臨時關閉,其禁用託管工作資料應用、後臺同步和通知。 這包括個人資料所有者應用。 關閉工作模式時,系統顯示永久狀態圖示,以提醒使用者他們無法啟動工作應用。 啟動器指示該工作應用和小元件無法訪問。

Always on VPN

裝置所有者和個人資料所有者可以確保工作應用始終通過指定的 VPN 連線。 系統在裝置啟動後自動啟動該 VPN。

新的 DevicePolicyManager 方法為 setAlwaysOnVpnPackage() 和 getAlwaysOnVpnPackage()

由於 VPN 服務無需應用互動即可由系統直接繫結,因此,VPN 客戶端必須針對 Always on VPN 處理新的入口點。 和以前一樣,由與操作匹配的 Intent 過濾器將服務指示給系統。android.net.VpnService

使用者還可以使用 Settings>More>Vpn 在主要使用者中手動設定實現 VPNService 方法的 Always on VPN 客戶端。

自定義配置

應用可以用企業顏色和徽標來自定義個人資料所有者和裝置所有者配置流程。DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR 自定義流程顏色。DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI 用企業徽標自定義流程。

無障礙增強功能

Android N 現在針對新的裝置設定直接在歡迎螢幕上提供“Vision Settings”。 這使使用者可以更容易發現和配置他們裝置上的無障礙功能,包括放大手勢、字型大小、顯示屏尺寸和 TalkBack。

隨著這些無障礙功能更為突出,在啟用這些功能後,您的使用者更可能試用您的應用。 請務必提前啟用這些設定測試您的應用。 您可以通過 Settings > Accessibility 啟用它們。

還是在 Android N 中,無障礙服務現在可以幫助具有動作障礙的使用者觸控式螢幕幕。 全新的 API 允許使用人臉追蹤、眼球追蹤、點掃描等功能構建服務,以滿足這些使用者的需求。

如需瞭解詳細資訊,請參閱可下載的 API 參考 中的 android.accessibilityservice.GestureDescription 

直接啟動

直接啟動可以縮短裝置啟動時間,讓註冊的應用具有有限的功能,即使在意外重啟後。例如,如果當用戶睡覺時加密的裝置重啟,那麼註冊的警報、訊息和來電現在可以和往常一樣繼續通知使用者。 這也意味著重啟後無障礙服務會立即可用。

在 Android N 中,直接啟動充分利用基於檔案的加密,以針對系統和應用資料啟用細化的加密策略。為系統和應用資料。系統針對選定的系統資料和顯式註冊的應用資料使用裝置加密的儲存。 預設情況下,憑據加密的儲存可用於所有其他系統資料、使用者資料、應用及應用資料。

啟動時,系統在受限的模式中啟動,僅訪問裝置加密的資料,不會對應用或資料進行常規訪問。如果您有想要在此模式下執行的元件,您可以通過在清單檔案中設定標記註冊它們。 重啟後,系統通過廣播 LOCKED_BOOT_COMPLETED Intent 啟用註冊的元件。 系統確保註冊的裝置加密的應用資料在解鎖前可用。 所有其他資料在使用者確認鎖定螢幕憑據進行解密前均不可用。

如需瞭解詳細資訊,請參閱直接啟動

金鑰認證

使用硬體支援的金鑰庫,可更安全地在 Android 裝置上建立、儲存和使用加密金鑰。 它們可保護金鑰免受 Linux 核心、潛在的 Android 漏洞的攻擊,也可防止從已取得根許可權的裝置提取金鑰。

為了讓硬體支援的金鑰庫使用起來更簡單和更安全,Android N 引入了金鑰認證。 應用和關閉的裝置可使用金鑰認證以堅決地確定 RSA 或 EC 金鑰對是否受硬體支援、金鑰對的屬性如何,以及其使用和有效性有何限制。

應用和關閉的裝置服務可以通過 X.509 認證證書(必須由有效的認證金鑰簽署)請求有關金鑰對的資訊。 認證金鑰是一個 ECDSA 簽署金鑰,其在出廠時被注入裝置的硬體支援的金鑰庫。因此,有效的認證金鑰簽署的認證證書可確認硬體支援的金鑰庫是否存在,以及該金鑰庫中金鑰對的詳細資訊。

為確保裝置使用安全的官方 Android 出廠映像,金鑰認證要求裝置 bootloader 向可信執行環境 (TEE) 提供以下資訊:

  • 裝置上安裝的作業系統版本和補丁級別
  • 驗證的啟動公鑰和鎖定狀態。

如需瞭解有關硬體支援的金鑰庫功能的詳細資訊,請參閱硬體支援的金鑰庫指南。

除金鑰認證外,Android N 還推出了指紋繫結金鑰,在指紋註冊時不會撤銷。

網路安全性配置

在 Android N 中,通過使用說明性“網路安全性配置”(而不是使用傳統的易出錯的程式設計 API(例如,X509TrustManager)),應用可以安全地自定義其安全(HTTPS、TLS)連線的行為,無需任何程式碼修改。

支援的功能:

  • 自定義信任錨。讓應用可以針對安全連線自定義哪些證書頒發機構 (CA) 值得信賴。 例如,信任特定的自簽署證書或限制應用信任的公共 CA 集。
  • 僅除錯重寫。讓應用開發者可以安全除錯其應用的安全連線,而不會增加安裝基礎的風險。
  • 明文流量選擇退出。讓應用可以防止自身意外使用明文流量。
  • 證書固定。這是一項高階功能,讓應用可以針對安全連線限制哪些伺服器金鑰受信任。

如需瞭解詳細資訊,請參閱網路安全性配置

預設受信任的證書頒發機構

預設情況下,面向 Android N 的應用僅信任系統提供的證書,且不再信任使用者新增的證書頒發機構 (CA)。 如果面向 Android N 的應用希望信任使用者新增的 CA,則應使用網路安全性配置以指定信任使用者 CA 的方式。

APK signature scheme v2

Android N 引入一項新的應用簽名方案 APK Signature Scheme v2,它能提供更快的應用安裝時間和更多針對未授權 APK 檔案更改的保護。 在預設情況下,Android Studio 2.2 和 Android Gradle 2.2 外掛會使用 APK Signature Scheme v2 和傳統簽名方案來簽署您的應用。

雖然我們建議您對您的應用採用 APK Signature Scheme v2,但這項新方案並非強制性的。 如果您的應用在使用 APK Signature Scheme v2 時不能正確構建,您可以停用這項新方案。 禁用過程會導致 Android Studio 2.2 和 Android Gradle 2.2 外掛僅使用傳統簽名方案來簽署您的應用。 若要僅用傳統方案簽署,開啟多層 build.gradle 檔案,然後將行 v2SigningEnabled false 新增到您的版本簽名配置中:

  android {...
    defaultConfig {...}
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"v2SigningEnabled false}}}

注意:如果您使用 APK Signature Scheme v2 簽署您的應用,並對應用進行了進一步更改,則應用的簽名將無效。 出於這個原因,請在使用 APK Signature Scheme v2 之前、而非之後使用 zipalign 等工具。

如需更多資訊,請閱讀介紹如何在 Android Studio 中簽署一項應用以及如何使用 Android Gradle 外掛來為簽署應用配置構建檔案

作用域目錄訪問

在 Android N 中,應用可以使用新的 API 請求訪問特定的外部儲存目錄,包括可移動媒體上的目錄,如 SD 卡。 新 API 大大簡化了應用訪問標準外部儲存目錄的方式,如 Pictures 目錄。 應用(如照片應用)可以使用這些 API(而不是使用 READ_EXTERNAL_STORAGE),其授予所有儲存目錄的訪問許可權或儲存訪問框架,從而讓使用者可以導航到目錄。

此外,新的 API 簡化了使用者嚮應用授予外部儲存訪問許可權的步驟。 當您使用新的 API 時,系統使用一個簡單的許可權 UI,其清楚地詳細介紹應用正在請求訪問的目錄。

如需瞭解詳細資訊,請參閱作用域目錄訪問開發者文件。

鍵盤快捷鍵輔助工具

在 Android N 中,使用者可以按“Alt + /”觸發“鍵盤快捷鍵”螢幕,它會顯示的系統和對焦的應用中可用的所有快捷鍵。 這些是從應用選單(如可用)中自動檢索到的,但開發者可以提供自己的螢幕微調快捷鍵。 您可以通過重寫新 Activity.onProvideKeyboardShortcuts() 的方法來進行這項操作,如可下載的 API 參考 中所述。

若要在您的應用程式的任何地方觸發鍵盤快捷鍵輔助工具,為相關活動呼叫 Activity.requestKeyboardShortcutsHelper()

持續效能 API

長期執行的應用的效能可能會顯著波動,因為系統會阻止系統晶片在裝置元件達到溫度限制時啟動。 這種波動是建立高效能長期執行應用的應用開發者的移動目標。

為解決這些限制,Android N 包括了“持續效能模式”支援,幫助原始裝置製造商 (OEM) 提供關於長期執行應用的裝置效能能力的提示。 應用開發者可以使用這些提示來根據可預測的一致裝置效能水平調整長期應用。

應用開發者只能在 Nexus 6P 裝置的 N Developer Preview 上嘗試這項新的 API。 若要使用此功能,為您希望以持續效能模式執行的視窗設定持續效能視窗標記。 使用 Window.setSustainedPerformanceMode() 方法設定此舉報。 當視窗不再對焦時,系統會自動停用此模式。

VR 支援

Android N 添加了新的 VR 模式的平臺支援和優化,以使開發者能為使用者打造高質量移動 VR 體驗。 新版針對開發者提供了大量效能增強特性,包括單一緩衝區渲染以及允許 VR 應用訪問某個專屬的 CPU 核心。在您的應用中,您可以享受到專為 VR 設計的平滑頭部跟蹤和立體聲通知功能。 最重要的是,Android N 的圖形延時非常低。 如需有關構建面向的 Android N 的 VR 應用的完整資訊,請參閱 面向 Android 的 Google VR SDK

在 Android N 中,列印服務開發者現在可以公開關於個別印表機和列印作業的其他資訊。

在列出各印表機時,列印服務現在可以通過兩種方式來設定按印表機的圖示:

  • 您可以通過呼叫 PrinterInfo.Builder.setResourceIconId() 設定源於資源 ID 的圖示
  • 您可以通過呼叫 PrinterInfo.Builder.setHasCustomPrinterIcon(),並針對使用android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon() 請求圖示的情況設定回撥來顯示源自網路的圖示

此外,您還可以通過呼叫 PrinterInfo.Builder.setInfoIntent() 提供按印表機活動,以顯示其他資訊。

您可以通過分別呼叫 android.printservice.PrintJob.setProgress() 和 android.printservice.PrintJob.setStatus() 在列印任務通知中指示列印任務的進度和狀態。

如需有關這些方法的詳細資訊,請參閱可下載的 API 參考

FrameMetricsListener API

FrameMetricsListener API 允許應用監測它的 UI 渲染效能。 API 通過公開流式傳輸 Pub/Sub API 來提供此能力,以傳遞應用當前視窗的幀計時資訊。 返回的資料相當於 adb shell dumpsys gfxinfo framestats 顯示的資料,但不限定於在過去的 120 幀內。

您可以使用 FrameMetricsListener 來衡量生產中的互動級 UI 效能,無需 USB 連線。 API 允許在比 adb shell dumpsys gfxinfo 更高的粒度上收集資料。 因為系統可以從應用中的特定互動中收集資料,因此更高的粒度變得可行;系統不需要採集關於完整應用效能的全域性概要或清除任何全域性狀態。 您可以使用這種能力來針對應用的真實使用案例收集效能資料和捕捉 UI 效能迴歸。

若要監測一個視窗,實現 FrameMetricsListener.onMetricsAvailable() 回叫方法,並在視窗上註冊。 如需瞭解詳細資訊,請參閱可下載的 API 參考 中的 FrameMetricsListener 類文件。

API 提供了一個包含計時資料的 FrameMetrics 物件,其渲染子系統會在一幀長度內報告各種里程碑。支援的指標有:UNKNOWN_DELAY_DURATIONINPUT_HANDLING_DURATIONANIMATION_DURATIONLAYOUT_MEASURE_DURATIONDRAW_DURATIONSYNC_DURATIONCOMMAND_ISSUE_DURATIONSWAP_BUFFERS_DURATIONTOTAL_DURATION和 FIRST_DRAW_FRAME

虛擬檔案

在較早的 Android 版本中,您的應用可以使用儲存訪問框架來允許使用者從他們的雲端儲存帳戶中選擇檔案,如 Google 雲端硬碟。 但是,不能表示沒有直接位元組碼錶示的檔案;每個檔案都必須提供一個輸入流。

Android N 在儲存訪問框架中增加了“虛擬檔案”的概念。 虛擬檔案功能可以讓您的  返回可與 Intent 使用的檔案 URI,即使它們沒有直接位元組碼錶示。 Android N 還允許您為使用者檔案(虛擬或其他類)提供備用格式。

為獲得您的應用中的虛擬檔案的 URI,首先您應建立一個  以開啟檔案選擇器 UI。 由於應用不能使用  方法來直接開啟一個虛擬檔案,因此如果您包括了  類別,您的應用不會收到任何虛擬檔案。

在使用者選擇之後,系統呼叫  方法。 您的應用可以檢索虛擬檔案的URI,並得到一個輸入流,這表現在以下片段中的程式碼。

// Other Activity code ...finalstaticprivateint REQUEST_CODE =64;// We listen to the OnActivityResult event to respond to the user's selection.@Overridepublicvoid onActivityResult(int requestCode,int resultCode,Intent resultData){try{if(requestCode == REQUEST_CODE &&
            resultCode ==Activity.RESULT_OK){Uri uri =null;if(resultData !=null){
                uri = resultData.getData();ContentResolver resolver = getContentResolver();// Before attempting to coerce a file into a MIME type,// check to see what alternative MIME types are available to// coerce this file into.String[] streamTypes =
                  resolver.getStreamTypes(uri,"*/*");AssetFileDescriptor descriptor =
                    resolver.openTypedAssetFileDescriptor(
                        uri,
                        streamTypes[0],null);// Retrieve a stream to the virtual file.InputStream inputStream = descriptor.createInputStream();}}}catch(Exception ex){Log.e("EXCEPTION","ERROR: ", ex);}}

如需有關訪問使用者檔案的更多資訊,請參閱 儲存訪問框架指南