搶先看!Android11超詳細適配攻略!


引言

近期,Google 發布了 Android 11的平台穩定版本。Android 11 將在確保用戶隱私安全的前提下,更好地讓用戶暢享最新科技。

下圖是 Android 11 發布整體流程的時間線:


個推深耕開發者領域,一直緊跟行業發展趨勢,對Android 11的有關更新展開了深入研究。本文將從分區存儲、應用包可見性、權限變化和新功能四個方面來談談 Android 11 新特性,以幫助開發者更快速、更便捷地上手適配Android新系統。

作者| 個推高級安卓開發工程師 一七

正文

分區存儲

Android 10之前,外部存儲區的內容主要以兩種形式存在,一種是由應用的包名命名,歸屬於特定應用目錄下的內容,另一種是存儲在公共存儲區域的內容。

在Android 10 中,Google首次引入了分區存儲,將公共區域划分成了不同的集合,並且在媒體文件和其他文檔之間建立了清楚的分割。經過划分之后應用不可以隨意訪問外部存儲區中的文件,而只能訪問媒體文件。如果想訪問包含更多細節數據的其他文檔,應用專門向用戶申請有關文檔的訪問權限。

分區存儲是需要以 Android 10 為目標平台的,系統默認強制執行。如果在 AndroidManifest 中添加了 requestLegacyExternalStorage=true 標志,就可以不受此限制。但是當 target API 更新為 30 后,系統會忽略該配置。

如果有數據需要遷移,可以在 AndroidManifest 中將 preserveLegacyExternalStorage 屬性設為 true ,當用戶升級到以 Android 11 為目標平台時,這個配置就會生效。具體而言,這個配置在用戶重新安裝該應用前都是有效的。


針對以 Android 11 為目標平台的應用 (targetSdkVersion = 30) ,WRITEEXTENRNALSTORAGE 和 WRITEMEDIASTORAGE 不再提供其他任何訪問權限 。

某些應用的核心功能可能需要訪問大量的文件,例如文件管理操作、備份和恢復操作等等,此時就需要申請 MANAGEEXTERNALSTORAGE 權限。我們可以通過使用 ACTIONMANAGEALLFILESACCESS_PERMISSION intent 操作將用戶引導至一個系統設置頁面,讓用戶為應用授予所有文件的管理權限。

應用包可見性

在 Android 11 之前,我們可以通過 PackageManager.getInstalledPackages(0) 獲取其他所有應用的包名等信息。


Android 11 為了增加安全性,更好地保護用戶的隱私,對應用包的可見性做出了一些改動。

當 targetSdkVersion 為 30 時,如果我們用getPackageInfo(“another.app”,0) 獲取其他應用包信息時 ,會出現 NameNotFoundException 的異常。

我們可以在 AndroidMainfest 中添加 來適配特定的使用場景:(該配置相當於是添加應用白名單)

  1. 已知想獲取的包名:


2. 查詢一組具有特定用途的應用或與其交互:

  1. 對於一些特殊應用,想要獲取所有包名信息:

權限變化


在 Android 11 中,系統為用戶的私人數據提供了更多可供選擇的授權方式,應用也加大了后台對位置的訪問權限限制。

對應攝像頭、位置信息和麥克風這幾個數據類型,用戶可以授予一次性的臨時訪問權限。

只要是在Android 11 上,該限制都會生效,如下圖:

這個一次性權限的生效周期指的是:

  1. 應用 Activity 可見期間
  2. 應用轉為后台后的短時間內
  3. 前台服務存活期間
  4. 當用戶撤銷單次授權后,應用進程退出,再次打開之后需要對應用進行重新授權期間

位置權限

在Android10 之前,我們通過ACCESSCOARRSELOCATION 或 ACCESSFINELOCATION(精確位置) 配置即可申請前后台位置權限。

Android 11將位置權限分為前台和后台兩種權限。前文說的主要是前台權限,授權方式沒有變化。應用想要申請后台權限,除了需要在清單文件中額外添加 ACCESSBACKGROUNDLOCATION 權限外,還需要應用主動引導用戶到指定頁面授權。

新功能

增加應用退出原因功能

在Android 11之前,我們想要了解應用退出的原因以及狀態,都比較費勁。現 Android 11 引入了 方法:ActivityManager.getHistoricalProcessExitReasons() ,
可以讓我們清楚地了解到應用退出的原因。

可變刷新率

應用和游戲現在可以為其窗口設置首選幀率。大多數 Android 設備以 60Hz 的刷新率更新屏幕,但是某些設備支持多種刷新率,例如 90Hz 和 60Hz,並可在運行時切換。在這些設備上,系統會基於首選幀率來為應用選擇最佳刷新率。

結語

以上主要介紹了Android 11 對分區存儲、應用包可見性和權限變化等模塊的更新介紹。Google 在力求讓用戶更加便捷地使用Android系統的基礎上,也希望用戶數據的隱私和安全性能在最大程度上受到保護。

個推致力於為開發者提供好用的SDK。為了提升SDK的穩定性、兼容性,個推也對Android 11 的新特性進行了深入研究,並即將針對旗下產品推出全新的適配方案,以滿足開發者不同的使用場景。此外,我們希望能與更多開發者交流探索Android新技術,優化用戶體驗,一同打造更好的安卓開發生態圈。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM