대가는 결과를 만든다

누가 버전 이상 사진 촬영 시 발생하는 FileUriExposedException 본문

개발/Android

누가 버전 이상 사진 촬영 시 발생하는 FileUriExposedException

yunzema 2018. 6. 19. 13:37
반응형

이슈


안드로이드 누가 버전 이상 카메라 촬영 시 Intent로 Uri를 넘기는 부분{


intent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri);


}에서 기존 코드를 사용시 FileUriExposedException 가 발생한다.


=> file:// 형식으로 uri 를 내보내는 것에 오류 발생 하는 것이다.



기존 코드

Uri captureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "저장할 파일명"));






해결방법


매니페스트에 fileprovider 임시 접근권한을 얻는 복잡한 방법으로 수정해주어야함



1. res 폴더에 xml 폴더 생성 후 xml문서 생성 후 접근 경로에 대해 정의


ex ) filepaths.xml를 res/xml의 경로에 생성함


filepaths.xml 내용을 이렇게 작성

<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="storage/emulated" path="."/>
</paths>



2. AndroidManifest파일에서 application 하위에 provider 블록 정의


<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="패키지명.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />                                    //위에서 생성한 xml문서의 경로
</provider>


3. 기존 코드 있던 부분의 수정

Uri captureURi = FileProvider.getUriForFile ( getApplicationContext()

    "패키지명.provider",

new File (Environment.getExternalStorageDirectory(), "저장할 파일명" ));







*패키지명 메서드로 간편하게 가져오려면 : getApplicationContext().getPackageName()


Comments