프로그래밍/안드로이드
[Android Studio] exposed beyond app through clipdata.item.geturi() 에러 해결 방법
침착곰
2021. 4. 29. 15:19
반응형
안녕하세요
안드로이드 스튜디오[Android Studio]에서 작업을 하는 중에 exposed beyond app through clipdata.item.geturi() 에러가 나타나서 그 해결방법에 대해서 알아보겠습니다
에러 캡쳐
밑에는 에러 전문입니다
에러 원인
이 에러가 발생한 원인은 프로젝트 진행 중 카메라로 사진을 찍는 경우 파일로 전환해 서버에 전송하는 로직을 구현하는 중에 생긴 에러였습니다
파일을 생성하는데 경로가 file://URI로 생성되서 생기는 원인이었습니다
구글링을 검색한 자세한 내용입니다
Android 7.0 부터 API정책의 변경
안드로이드 7.0 (누가) 부터 앱사이의 공유가 더 엄격해져서 file:// URI 가 직접 노출되지 않도록 content:// URI를 보내고 이에 대해서 임시 액세스 권한을 부여하는 방식으로 변경되었다고 합니다.
이에 대한 자세한 설명은 밑에 공식참고문서(구글번역기로 번역된 글입니다)를 보시됩니다.
출처 : kyome.tistory.com/9
해결 방법
다른 글을 확인해보니 AndroidManifest.xml를 수정해서 해결하는 방법이 많았습니다
저는 file의 경로를 fix해서 해결했습니다
밑에는 해결한 소스입니다
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CAPTURE_CODE:
// 사진 선택
if (resultCode == Activity.RESULT_OK) {
try {
// 현재시간으로 파일명 지정
long now = System.currentTimeMillis();
Date mDate = new Date(now);
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd_hh:mm");
String getTime = simpleDate.format(mDate);
// 카메라로 찍은 데이터를 bitmap으로 받는다
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
// 파일경로 Fix
STATICDATA.IMG_DIR = Environment.getExternalStorageDirectory() + "/tmp";
// 파일 선언
destFile = new File(STATICDATA.IMG_DIR, getTime + ".jpg");
// OutputStream 선언
OutputStream out = null;
destFile.createNewFile();
out = new FileOutputStream(destFile);
// bitmap의 데이터를 file에 넣는다
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
// 이미지 전송
SendImage();
} catch (Exception e) {
// 대기메시지 종료
activity.progressDismiss();
}
}
// 사진 선택 취소
else if (resultCode == activity.RESULT_CANCELED) {
Toast.makeText(activity, "사진 선택 취소", Toast.LENGTH_LONG).show();
}
break;
}
}
여기까지 위의 에러를 해결한 방법이었습니다
안드로이드를 개발하는 분들이 제 해결방법이 참고가 되셨으면 좋겠습니다
반응형
그리드형