일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- aframe
- A-Frame
- JS
- AR
- Node
- Three.js
- VR
- web
- Component
- vuetify
- EM6
- vue-template-compiler
- 3d
- promise
- CI/CD
- 상태관리
- vuex
- npx
- WebXR
- WebVR
- array
- package-lock.json
- version mismatch
- bootstrap
- PDO
- PHP
- vue
- JavaScript
- javscript
- auth0
- Today
- Total
대가는 결과를 만든다
누가 버전 이상 사진 촬영 시 발생하는 FileUriExposedException 본문
이슈
안드로이드 누가 버전 이상 카메라 촬영 시 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()
'개발 > Android' 카테고리의 다른 글
surfaceview와 CameraSource (0) | 2018.06.25 |
---|---|
Error:Cannot fit requested classes in a single dex file 오류 (0) | 2018.06.20 |
각종 API 사용시 필요한 해쉬키 혹은 SHA-1 가져오는 방법 (0) | 2018.06.18 |
SwipeRefreshLayout 과 NestedScrollView (0) | 2018.06.06 |