안드로이드 10 이상에서 파일첨부가 정상 동작하지 않는다면

사진 첨부 기능은 모든 앱에서 아주 흔한 기능입니다.

 

내 프로필 사진을 설정한다던가 글쓰기시에 사진을 첨부한다거나 아주 흔하게 사용되는 기능이죠

 

대부분 파일첨부시에 갤러리앱을 열어서 내가 특정 파일을 선택하면

 

다시 원래 앱으로 돌아오고 그 파일을 서버로 전송하게 되는데요

 

이미 기존에 구현해놓았던 파일 첨부 기능이 android 10(API level 29) 이상에서 동작하지 않는다면 다음과 같은 코드를 사용하고 있지는 않은지 확인해보세요

 

아마도 여러분의 코드가

 

getContentResolver().query() 함수를 이용해서

 

MediaColumns의 DATA 컬럼의 값을 가져오는 방식을 사용하셨을 확률이 높습니다.

 

갤러리에서 내가 선택한 파일의 URI값을 가져온다음에 해당 URI를 통해 실제 파일이 있는 path를 찾는 방법으로 많이 사용되던 방식입니다.

 

떠도는 많은 코드스니펫들이  getRealPathFromURI 라는 이름의 함수로 이러한 방식으로 구현되어있거든요

 

 

 

그런데 안드로이드 공식문서에 이렇게 언급되어있습니다.

 

This constant was deprecated in API level 29. Apps may not have filesystem permissions to directly access this path. Instead of trying to open this path directly, apps should use ContentResolver#openFileDescriptor(Uri, String) to gain access.

 

DATA 는 API level 29 에서부터 deprecated 되었다고 하는군요.

 

developer.android.com/reference/android/provider/MediaStore.MediaColumns#DATA

 

MediaStore.MediaColumns  |  Android 개발자  |  Android Developers

 

developer.android.com

 

그래서 uri에서 real path를 가져올때 이 방법이 아닌 openFileDescriptor를 사용하는 방법을 권하고 있습니다.

 

 

openFileDescriptor를 사용하는 안드로이드의 새 저장소 이용방법은 설명이 기니깐 관련 링크로 대체합니다...

 

developer.android.com/training/data-storage/shared/media?hl=ko

 

공유 저장소의 미디어 파일에 액세스  |  Android 개발자  |  Android Developers

많은 앱에서 더욱 풍부한 사용자 환경을 제공하기 위해 사용자가 외부 저장소 볼륨에서 사용 가능한 미디어를 제공하고 액세스할 수 있게 합니다. 프레임워크는 미디어 저장소라고 하는 미디어

developer.android.com

 

developer.android.com/training/data-storage/shared/documents-files?hl=ko

 

공유 저장소의 문서 및 기타 파일 액세스  |  Android 개발자  |  Android Developers

Android 4.4(API 수준 19) 이상을 실행하는 기기에서 앱은 저장소 액세스 프레임워크를 사용하여 외부 저장소 볼륨 및 클라우드 기반 저장소를 포함한 문서 제공업체와 상호작용할 수 있습니다. 이

developer.android.com

 

developer.android.com/training/camera/photobasics

 

사진 촬영  |  Android 개발자  |  Android Developers

이 과정에서는 기존 카메라 애플리케이션을 사용하여 사진을 캡처하는 방법을 설명합니다. 클라이언트 앱을 실행하는 기기에서 촬영한 하늘 사진을 조합하여 세계 날씨 지도를 만드는 크라우

developer.android.com

 

| 1 | ··· | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | ··· | 230 |