API 29 이상에서는 외부 저장소 접근을 하려고 하면 filenotfoundexception open failed eacces (permission denied) 에러가 발생한다.

이는 API 29 이상에서 부터는 외부 저장소에 접근하기 위해 범위 지정 저장소를 사용하기 때문에 발생하는 문제인데 다음과 같이 범위 지정 저장소 사용을 일시적으로 해제 하여 접근 가능하다.

 

※ 타겟 SDK 레벨에 상관없이 모든 앱의 내년도 주요 플랫폼 출시에는 범위 지정 저장소가 요구됩니다. 그러므로 앱이 범위 지정 저장소를 잘 사용하는지 미리 확인하는 것이 좋습니다

 

이는 파일의 위치에 접근하지 못하여 발생하는 문제로 AndroidManifest.xm 파일을 다음과 같이 수정하면 쉽게 해결 가능하다. 

manifest에 다음과 같이 파일의 위치에 접근 권한을 추가한다.

<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
범위 지정 저장소를 일시적으로 선택 해제할 수 있다. (API 29 이상에서는 디폴트 값이 fasle)

<application 
      android:requestLegacyExternalStorage="true" >

 

 

참고
 

범위가 지정된 외부 저장소 액세스 관리하기  |  Android 개발자  |  Android Developers

사용자에게 파일의 더 많은 권한을 제공하고 파일이 복잡해지는 것을 제한하기 위해, Android 10(API 레벨 29) 이상을 타겟팅하는 앱은 외부 저장소로 범위가 지정된 액세스 또는 범위 지정 저장소

developer.android.com

 

+ Recent posts