-
[안드로이드] Intent로 이미지 가져오기Android 2021. 3. 6. 13:20반응형
github.com/DNights/AndroidGetImagesSample
DNights/AndroidGetImagesSample
Contribute to DNights/AndroidGetImagesSample development by creating an account on GitHub.
github.com
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
데이터 및 파일 저장소 개요 | Android 개발자 | Android Developers
Android는 다른 플랫폼의 디스크 기반 파일 시스템과 유사한 파일 시스템을 사용합니다. 시스템은 앱 데이터를 저장하기 위한 다음과 같은 여러 옵션을 제공합니다. 앱별 저장소: 내부 저장소 볼
developer.android.com
그래서 이미지를 가져올때 기존처럼 경로에 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
ParcelFileDescriptor | Android 개발자 | Android Developers
developer.android.com
[참고링크]
[Android] Gallery 에서 Image 가져오기.
Pick Image From Gallery 일단 Permission 추가 Permission 받는 방법은 다음 포스트에 작성해보겠습니다. 일단 버튼을 눌렀을 때 실행하는 메소드 입니다. private void pickFromGallery(){ Intent intent=new..
hello-bryan.tistory.com
[Android] ACTION_PICK 사용 (이미지 가져오기)
이미지나 비디오 파일을 가져 올때 아래와 같은 소스 형태로 가져 오시는 분들 이글 한번 참고 하세요. private void takePictureFromGallery() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Ima..
gogorchg.tistory.com
stackoverflow.com/questions/33079330/android-open-failed-eacces-permission-denied
Android open failed: EACCES (Permission denied)
I'm trying to pick an image from the gallery and when i pick it i get this error: open failed: EACCES (Permission denied) in the manifest i already set the permissions: <uses-permission andr...
stackoverflow.com
medium.com/@sriramaripirala/android-10-open-failed-eacces-permission-denied-da8b630a89df
Android 10 open failed: EACCES (Permission denied)
Recently for one of the apps that I was working on, we changed the target SDK to API level 29 (Android 10). Ever since the change was made…
medium.com
반응형'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