隱私權(quán)限更新
下表匯總了 Android 11 中與隱私權(quán)相關(guān)的主要變更。
隱私權(quán)變更 | 受影響的應(yīng)用 | 緩解策略 |
---|---|---|
強(qiáng)制執(zhí)行分區(qū)存儲(chǔ)機(jī)制 以 Android 11 為目標(biāo)平臺(tái)的應(yīng)用始終會(huì)受分區(qū)存儲(chǔ)行為的影響 |
以 Android 11 為目標(biāo)平臺(tái)的應(yīng)用夕玩,以及以 Android 10 為目標(biāo)平臺(tái)且未將 requestLegacyExternalStorage 設(shè)為 true 以停用分區(qū)存儲(chǔ)的應(yīng)用 |
更新您的應(yīng)用以使用分區(qū)存儲(chǔ) 詳細(xì)了解分區(qū)存儲(chǔ)變更 |
一次性權(quán)限 通過一次性權(quán)限命辖,用戶可以授予對(duì)位置信息粪躬、麥克風(fēng)和攝像頭的臨時(shí)訪問權(quán)限 |
以任何版本為目標(biāo)平臺(tái)且請(qǐng)求位置信息斑粱、麥克風(fēng)或攝像頭權(quán)限的應(yīng)用 | 在嘗試訪問受某項(xiàng)權(quán)限保護(hù)的數(shù)據(jù)之前怔檩,檢查您的應(yīng)用是否具有該權(quán)限 遵循請(qǐng)求權(quán)限方面的最佳做法 |
自動(dòng)重置權(quán)限 如果用戶在 Android 11 上幾個(gè)月未與應(yīng)用互動(dòng),系統(tǒng)會(huì)自動(dòng)重置應(yīng)用的敏感權(quán)限 |
以 Android 11 為目標(biāo)平臺(tái)且在后臺(tái)執(zhí)行大部分工作的應(yīng)用 | 要求用戶阻止系統(tǒng)重置應(yīng)用的權(quán)限 詳細(xì)了解自動(dòng)重置權(quán)限 |
后臺(tái)位置信息訪問權(quán)限 Android 11 更改了用戶向應(yīng)用授予后臺(tái)位置信息權(quán)限的方式 |
以 Android 11 為目標(biāo)平臺(tái)且需要訪問后臺(tái)位置信息的應(yīng)用 | 通過對(duì)權(quán)限請(qǐng)求方法的多次單獨(dú)調(diào)用怀樟,逐步請(qǐng)求前臺(tái)(粗略或精確)和后臺(tái)位置權(quán)限。必要時(shí)盆佣,說明用戶授予該權(quán)限所能得到的益處 詳細(xì)了解 Android 11 中的后臺(tái)位置信息訪問權(quán)限 |
軟件包可見性 Android 11 更改了應(yīng)用查詢同一設(shè)備上的其他已安裝應(yīng)用及與之互動(dòng)的方式 |
以 Android 11 為目標(biāo)平臺(tái)且與設(shè)備上的其他已安裝應(yīng)用交互的應(yīng)用 | 將 <queries> 元素添加到應(yīng)用的清單詳細(xì)了解軟件包可見性 |
前臺(tái)服務(wù)類型 Android 11 更改了前臺(tái)服務(wù)訪問攝像頭和麥克風(fēng)數(shù)據(jù)的方式 |
以 Android 11 為目標(biāo)平臺(tái)且在前臺(tái)服務(wù)中訪問攝像頭或麥克風(fēng)的應(yīng)用 | 分別在訪問攝像頭數(shù)據(jù)和麥克風(fēng)數(shù)據(jù)的服務(wù)中聲明 camera 和 microphone 前臺(tái)服務(wù)類型詳細(xì)了解新的前臺(tái)服務(wù)類型 |
一次性權(quán)限
在 Android 11往堡,如果要求用戶給你地理位置的權(quán)限時(shí),用戶會(huì)有一個(gè)僅限這一次(only this time) 的額外選項(xiàng)共耍,表示用戶只給你的應(yīng)用一次這個(gè)權(quán)限虑灰。當(dāng)用戶下一次打開應(yīng)用的時(shí)候,系統(tǒng)會(huì)再次詢問權(quán)限痹兜。麥克風(fēng)和攝像頭也是一樣穆咐,存在一次性權(quán)限權(quán)限。
位置權(quán)限的特殊性
Android 11 對(duì)位置權(quán)限增加了前臺(tái)和后臺(tái)的區(qū)別。Android 11 之前对湃,應(yīng)用只是詢問用戶崖叫,給或者不給權(quán)限。但如果是應(yīng)用 針對(duì) Android 11 (Target SDK Level = 30)拍柒,應(yīng)先詢問用戶有沒有這個(gè)授權(quán)归露,然后用戶同意這個(gè)授權(quán)之后,需要再詢問用戶斤儿,還需要一個(gè)在后臺(tái)時(shí)獲取地理位置的權(quán)限剧包。
應(yīng)用包可見性
從前如果我們使用 PackageManger.getInstalledPackages(),他就會(huì)告訴開發(fā)者往果,應(yīng)用包的信息疆液。但是如果是 target 30,就有點(diǎn)改變了陕贮。如果是通過 getPakcageInfo 獲取自己應(yīng)用的信息堕油,是沒有影響的;如果要找手機(jī)安裝了哪些應(yīng)用肮之,這個(gè)行為就有改變了掉缺,它只會(huì)給你一個(gè)結(jié)果,這個(gè)結(jié)果就只有你的應(yīng)用本身戈擒,還有一些系統(tǒng)的應(yīng)用眶明,其他的應(yīng)用是看不見的。
分區(qū)存儲(chǔ)
分區(qū)存儲(chǔ)其實(shí)在 Android 10 已經(jīng)推出了筐高,但是去年推出的時(shí)候開發(fā)者還可以選擇性采用搜囱。但 Android 11 中,開發(fā)者就必須遵守分區(qū)存儲(chǔ)了柑土。
那么分區(qū)儲(chǔ)存是什么蜀肘?應(yīng)用里面如果有照片、視頻等媒體文件稽屏,可以把它放到公有的空間扮宠,讓其他的應(yīng)用也可以訪問我的文件,可以看我的視頻狐榔,可以看到我的照片坛增。但是其他私有文件都不允許其他應(yīng)用訪問,除非透過 FileProvider 等特別設(shè)置荒叼。
如果是使用分區(qū)存儲(chǔ)的話轿偎,彈窗要求授權(quán)的時(shí)候,會(huì)看見是從前我們是要求一個(gè)儲(chǔ)存所有文件的授權(quán)被廓,現(xiàn)在變成了要求文件和媒體的授權(quán)坏晦。
READ_PHONE_STATE 變更
READ_PHONE_STATE 權(quán)限將只能獲取電話相關(guān)的狀態(tài),不能獲取電話號(hào)碼。如需要獲取電話號(hào)碼昆婿,需要額外申請(qǐng) READ_PHONE_NUMBERS 權(quán)限球碉。
MAC 地址訪問限制
功能和API
文本和輸入(WindowInsetsAnimation
)
Android 11 引入了新的 API 以改進(jìn)輸入法 (IME) 的轉(zhuǎn)換,例如屏幕鍵盤仓蛆。這些 API 可讓您更輕松地調(diào)整應(yīng)用內(nèi)容睁冬,與 IME 的出現(xiàn)和消失以及狀態(tài)和導(dǎo)航欄等其他元素保持同步。
如需在聚焦至任何 EditText 時(shí)顯示 IME看疙,請(qǐng)調(diào)用 view.getInsetsController().show(Type.ime())豆拨。
如需隱藏 IME,請(qǐng)調(diào)用 view.getInsetsController().hide(Type.ime())能庆。
通過調(diào)用 view.getRootWindowInsets().isVisible(Type.ime()) 檢查 IME 當(dāng)前是否可見施禾。
<pre style="margin: 0px; tab-size: 4; white-space: pre-wrap;">view.setOnApplyWindowInsetsListener { view, insets ->
// 比如監(jiān)聽用戶輸入法是否彈出
}</pre>
無(wú)線調(diào)試
Android 11 支持通過 Android adb 從工作站以無(wú)線方式部署和調(diào)試應(yīng)用。例如搁胆,可以將可調(diào)試的應(yīng)用部署到多臺(tái)遠(yuǎn)程設(shè)備弥搞,而無(wú)需通過 USB 實(shí)際連接您的設(shè)備,從而避免常見的 USB 連接問題(例如驅(qū)動(dòng)程序安裝方面的問題)渠旁。
在主動(dòng)拍攝期間關(guān)閉通知提示音和振動(dòng)
從 Android 11 開始攀例,在主動(dòng)使用相機(jī)時(shí),您的應(yīng)用可以使用 setCameraAudioRestriction() 以僅關(guān)閉振動(dòng)顾腊、同時(shí)關(guān)閉聲音和振動(dòng)或都不關(guān)閉粤铭。
應(yīng)用進(jìn)程退出原因
Android 11 引入了 ActivityManager.getHistoricalProcessExitReasons()
方法,用于報(bào)告近期任何進(jìn)程終止的原因投慈。應(yīng)用可以使用此方法收集崩潰診斷信息承耿,例如進(jìn)程終止是由于 ANR、內(nèi)存問題還是其他原因所致伪煤。此外,還可以使用新的 setProcessStateSummary()
方法存儲(chǔ)自定義狀態(tài)信息凛辣,以便日后進(jìn)行分析抱既。
getHistoricalProcessExitReasons()
方法會(huì)返回 ApplicationExitInfo
類的實(shí)例,該類包含與應(yīng)用進(jìn)程終止相關(guān)的信息扁誓。通過對(duì)此類的實(shí)例調(diào)用 getReason()
防泵,可以確定應(yīng)用進(jìn)程終止的原因。例如蝗敢,REASON_CRASH
的返回值表示應(yīng)用中發(fā)生了未處理的異常捷泞。如果應(yīng)用需要確保退出事件的唯一性,可以保留特定于應(yīng)用的標(biāo)識(shí)符寿谴,例如基于 getTimestamp()
方法的時(shí)間戳的哈希值锁右。
Android Studio 4.0
Motion Editor
MotionLayout API 擴(kuò)展了功能豐富的 ConstraintLayout ,來(lái)幫助開發(fā)者實(shí)現(xiàn)應(yīng)用中復(fù)雜的動(dòng)畫效果。在Android Studio 4.0中咏瑟,新的Motion Editor使此API的使用變得更加容易拂到,Motion Editor可以用來(lái)創(chuàng)建,編輯和預(yù)覽MotionLayout 動(dòng)畫码泞。不再需要?jiǎng)?chuàng)建和修改復(fù)雜的xml文件兄旬,使用Motion Editor就可以生成,而且支持編輯約束集余寥,過渡领铐,關(guān)鍵幀和視圖屬性。而且如果想要查看編輯器創(chuàng)建的代碼的話宋舷,只需要單擊一下即可罐孝。同樣方便的是,對(duì)于已經(jīng)使用過ConstraintLayout的開發(fā)人員來(lái)說肥缔,IDE可以輕松地將其轉(zhuǎn)換為MotionLayout莲兢。一個(gè)創(chuàng)建動(dòng)畫的效果可以參考下圖。
Layout Inspector
在debug模式下運(yùn)行你的應(yīng)用续膳,然后借助新的Layout Inspector工具可以查看你的應(yīng)用當(dāng)前顯示的布局結(jié)構(gòu)及數(shù)據(jù)顯示改艇,而且還可以查看視圖的實(shí)時(shí)3D效果圖來(lái)檢查布局的層次結(jié)構(gòu)。這個(gè)功能可以用來(lái)更好的檢查開發(fā)過程中遇到顯示問題坟岔。
可以通過菜單中的View > Tool Windows > Layout Inspector來(lái)打開Layout Inspector窗口谒兄。
Layout Validation
使用布局驗(yàn)證可以在多個(gè)不同尺寸,不同分辨率的屏幕上來(lái)比較UI的顯示效果社付,預(yù)覽布局承疲,以調(diào)整到最佳的顯示效果。
在Android Studio的右上角可以找到Layout Validation選項(xiàng)卡鸥咖。
混淆代碼的智能編輯器
在之前編寫混淆代碼時(shí)燕鸽,大概都復(fù)制粘貼的比較多,而在AS 4.0中提供了智能編輯器功能啼辣,不但在編寫混淆代碼會(huì)有自動(dòng)補(bǔ)全所有類啊研,方法和字段功能,而且還有語(yǔ)法突出顯示鸥拧,錯(cuò)誤檢查和提醒等功能党远。
更多特性詳見官方文檔
截圖來(lái)自2020上海GDG,僅作為學(xué)習(xí)記錄富弦。