본문 바로가기

IT/안드로이드 관련

[안드로이드] ClipData.Item.getUri() 해결하기

안녕하세요 남갯입니다


오늘은 ClipData.Item.getUri() Error 해결을 해보려고합니다.


return Uri.fromFile(mediaFile)


를 통해 uri를 가져오는 도중 





에러가 발생했습니다.



찾아보니

https://developer.android.com/about/versions/nougat/android-7.0-changes.html#accessibility


7.0부터 file의 uri 노출을 금지하는 보안 정책이 있었습니다.


따라서 content://URI를 보내고 이 URI에 엑세스 권한을 부여해서 FileProvider를 통해 사용하는 방법이 있습니다.


먼저 매니페스트를 수정합니다.


Manifest.xml


<application>  



android 의 경우


android:name="android.support.v4.content.FileProvider"


androidx 의 경우


<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.namget.camera2.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>


</application>


res/xml/file_paths.xml 

을 추가하였습니다.


저는 DCIM인 갤러리쪽에 들어갈거기 때문에 아래와 같이 추가했습니다.


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

이렇게 만든후에


아까 지정해두었던 authorities 를 통해


source


FileProvider.getUriForFile(this, "com.namget.camera2.fileprovider", mediaFile)


이와 같이 가져오게 되면 해결이 됩니다.