반응형
안드로이드 프로젝트의 targetSdkVersion이 24이상에서 아래의 소스코드(MIME Type에 따른 앱 연결 화면 오픈)를 실행하면 아래와 같이 오류가 발생합니다.
[소스코드]
String mergeFilePath = "file:///storage/emulated/0/sql.pdf";
File file = new File(mergeFilePath);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file),"application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent = Intent.createChooser(target, "Open File");
try {
startActivity(intent);
} catch (Exception e) {
Log.e("Error", Log.getStackTraceString(e));
Toast.makeText(MergeAct.this, "PDF reader doesn't not exist.", Toast.LENGTH_LONG).show();
}
[오류]
android.os.FileUriExposedException: file:///storage/emulated/0/... exposed beyond app through Intent.getData()
해결 방법은 FileProvide를 사용하는 방법이 있는데, AndroidManifest.xml 등을 수정해야 하는 등 여러 작업이 필요합니다.
저는 URI exposure를 무시하는 아래의 코드를 onCreate에서 추가하여 해결했습니다.
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 Action Bar 숨기기, Full Screen을 Style XML로 설정하기 (0) | 2020.08.04 |
---|---|
안드로이드 ImageView를 흑백(Gray Scale)으로 표시하기 (0) | 2020.07.12 |
Failed to resolve: support-core-utils & support-compat (0) | 2019.07.25 |
안드로이드 targetSdkVersion 28 인 경우 HTTP 통신 시 오류 해결 방법 (1) | 2019.07.14 |
안드로이드X로 프로젝트 마이그레이션 하기 (0) | 2019.06.23 |
댓글