1. 중요한 것이 Android 7.0이 되면서 기존 사용하던 이미지 캡처, 사진 촬영 후 자르는 기능이 작동되지 않는다. 그 이유로는 구글 공식 사이트에도 기재되어 있지만 아래와 같다.
앱 사이의 파일 공유
Android 7.0을 대상으로 하는 앱의 경우, Android 프레임워크는 앱 외부에서 file://
URI의 노출을 금지하는 StrictMode
API 정책을 적용합니다. 파일 URI를 포함하는 인텐트가 앱을 떠나면 FileUriExposedException
예외와 함께 앱에 오류가 발생합니다.
애플리케이션 간에 파일을 공유하려면 content://
URI를 보내고 이 URI에 대해 임시 액세스 권한을 부여해야 합니다. 이 권한을 가장 쉽게 부여하는 방법은 FileProvider
클래스를 사용하는 방법입니다. 권한과 파일 공유에 대한 자세한 내용은 파일 공유를 참조하세요.
|
|
android:authorities 부분에 (자신의 패키지명)이라고 되어있는 데, 저의 경우 "com.example.test"가 패키지명이니
android:authorities="com.example.test.provider"이 되었습니다.
<Step 3>
기존에 코드들을 보면 Uri.fromFile함수를 사용합니다. 그러나 이를 사용하면 FileUriExposedException이 발생하기 때문에,
이 함수 대신 FileProvider.getUriForFile 함수를 사용하면 됩니다.
photoUri = FileProvider.getUriForFile(SelectPhotoDialogActivity.this,"com.example.test.provider", photoFile); |
3. 그러나 이것만 보면 이해가 안되시겠죠? 그리고 저렇게 한다고 한들, 이미지 자르기 쪽으로 가거나 할 때 권한 flag 문제로 또한번
런타임 에러가 발생합니다!! 다음 포스트에서 사진 캡처, 이미지 선택 후 자르고 화면에 나타내는 방법에 대해 공유드리겠습니다.
'[Android] > 허접 Programming Tips' 카테고리의 다른 글
Google Map 구글 지도 getFragmentManager() Deprecated 해결방법 (0) | 2018.11.29 |
---|---|
안드로이드 Animation으로 Custom Loading(커스텀 로딩) 구현하기(2/2) (3) | 2017.07.18 |
안드로이드 Animation으로 Custom Loading(커스텀 로딩) 구현하기(1/2) (3) | 2017.07.13 |
[간편 로그인] (카카오, 네이버, 페이스북 등) 커스텀 이미지 사용하는 방법 (3) | 2017.01.25 |
Android 7.0 Nougat OS 이미지 사진 촬영 캡처 및 자르기 (2/2) (81) | 2017.01.22 |