-
[안드로이드] Intent로 이미지 가져오기Android 2021. 3. 6. 13:20반응형
github.com/DNights/AndroidGetImagesSample
Android 에서 Intent로 ACTION_IMAGE_CAPTURE, ACTION_PICK 을 사용해서 이미지를 가져오는 샘플 코드입니다.
만드는 과정에서 발생한 이슈들 정리합니다.
Issue 1.
Android 5.0 대에서 ACTION_IMAGE_CAPTURE 로 이미지를 가지고 올 경우 class 변수의 imageCaptureUri 가 null 인 문제
이 경우는 사실 Android 5.0 대의 문제뿐만 아니라 모든 버전에서 카매라를 통해 이미지를 가져올때
카메라앱의 회전에 의해서 android lifecycle 이 onCreate 부터 다시 불리는 문제이다.
Intent 로 ACTION_IMAGE_CAPTURE 를 통해서 이미지를 받아오는 Activity의 화면 회전을 막거나 URI 를 저장하는 변수를 lifecycle에 영향을 받지 않도록 처리해야 한다.
Issue 2.
Android 10 부터 scoped storage 가 적용되면서 무분별한 저장소 접근이 불가능하다.
developer.android.com/training/data-storage
그래서 이미지를 가져올때 기존처럼 경로에 FileInputStream 를 사용해서 가져올 경우
open failed: EACCES (Permission denied)
위와 같은 에러가 발생할수 있다.
그럴경우 일단 접근가능한 공통된 저장소 위치나 (Environment.DIRECTORY_PICTURES , Environment.DIRECTORY_DOWNLOADS ... )
앱 내부 영역(cash)에 저장하기를 권하며 접근시 ParcelFileDescriptor 를 통해 접근하면 위와 같은 애러를 방지 할 수 있다.
val parcelFileDescriptor = contentResolver.openFileDescriptor(imageCaptureUri!!, "r", null) val ins = FileInputStream(parcelFileDescriptor?.fileDescriptor!!) val img = BitmapFactory.decodeStream(ins) ins?.close()
developer.android.com/reference/android/os/ParcelFileDescriptor
[참고링크]
stackoverflow.com/questions/33079330/android-open-failed-eacces-permission-denied
medium.com/@sriramaripirala/android-10-open-failed-eacces-permission-denied-da8b630a89df
반응형'Android' 카테고리의 다른 글
Jetpack Compose Setting (0) 2021.06.30 Android Sticky Header RecyclerView (0) 2021.06.17 Android Studio 자동완성 기능 안될경우 (with. MAC) (3) 2021.04.29 Android Notifications(알림) 표시 (0) 2021.03.14 Android TextView URL link 처리하기 (0) 2020.12.28 Gson v 2.8.6 공식 번역본 (0) 2020.10.14 ConstraintLayout에서 match_parent 가 작동 안될경우 (0) 2020.09.21 Hilt 공식 문서 번역본 (0) 2020.07.24