앱내에서 SEND action을 통해 데이터 정보를 공유할때
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
로 시작하는 intent 에서 에레가 발생했다.
정확한 위치는
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share using"));
에서 에러가 났는데, 해당 에러 내용은
E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://프로젝트이름.FileProvider/파일경로 from pid=28663, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:835)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:695)
at android.content.ContentProvider$Transport.query(ContentProvider.java:234)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:107)
at android.os.Binder.execTransactInternal(Binder.java:1179)
at android.os.Binder.execTransact(Binder.java:1143)
였다.
provider be exported, or grantUriPermission() 로 stack over flow를 검색해보고 나왔던
manifest provider 에 exported=true 옵션과
grantUriPermission()를 모두 해도 같은 에러가 나왔다.
결국
shareIntent.setClipData(ClipData.newRawUri("", uri));
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share using"));
setClipdata를 넣어서 에러 해결