安卓11適配攻略搶先看
引言
近期,Google 發(fā)布了 Android 11的平臺穩(wěn)定版本。Android 11 將在確保用戶隱私安全的前提下,更好地讓用戶暢享最新科技。
下圖是 Android 11 發(fā)布整體流程的時間線:
個推深耕開發(fā)者領域,一直緊跟行業(yè)發(fā)展趨勢,對Android 11的有關更新展開了深入研究。本文將從分區(qū)存儲、應用包可見性、權限變化和新功能四個方面來談談 Android 11 新特性,以幫助開發(fā)者更快速、更便捷地上手適配Android新系統(tǒng)。
作者| 個推高級安卓開發(fā)工程師 一七
正文
分區(qū)存儲
Android 10之前,外部存儲區(qū)的內容主要以兩種形式存在,一種是由應用的包名命名,歸屬于特定應用目錄下的內容,另一種是存儲在公共存儲區(qū)域的內容。
在Android 10 中,Google首次引入了分區(qū)存儲,將公共區(qū)域劃分成了不同的集合,并且在媒體文件和其他文檔之間建立了清楚的分割。經過劃分之后應用不可以隨意訪問外部存儲區(qū)中的文件,而只能訪問媒體文件。如果想訪問包含更多細節(jié)數據的其他文檔,應用專門向用戶申請有關文檔的訪問權限。
分區(qū)存儲是需要以 Android 10 為目標平臺的,系統(tǒng)默認強制執(zhí)行。如果在 AndroidManifest 中添加了 requestLegacyExternalStorage=true 標志,就可以不受此限制。但是當 target API 更新為 30 后,系統(tǒng)會忽略該配置。
如果有數據需要遷移,可以在 AndroidManifest 中將 preserveLegacyExternalStorage 屬性設為 true ,當用戶升級到以 Android 11 為目標平臺時,這個配置就會生效。具體而言,這個配置在用戶重新安裝該應用前都是有效的。
針對以 Android 11 為目標平臺的應用 (targetSdkVersion = 30) ,WRITEEXTENRNALSTORAGE 和 WRITEMEDIASTORAGE 不再提供其他任何訪問權限 。
某些應用的核心功能可能需要訪問大量的文件,例如文件管理操作、備份和恢復操作等等,此時就需要申請 MANAGEEXTERNALSTORAGE 權限。我們可以通過使用 ACTIONMANAGEALLFILESACCESS_PERMISSION intent 操作將用戶引導至一個系統(tǒng)設置頁面,讓用戶為應用授予所有文件的管理權限。
應用包可見性
在 Android 11 之前,我們可以通過 PackageManager.getInstalledPackages(0) 獲取其他所有應用的包名等信息。
Android 11 為了增加安全性,更好地保護用戶的隱私,對應用包的可見性做出了一些改動。
當 targetSdkVersion 為 30 時,如果我們用getPackageInfo(“another.app”,0) 獲取其他應用包信息時 ,會出現 NameNotFoundException 的異常。
我們可以在 AndroidMainfest 中添加 <queries>來適配特定的使用場景:(該配置相當于是添加應用白名單)
已知想獲取的包名:
查詢一組具有特定用途的應用或與其交互:
對于一些特殊應用,想要獲取所有包名信息:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
權限變化
在 Android 11 中,系統(tǒng)為用戶的私人數據提供了更多可供選擇的授權方式,應用也加大了后臺對位置的訪問權限限制。
對應攝像頭、位置信息和麥克風這幾個數據類型,用戶可以授予一次性的臨時訪問權限。
只要是在Android 11 上,該限制都會生效,如下圖:
這個一次性權限的生效周期指的是:
- 應用 Activity 可見期間
- 應用轉為后臺后的短時間內
- 前臺服務存活期間
- 當用戶撤銷單次授權后,應用進程退出,再次打開之后需要對應用進行重新授權期間
位置權限
在Android10 之前,我們通過ACCESSCOARRSELOCATION 或 ACCESSFINELOCATION(精確位置) 配置即可申請前后臺位置權限。
Android 11將位置權限分為前臺和后臺兩種權限。前文說的主要是前臺權限,授權方式沒有變化。應用想要申請后臺權限,除了需要在清單文件中額外添加 ACCESSBACKGROUNDLOCATION 權限外,還需要應用主動引導用戶到指定頁面授權。
新功能
增加應用退出原因功能
在Android 11之前,我們想要了解應用退出的原因以及狀態(tài),都比較費勁。現 Android 11 引入了 方法:ActivityManager.getHistoricalProcessExitReasons() ,
可以讓我們清楚地了解到應用退出的原因。
可變刷新率
應用和游戲現在可以為其窗口設置首選幀率。大多數 Android 設備以 60Hz 的刷新率更新屏幕,但是某些設備支持多種刷新率,例如 90Hz 和 60Hz,并可在運行時切換。在這些設備上,系統(tǒng)會基于首選幀率來為應用選擇最佳刷新率。
結語
以上主要介紹了Android 11 對分區(qū)存儲、應用包可見性和權限變化等模塊的更新介紹。Google 在力求讓用戶更加便捷地使用Android系統(tǒng)的基礎上,也希望用戶數據的隱私和安全性能在最大程度上受到保護。
個推致力于為開發(fā)者提供好用的SDK。為了提升SDK的穩(wěn)定性、兼容性,個推也對Android 11 的新特性進行了深入研究,并即將針對旗下產品推出全新的適配方案,以滿足開發(fā)者不同的使用場景。此外,我們希望能與更多開發(fā)者交流探索Android新技術,優(yōu)化用戶體驗,一同打造更好的安卓開發(fā)生態(tài)圈。
到此這篇關于安卓11適配攻略搶先看的文章就介紹到這了,更多相關安卓11適配內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android動畫之補間動畫(Tween Animation)實例詳解
這篇文章主要介紹了Android動畫之補間動畫(Tween Animation)用法,結合實例形式較為詳細的分析了Android補間動畫的定義,原理,注意事項與相關使用技巧,需要的朋友可以參考下2016-01-01Android ListView構建支持單選和多選的投票項目
如何在Android的ListView中構建CheckBox和RadioButton列表?這篇文章主要為大家詳細介紹了Android ListView實現支持單選和多選的投票項目,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01使用android studio開發(fā)工具編譯GBK轉換三方庫iconv的方法
這篇文章主要介紹了使用android studio開發(fā)工具編譯GBK轉換三方庫iconv的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android使用注解代替枚舉節(jié)省系統(tǒng)內存開銷的方法
在本篇文章里小編給大家整理的是關于Android使用注解代替枚舉節(jié)省系統(tǒng)內存開銷的方法和實例,需要的朋友們參考下。2020-01-01