inflearn logo
강의

Course

Instructor

Yoon Jae-seong's Java-based Android 9.0 (pie) App Development Advanced 3-step

갤러리에서 이미지 가져오기가 안됩니다.

509

sexyboy04142377

1 asked

0

강사님 갤러리에서 이미지 가져오기가 안됩니다.

권한등록도 하고 소스코드 강사님이 하신거랑 똑같이 복사 붙여넣기 했는데도

이미지를 가져오지 못하고 있습니다.

확인 부탁드립니다.

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>

이미지가져오기 android java

Answer 1

0

softcampus

안드로이드 10 부터 외부 저장소 정책이 변경되었습니다.

안드로이드 10 외부 저장소로 검색을 해보시기 바랍니다~

패키지 구분에 대해 궁금한게 있습니다

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