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