編輯:關於Android編程
Android N 仍處於活動的開發狀態,但現在您可以將其作為 N Developer Preview 的一部分進行試用。 以下部分重點介紹面向開發者的一些新功能。
請務必查閱行為變更以了解平台變更可能影響您的應用的領域,看看開發者指南,了解有關關鍵功能的更多信息,並下載API 參考以獲取新 API 的詳細信息。
在 Android N 中,我們為該平台引入了一個新的而且非常需要的多任務處理功能 — 多窗口支持。
現在,用戶可以一次在屏幕上打開兩個應用。
多窗口支持為您提供新的吸引用戶方式,特別是在平板電腦和其他更大屏幕的設備上。 您甚至可以在您的應用中啟用拖放,從而使用戶可以方便地將內容拖放到您的應用或從其中拖出內容—這是一個非常好的增強用戶體驗的方式。
向您的應用添加多窗口支持並配置多窗口顯示的處理方式非常簡單。 例如,您可以指定您的 Activity 允許的最小尺寸,從而防止用戶將 Activity 調整到該尺寸以下。 您還可以為應用禁用多窗口顯示,這可確保系統將僅以全屏模式顯示應用。
如需了解詳細信息,請參閱多窗口支持開發者文檔。
在 Android N 中,我們重新設計了通知,使其更易於使用並且速度更快。 部分變更包括:
如需了解如何實現新功能的信息,請參閱通知指南。
在 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 和網絡限制。這意味著用戶即使將設備放入口袋裡也可以省電。
屏幕關閉片刻後,設備在使用電池時,低電耗模式將限制網絡訪問,同時延遲作業和同步。 在短暫的維護時間范圍後,其允許應用訪問網絡,並執行延遲的作業/同步。 打開屏幕或將設備插入電源會使設備退出低電耗模式。
當設備再次處於靜止狀態時,屏幕關閉且使用電池一段時間,低電耗模式針對PowerManager.WakeLock、AlarmManager警報和 GPS/Wi-Fi 掃描應用完整 CPU 和網絡限制。
無論設備是否處於運動狀態,將應用調整到低電耗模式的最佳做法均相同,因此,如果您已更新應用以妥善處理低電耗模式,則一切就緒。 如果不是,請立即開始將應用調整到低電耗模式。
Project Svelte 在持續改善,以最大程度減少生態系統中一系列 Android 設備中系統和應用使用的 RAM。 在 Android N 中,Project Svelte 注重優化在後台中運行應用的方式。
後台處理是大多數應用的一個重要部分。處理得當,可讓您實現非常棒的用戶體驗 — 即時、快速和情境感知。如果處理不得當,後台處理會毫無必要地消耗 RAM(和電池),同時影響其他應用的系統性能。
自 Android 5.0 發布以來,JobScheduler已成為執行後台工作的首選方式,其工作方式有利於用戶。 應用可以在安排作業的同時允許系統基於內存、電源和連接情況進行優化。 JobScheduler 可實現控制和簡潔性,我們想要所有應用都使用它。
另一個非常好的選擇是GCMNetworkManager(Google Play 服務的一部分),其在舊版 Android 中提供類似的作業安排和兼容性。
我們在繼續擴展JobScheduler和GCMNetworkManager,以符合多個用例 — 例如,在 Android N 中,現在,您可以基於內容提供程序中的更改安排後台工作。 同時,我們開始棄用一些較舊的模式,這些模式會降低系統性能,特別是低內存設備的系統性能。
在 Android N 中,我們刪除了三個常用隱式廣播 —CONNECTIVITY_ACTION、ACTION_NEW_PICTURE和ACTION_NEW_VIDEO— 因為這些廣播可能會一次喚醒多個應用的後台進程,同時會耗盡內存和電池。 如果您的應用收到這些廣播,請充分利用 N Developer Preview 以遷移到JobScheduler和相關的 API。
如需了解詳情,請查看後台優化文檔。
在移動設備的整個生命周期,蜂窩數據計劃的成本通常會超出設備本身的成本。 對於許多用戶而言,蜂窩數據是他們想要節省的昂貴資源。
Android N 推出了 Data Saver 模式,這是一項新的系統服務,有助於減少應用使用的蜂窩數據,無論是在漫游,賬單周期即將結束,還是使用少量的預付費數據包。 Data Saver 讓用戶可以控制應用使用蜂窩數據的方式,同時讓開發者打開 Data Saver 時可以提供更多有效的服務。
用戶在Settings中啟用 Data Saver 且設備位於按流量計費的網絡上時,系統屏蔽後台流量消耗,同時指示應用在前台盡可能使用較少的流量 — 例如,通過限制用於流媒體服務的比特率、降低圖片質量、延遲最佳的預緩沖等方法來實現。 用戶可以將特定應用加入白名單以允許後台按流量的流量消耗,即使在打開 Data Saver 時也是如此。
Android N 擴展了ConnectivityManager,以便為應用檢索用戶的 Data Saver 首選項並監控首選項變更提供一種方式。 所有應用均應檢查用戶是否已啟用 Data Saver 並努力限制前台和後台流量消耗。
Android N 將一項新的 3D 渲染 APIVulkan?集成到平台中。就像OpenGL? ES一樣,Vulkan 是 3D 圖形和渲染的一項開放標准,由 Khronos Group 維護。
Vulkan 是完全從零開始設計,以最小化驅動器中的 CPU 開銷,並能讓您的應用更直接地控制 GPU 操作。 Vulkan 還允許多個線程同時執行工作,如命令緩沖區構建,以獲得更好的並行化。
Vulkan 開發工具和庫都已卷入 Android NDK。它們包括:
Vulkan 僅適用於已啟用 Vulkan 硬件的設備上的應用,如 Nexus 5X、Nexus 6P 和 Nexus Player。 我們正在與合作伙伴密切合作,以盡快使 Vulkan 能面向更多的設備。
如需要了解更多信息,請參閱API 文檔。
“快速設置”通常用於直接從通知欄顯示關鍵設置和操作,非常簡單。 在 Android N 中,我們已擴展“快速設置”的范圍,使其更加有用更方便。
我們為額外的“快速設置”圖塊添加了更多空間,用戶可以通過向左或向右滑動跨分頁的顯示區域訪問它們。 我們還讓用戶可以控制顯示哪些“快速設置”圖塊以及顯示的位置 — 用戶可以通過拖放圖塊來添加或移動圖塊。
對於開發者,Android N 還添加了一個新的 API,從而讓您可以定義自己的“快速設置”圖塊,使用戶可以輕松訪問您應用中的關鍵控件和操作。
對於急需或頻繁使用的控件和操作,保留“快速設置”圖塊,且不應將其用作啟動應用的快捷方式。
定義圖塊後,您可以將它們顯示給用戶,用戶可通過拖放將圖塊添加到“快速設置”。
如需創建應用圖塊的更多信息,請參閱可下載的API 參考中的文件android.service.quicksettings.Tile。
Android N 現在支持在平台中進行號碼屏蔽,提供框架 API,讓服務提供商可以維護屏蔽的號碼列表。 默認短信應用、默認手機應用和提供商應用可以對屏蔽的號碼列表進行讀取和寫入操作。 其他應用則無法訪問此列表。
通過使號碼屏蔽成為平台的標准功能,Android 為應用提供一致的方式來支持廣泛的設備上的號碼屏蔽。 應用可以利用的其他優勢包括:
此外,通過 Android 的運營商應用集成表示運營商可以讀取設備上屏蔽的號碼列表,並為用戶執行服務端屏蔽,以阻止不需要的來電和短信通過任何介質(如 VOIP 端點或轉接電話)到達用戶。
如需了解詳細信息,請參閱可下載的API 參考中的android.provider.BlockedNumberContract。
Android N 允許默認的手機應用過濾來電。手機應用執行此操作的方式是實現新的CallScreeningService,該方法允許手機應用基於來電的Call.Details執行大量操作,例如:
如需了解詳細信息,請參閱可下載的API 參考中的android.telecom.CallScreeningService。
Android N 現在允許用戶在設置中選擇多個區域設置,以更好地支持雙語用例。 應用可以使用新的 API 獲取用戶選擇的區域設置,然後為多區域設置用戶提供更成熟的用戶體驗 — 如以多個語言顯示搜索結果,並且不會以用戶了解的語言翻譯網頁。
除多區域設置支持外,Android N 還擴展了用戶可用的語言范圍。 它針對常用語言提供超過 25 種的變體,如英語、西班牙語、法語和阿拉伯語。 它還針對 100 多種新語言添加了部分支持。
應用可以通過調用LocaleList.GetDefault()獲取用戶設置的區域設置列表。 為支持擴展的區域設置數量,Android N 正在改變其解析資源的方式。 請務必使用新的資源解析邏輯測試和驗證您的應用是否能如期運行。
如需有關新資源解析行為和應遵循的最佳做法的更多信息,請參閱多語言支持。
Android N 引入更多表情符號和表情符號相關功能,包括膚色表情符號和支持變量選擇符。 如果您的應用支持表情符號,請遵循以下准則,以便能充分利用這些表情符號相關功能優勢。
Android N 目前在 Android 框架(位於android.icu軟件包下)中提供ICU4JAPI 的子集。 遷移很簡單,主要是需要從com.java.icu命名空間更改為android.icu。 如果您已在您的應用中使用 ICU4J 捆綁包,切換到 Android 框架中提供的android.icuAPI 可以大量節省 APK 大小。
如果要了解有關 Android ICU4J API 的更多信息,請參閱ICU4J 支持。
Android N 添加了框架接口和對 OpenGL ES 3.2 的平台支持,包括:
Android N 上適用於 OpenGL ES 3.2 的框架 API 與GLES32類一起提供。 使用 OpenGL ES 3.2 時,請務必通過
如需了解有關使用 OpenGL ES 的信息,包括如何在運行時檢查設備支持的 OpenGL ES 版本,請參閱OpenGL ES API 指南。
Android N 通過新的錄制 API 添加了從 Android TV 輸入服務錄制和播放內容的功能。 構建在現有時移 API 之上,TV 輸入服務可以控制能夠錄制的渠道數據、保存錄制的會話的方式,同時可通過錄制的內容管理用戶交互。
如需了解詳細信息,請參閱Android TV 錄制 API。
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()方法針對工作挑戰自定義憑據屏幕。
在有工作資料的設備上,用戶可以切換工作模式。工作模式關閉時,管理的用戶臨時關閉,其禁用托管工作資料應用、後台同步和通知。 這包括個人資料所有者應用。 關閉工作模式時,系統顯示永久狀態圖標,以提醒用戶他們無法啟動工作應用。 啟動器指示該工作應用和小組件無法訪問。
設備所有者和個人資料所有者可以確保工作應用始終通過指定的 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_COMPLETEDIntent 激活注冊的組件。 系統確保注冊的設備加密的應用數據在解鎖前可用。 所有其他數據在用戶確認鎖定屏幕憑據進行解密前均不可用。
如需了解詳細信息,請參閱直接啟動。
使用硬件支持的密鑰庫,可更安全地在 Android 設備上創建、存儲和使用加密密鑰。 它們可保護密鑰免受 Linux 內核、潛在的 Android 漏洞的攻擊,也可防止從已取得根權限的設備提取密鑰。
為了讓硬件支持的密鑰庫使用起來更簡單和更安全,Android N 引入了密鑰認證。 應用和關閉的設備可使用密鑰認證以堅決地確定 RSA 或 EC 密鑰對是否受硬件支持、密鑰對的屬性如何,以及其使用和有效性有何限制。
應用和關閉的設備服務可以通過 X.509 認證證書(必須由有效的認證密鑰簽署)請求有關密鑰對的信息。 認證密鑰是一個 ECDSA 簽署密鑰,其在出廠時被注入設備的硬件支持的密鑰庫。因此,有效的認證密鑰簽署的認證證書可確認硬件支持的密鑰庫是否存在,以及該密鑰庫中密鑰對的詳細信息。
為確保設備使用安全的官方 Android 出廠映像,密鑰認證要求設備bootloader向可信執行環境 (TEE)提供以下信息:
如需了解有關硬件支持的密鑰庫功能的詳細信息,請參閱硬件支持的密鑰庫指南。
除密鑰認證外,Android N 還推出了指紋綁定密鑰,在指紋注冊時不會撤銷。
在 Android N 中,通過使用說明性“網絡安全性配置”(而不是使用傳統的易出錯的編程 API(例如,X509TrustManager)),應用可以安全地自定義其安全(HTTPS、TLS)連接的行為,無需任何代碼修改。
支持的功能:
如需了解詳細信息,請參閱網絡安全性配置。
默認情況下,面向 Android N 的應用僅信任系統提供的證書,且不再信任用戶添加的證書頒發機構 (CA)。 如果面向 Android N 的應用希望信任用戶添加的 CA,則應使用網絡安全性配置以指定信任用戶 CA 的方式。
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()。
長期運行的應用的性能可能會顯著波動,因為系統會阻止系統芯片在設備組件達到溫度限制時啟動。 這種波動是建立高性能長期運行應用的應用開發者的移動目標。
為解決這些限制,Android N 包括了“持續性能模式”支持,幫助原始設備制造商 (OEM) 提供關於長期運行應用的設備性能能力的提示。應用開發者可以使用這些提示來根據可預測的一致設備性能水平調整長期應用。
應用開發者只能在 Nexus 6P 設備的 N Developer Preview 上嘗試這項新的 API。 若要使用此功能,為您希望以持續性能模式運行的窗口設置持續性能窗口標記。 使用Window.setSustainedPerformanceMode()方法設置此舉報。 當窗口不再對焦時,系統會自動停用此模式。
Android N 添加了新的 VR 模式的平台支持和優化,以使開發者能為用戶打造高質量移動 VR 體驗。 新版針對開發者提供了大量性能增強特性,包括單一緩沖區渲染以及允許 VR 應用訪問某個專屬的 CPU 核心。在您的應用中,您可以享受到專為 VR 設計的平滑頭部跟蹤和立體聲通知功能。 最重要的是,Android N 的圖形延時非常低。 如需有關構建面向的 Android N 的 VR 應用的完整信息,請參閱面向 Android 的 Google VR SDK。
在 Android N 中,打印服務開發者現在可以公開關於個別打印機和打印作業的其他信息。
在列出各打印機時,打印服務現在可以通過兩種方式來設置按打印機的圖標:
此外,您還可以通過調用PrinterInfo.Builder.setInfoIntent()提供按打印機活動,以顯示其他信息。
您可以通過分別調用android.printservice.PrintJob.setProgress()和android.printservice.PrintJob.setStatus()在打印任務通知中指示打印任務的進度和狀態。
如需有關這些方法的詳細信息,請參閱可下載的API 參考。
FrameMetricsListener API 允許應用監測它的 UI 渲染性能。 API 通過公開流式傳輸 Pub/Sub API 來提供此能力,以傳遞應用當前窗口的幀計時信息。 返回的數據相當於adb shelldumpsys gfxinfo framestats顯示的數據,但不限定於在過去的 120 幀內。
您可以使用 FrameMetricsListener 來衡量生產中的交互級 UI 性能,無需 USB 連接。 API 允許在比adb shell dumpsys gfxinfo更高的粒度上收集數據。 因為系統可以從應用中的特定交互中收集數據,因此更高的粒度變得可行;系統不需要采集關於完整應用性能的全局概要或清除任何全局狀態。 您可以使用這種能力來針對應用的真實使用案例收集性能數據和捕捉 UI 性能回歸。
若要監測一個窗口,實現FrameMetricsListener.onMetricsAvailable()回叫方法,並在窗口上注冊。 如需了解詳細信息,請參閱可下載的API 參考中的FrameMetricsListener類文檔。
API 提供了一個包含計時數據的FrameMetrics對象,其渲染子系統會在一幀長度內報告各種裡程碑。支持的指標有:UNKNOWN_DELAY_DURATION、INPUT_HANDLING_DURATION、ANIMATION_DURATION、LAYOUT_MEASURE_DURATION、DRAW_DURATION、SYNC_DURATION、COMMAND_ISSUE_DURATION、SWAP_BUFFERS_DURATION、TOTAL_DURATION和FIRST_DRAW_FRAME。
在較早的 Android 版本中,您的應用可以使用存儲訪問框架來允許用戶從他們的雲存儲帳戶中選擇文件,如 Google 雲端硬盤。 但是,不能表示沒有直接字節碼表示的文件;每個文件都必須提供一個輸入流。
Android N 在存儲訪問框架中增加了“虛擬文件”的概念。虛擬文件功能可以讓您的DocumentsProvider返回可與ACTION_VIEWIntent 使用的文件 URI,即使它們沒有直接字節碼表示。 Android N 還允許您為用戶文件(虛擬或其他類)提供備用格式。
為獲得您的應用中的虛擬文件的 URI,首先您應創建一個Intent以打開文件選擇器 UI。 由於應用不能使用openInputStream()方法來直接打開一個虛擬文件,因此如果您包括了CATEGORY_OPENABLE類別,您的應用不會收到任何虛擬文件。
在用戶選擇之後,系統調用onActivityResult()方法。 您的應用可以檢索虛擬文件的URI,並得到一個輸入流,這表現在以下片段中的代碼。
// Other Activity code ... final static private int REQUEST_CODE = 64; // We listen to the OnActivityResult event to respond to the user's selection. @Override public void 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); } }
本篇文章介紹了android仿愛奇藝加載動畫實例,具體代碼如下:效果圖:用到的知識點: Path ValueAnimator如果對Path和ValueAnimator
因為直接使用系統vedioview,底部的MediaController布局有點不好看,尤其是進度條,不能實現辦半屏與全屏的切換,自己網上看了下別人的資料,整理了下,做以
什麼叫創建圖片的副本? 因為我們直接從BitmapFactory取出來的圖片是可讀的,是不可以修改的。 假設用戶想修改這張圖片,一般是先根據原圖在內存中創建和原圖一模一樣
從ImageButton這個字面意思上來看,它是一個圖片按鈕,那麼我們就可以使用它做一個我們想要的圖片按鈕了,但是我們在實際使用的過程當中,就會發現該按鈕的使用並沒有想像