디버그 노트
안드로이드) android.os.FileUriExposedException: exposed beyond app through ClipData.Item.getUri() 에러 해결
Henry95
2019. 12. 19. 20:07
반응형
카메라로 사진을 찍고 이미지 파일을 가져와 사용하려는중 에러가 발생했다.
Android 7.0이상의 경우 앱 외부에 file://URI 의 노출을 금지하기 때문에 FileUriExposedException 이 발생한다.
따라서 파일 공유를 위해서 content://URI 형식을 바꿔주고 권한을 부여해야한다.
그렇기위해 FileProvider를 사용해야하는데
아래에 다음과 같이 AndroidManifest.xml파일에 아래 코드를 추가한다.
<application>
...
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myproject.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
...
</application>
|
그후 아래 android:resource="@xml/file_paths" 에 해당하는 파일을 만들어준다
//res 파일 하위에 xml폴더를 생성후 file_paths.xml 파일을 만들어 아래 코드를 추가한다.
android:authorities="com.example.myproject.fileprovider"의 경로는 본인 프로젝트의 경로로 대체한다.
<?xml version="1.0" encoding="utf-8"?>
<external-path name="my_images" path="" />
</paths>
|
그 후 아래와같이 fromFile을 통해 받아온 Uri를 FileProvider를 사용하는 방식으로 대체한다.
val photoUri = Uri.fromFile(tempFile)
-> val photoUri = FileProvider.getUriForFile(this, "com.example.myproject.fileprovider", tempFile)
|
마찬가지로 "com.example.myproject.fileprovider" 의 경로는 본인 프로젝트의 경로로 대체한다.
반응형