引言
Android 11 (api 30)
強(qiáng)制引入&執(zhí)行應(yīng)用沙盒機(jī)制
闽巩,獲取文件讀寫權(quán)限并不能直接讀寫相冊等公共目錄,適配該版本時(shí)此問題的適配是無法避免的,這是android的一項(xiàng)新的安全機(jī)制,保證用戶不受惡意應(yīng)用的侵害慕嚷,隔離應(yīng)用間的數(shù)據(jù)&私有目錄&公共目錄,應(yīng)用間不能直接互相訪問數(shù)據(jù)毕泌,不過這也帶來了一些適配問題喝检,比如拍照應(yīng)用如何保存圖片到公共相冊等問題,本文旨在介紹此問題
如何讀寫文件
- targetSdk < 29 (目標(biāo)版本 <
Android 10
)
獲取以下權(quán)限即可訪問公共目錄
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- targetSdk = 29 (目標(biāo)版本 =
Android 10
)
獲取以下權(quán)限不能訪問公共目錄
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
同時(shí)添加以下參數(shù)可以訪問公共目錄
android:requestLegacyExternalStorage="true"
- targetSdk >= 29 (目標(biāo)版本 >=
Android 10
)
獲取以下權(quán)限不可以讀寫公共目錄
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
同時(shí)使用SAF(存儲訪問框架)撼泛、多媒體框架讀寫公共目錄
- targetSdk >= 29 (目標(biāo)版本 >=
Android 10
)
獲取以下權(quán)限可以公共目錄(不建議)
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
注意事項(xiàng)
app編譯時(shí)targetSdk
是關(guān)鍵參數(shù)蛇耀,targetSdk = 29
的app,即便安裝到Android 11
的機(jī)器上坎弯,也是按照api 29
的權(quán)限規(guī)則運(yùn)行的,不過此沙盒機(jī)制,還是需要盡快適配的抠忘,各大應(yīng)用商店的上架標(biāo)準(zhǔn)很快就會要求 targetSdk >= 31
,以強(qiáng)制要求適配新版本android撩炊,保證用戶體驗(yàn)