티스토리 뷰
디버그 노트
안드로이드) 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" 의 경로는 본인 프로젝트의 경로로 대체한다.
반응형
'디버그 노트' 카테고리의 다른 글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- redis
- 안드로이드스튜디오
- socket.io
- mysql
- Django
- password
- Kotlin
- Git
- Android Studio
- 해결
- RecyclerView
- 플러터
- 에러해결
- Hummingbird
- 에러
- WAS
- github
- flutter
- django server
- chatting
- 알고리즘
- CHANNELS
- 안드로이드
- 코틀린
- Tutorial
- DART
- flame
- node.js
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함