-- Android
안드로이드 api24 이상부터 Uri 사용 시 FileUriExposedException
어린왕자악꿍
2017. 8. 29. 16:35
Uri를 사용하는 코드부분에서 FileUriExposedException에러가 나서 확인해봤더니 api24 이상부터는 아래처럼 구현해야 한다.
이미 READ_EXTERNAL_PERMISSION 퍼미션 요청 코드는 있다고 가정한다.
[AndroidManifest.xml]
<manifest ...>
<application ...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
</application>
</manifest>
[res/xml/provider_paths.xml]
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
[사용예]
File file = ...;
Intent install = new Intent(Intent.ACTION_VIEW);
install.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
Uri apkURI = FileProvider.getUriForFile(
context,
context.getApplicationContext()
.getPackageName() + ".provider", file);
install.setDataAndType(apkURI, mimeType);
install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);