본문 바로가기

ANDROID/Debug Logs

[안드로이드] android.os.FileUriExposedException: file exposed beyond app through Intent.getData(). 해결

파일 오픈을 하는중에 안드로이드 태블릿에선 문제없이 열리던 파일이 폰에서 테스트하니 열리지 않던 문제가 있었다.


Exception 내용은 android.os.FileUriExposedException: file exposed beyond app through Intent.getData() 로


서치를 해보니 안드로이드 API 23버전 이상부터는 다른 방법으로 파일을 열어야 한다 정도의 내용이었다.


코드참조를 통해 빌드버전을 확인하고, 버전에 따라 다르게 putExtra 형식으로 추가하였고


여기에 필요한 매니페스트 파일 수정, res 폴더에 xml/ provider_paths.xml 파일 추가 이후 


GenericFileProvider까지 액티비티 파일에 추가하여 필요한 구성을 모두 완료하였다.


조금 시간이 걸렸던 점은 기존에 인텐트를 추가하고 여는 방식이 새로 수정해준 uri 참조방식이랑 맞지 않아


파일을 오픈하는 다이얼로그는 열렸으나 파일이 최종적으로 참고가 되지 않는 등의 문제가 있었던 터였다.


여기서 intent.setDataAndType는 기존 방식대로 설정해두고 FileProvider.getUriForFile 에서 file 참조하는 부분을


file을 여기 안에서 만들지 않고 함수 위쪽에 따로 선언을 해줌으로써 uri를 가져오는 데에도, setDataAndType을 설정해주는 데에도


이상없이 코드 적용을 할 수 있었다. 


아래에는 덕지덕지 적용해준 요소들을 모아본 스크린샷.. 참 덕지덕지하다






참고 :


http://wifi-z.tistory.com/33


http://code.i-harness.com