最近在一款android10的系統(tǒng)上薄翅,運行之前android8.1的應用時,偶然發(fā)現(xiàn) android10 以下可以正常讀取本地文件舷丹,android 10 卻提示 Permission denied 于是翻閱官方文檔抒钱,忙活半天終于找到了原因!
相關(guān)鏈接:Android 10 管理分區(qū)外部存儲訪問
解決辦法:
Mainfest Application中加入這一行 android:requestLegacyExternalStorage="true"
官方的解釋:
分區(qū)存儲
為了讓用戶更好地管理自己的文件并減少混亂颜凯,以 Android 10(API 級別 29)及更高版本為目標平臺的應用谋币,開啟了分區(qū)存儲權(quán)限。此類應用只能訪問外部存儲空間上的應用專屬目錄症概,以及本應用所創(chuàng)建的特定類型的媒體文件瑞信,以及內(nèi)部存儲空間上的本身目錄。一句話穴豫,解釋就是凡简,不能像之前一樣,一句代碼getExternalStorageDirectory
精肃,就可以任意去寫入秤涩、讀取sd卡了。
針對android10的臨時關(guān)閉方法
如果您的應用以 Android 10(API 級別 29)或更低版本為目標平臺司抱,您可以暫時在正式版應用中停用分區(qū)存儲筐眷。不過,如果您以 Android 10 為目標平臺习柠,則需要在應用的清單文件中將 requestLegacyExternalStorage 的值設(shè)置為 true:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
android 10上匀谣,可以通過這個屬性,臨時關(guān)閉分區(qū)存儲资溃,但是不建議這樣做武翎,為什么?請看官方下一句話
android 11將強制使用分區(qū)存儲
image.png