반응형
안녕하세요
안드로이드 스튜디오[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;
}
}
여기까지 위의 에러를 해결한 방법이었습니다
안드로이드를 개발하는 분들이 제 해결방법이 참고가 되셨으면 좋겠습니다
반응형
그리드형
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[Android Studio] 코드 자동 정렬하기 (0) | 2021.04.30 |
---|---|
[Android Studio] Bitmap을 File로 변환하기 (0) | 2021.04.29 |
[Android Studio] Fragment에서 갤러리의 이미지 가져와서 서버로 전송하기 (0) | 2021.04.29 |
[Android Studio] java.lang.IllegalArgumentException: @PartMap parameters can only be used with multipart encoding. 에러 해결방법 (0) | 2021.04.29 |
[Android Studio] 비트맵(Bitmap) <-> 바이트(Byte) 변환 방법 (2) | 2021.04.27 |