갤러리에서 이미지 가져오기가 안됩니다.
509
1 asked
강사님 갤러리에서 이미지 가져오기가 안됩니다.
권한등록도 하고 소스코드 강사님이 하신거랑 똑같이 복사 붙여넣기 했는데도
이미지를 가져오지 못하고 있습니다.
확인 부탁드립니다.
package kr.co.softcampus.gallerybasic;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
String [] permission_list = {
Manifest.permission.READ_EXTERNAL_STORAGE
};
ImageView image1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image1 = (ImageView)findViewById(R.id.imageView);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(permission_list, 0);
}
}
public void getImageBtn(View view){
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try{
// 사진을 선택하고 왔을 때만 처리한다.
if(resultCode == RESULT_OK){
// 선택한 이미지를 지칭하는 Uri 객체를 얻어온다.
Uri uri = data.getData();
// Uri 객체를 통해서 컨텐츠 프로바이더를 통해 이미지의 정보를 가져온다.
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);
cursor.moveToNext();
// 사용자가 선택한 이미지의 경로 데이터를 가져온다.
int index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
String source = cursor.getString(index);
// 경로 데이터를 통해서 이미지 객체를 생성한다
Bitmap bitmap = BitmapFactory.decodeFile(source);
// 이미지의 크기를 조정한다.
Bitmap bitmap2 = resizeBitmap(1024, bitmap);
// 회전 각도 값을 가져온다.
float degree = getDegree(source);
Bitmap bitmap3 = rotateBitmap(bitmap2, degree);
image1.setImageBitmap(bitmap3);
}
}catch(Exception e){
e.printStackTrace();
}
}
public Bitmap resizeBitmap(int targetWith, Bitmap source){
double ratio = (double)targetWith / (double)source.getWidth();
int targetHeight = (int)(source.getHeight() * ratio);
Bitmap result = Bitmap.createScaledBitmap(source, targetWith, targetHeight, false);
if(result != source){
source.recycle();
}
return result;
}
public float getDegree(String source){
try{
ExifInterface exif = new ExifInterface(source);
int degree = 0;
int ori = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
switch (ori){
case ExifInterface.ORIENTATION_ROTATE_90 :
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180 :
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270 :
degree = 270;
break;
}
return (float)degree;
}catch(Exception e){
e.printStackTrace();
}
return 0.0f;
}
public Bitmap rotateBitmap(Bitmap bitmap, float degree){
try{
int width = bitmap.getWidth();
int height = bitmap.getHeight();
Matrix matrix = new Matrix();
matrix.postRotate(degree);
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
bitmap.recycle();
return bitmap2;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kr.co.softcampus.gallerybasic">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.GalleryBasic">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
</manifest>
Answer 1
패키지 구분에 대해 궁금한게 있습니다
0
7
1
에러
0
213
1
툴바 타이틀 폰트 설정하는거 어떻게 하나요...
0
357
1
버튼에 백그라운드 이미지 설정 후 클릭 시 이벤트 처리
0
447
1
액션바를 제거하고 버튼으로 배치해서 옵션 메뉴를 구성하고 싶습니다
0
412
1
getExternalStoragePublicDirectory() 안드로이드 10
0
1003
3
디렉토리
0
285
4
썸네일
0
246
1
강의ppt공유가능하실까요
0
173
1
소스코드 마지막강좌에 게시부탁드립니다
0
190
1
리스트 뷰 네트워크 동기 할때 오류 관련 질문 드립니다.
0
311
1
네트워크가 다를경우 서버와접속이 불가능한가요?
0
219
2
getPackagename()함수가 작동 안할때 가 있을까요.
0
225
1
쓰레드 질문 입니다.
0
354
4
강좌 순서에서 맨 마지막 소스코드들어가봤는데 파일이 없습니다.
0
256
2
전역변수를 클레스 매서드에서 사용할때.
0
295
2
액션바 커스터 마이징 할때 한 다음에 여기에 팝업메뉴 추가 가능한가요...
0
211
2
해결안되는 에러.. Failed to find configured root that contains /null/
0
2580
2
manifest에 프로바이더 네임 이 바꼈다고 합니다.
1
726
1
post방식으로 배열 데이터 넘길때 질문 입니다.
0
743
2
16:47 부분에 질문 있습니다.
0
185
1
getExternalStorageDirectory 함수가 없어요
0
286
1
E/SchedPolicy: set_timerslack_ns write failed: Operation not permitted
0
715
1
영상이 잘못올라왔네요
0
111
1

