解決方法
剛開始在AndroidManifest.xml已經聲明了讀寫權限,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
但在訪問相冊的時候,還是報錯:
open failed: EACCES (Permission denied)
網上的從手機設置里改權限、或者隨用隨檢驗存儲權限啥的在我這都不管用。
又發現了一個有效方法,在AndroidManifest.xml添加一句:
android:requestLegacyExternalStorage="true"
然后成功解決問題!
原因
Android Q分區存儲權限變更及適配問題:
為了讓用戶更好地控制自己的文件,並限制文件混亂的情況,Android Q修改了APP訪問外部存儲中文件的方法。外部存儲的新特性被稱為Scoped Storage。
Android Q仍然使用READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE作為面向用戶的存儲相關運行時權限,但現在即使獲取了這些權限,訪問外部存儲也受到了限制。APP需要這些運行時權限的情景發生了變化,且各種情況下外部存儲對APP的可見性也發生了變化。