android setImage failed (사진을 못 가져올 때)

갤러리에서 사진을 선택할 때 사진을 못 가져오는 현상이 발생하면 아래 두 가지 경우를 생각 할 수 있습니다.

1. Permission Denial

java.lang.SecurityException: Permission Denial: reading 
com.android.providers.media.MediaProvider uri 
content://media/external/images/media/38498 from pid=27232, uid=10472 requires 
android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

이 경우는 External storage에서 URI를 가져올 때 권한에 막혀 가져오지 못하는 경우입니다.
위와 같은 경우는 Manifest에 아래와 같이 권한 설정을 해주면 쉽게 가져올 수 있습니다.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


2. 이미지 용량 초과

 삼성 핸드폰의 경우 'Input agif image larger than 30MB.' 라는 로그 메세지를 보실 수 있
습니다. 일정 용량 이상의 사진파일은 불러오지 못하므로, setImageUri(uri)를 아래와 같이
BitmapFactory를 이용해 이미지의 size를 조정해주시면 불러 올 수 있습니다.

uri = data.getData();
try {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2;
    Bitmap myBitmap = BitmapFactory.decodeStream(view.getContext().getContentResolver().openInputStream(uri), null, options);
    selectedImageView.setImageBitmap(myBitmap);
} catch(Exception e){
    e.getStackTrace();
}