Android Gallery

안드로이드에서 갤러리 기능을 통해 사용자가 장치의 이미지, 비디오, 오디오 파일을 선택하도록 할 수 있습니다. 이는 주로 Intent.ACTION_PICK 인텐트를 사용하여 이루어집니다. 여기서는 갤러리에서 이미지를 선택하는 방법을 상세히 설명하고 예제를 포함합니다.

1. 갤러리 사용 소개

갤러리에서 이미지를 선택하는 과정은 크게 다음과 같은 단계로 구성됩니다:

  1. 퍼미션 추가: 외부 저장소에 접근할 수 있는 권한을 요청합니다.
  2. 갤러리 호출: Intent.ACTION_PICK 인텐트를 사용하여 갤러리 앱을 호출합니다.
  3. 이미지 처리: 사용자가 선택한 이미지를 앱 내에서 처리합니다.

2. 갤러리에서 이미지 선택하기

Step 1: 퍼미션 추가

갤러리에서 이미지를 선택하려면 외부 저장소에 접근할 수 있는 권한이 필요합니다. 이를 위해 AndroidManifest.xml 파일에 퍼미션을 추가합니다.

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

Step 2: 갤러리 호출 및 이미지 처리

이제 갤러리에서 이미지를 선택하고 처리하는 코드를 작성해보겠습니다.

Java 코드 (MainActivity.java):

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_IMAGE_PICK = 1;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        imageView = findViewById(R.id.imageView);

        // 버튼 클릭 시 갤러리 호출
        button.setOnClickListener(v -> {
            Intent pickPhoto = new Intent(Intent.ACTION_PICK,
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(pickPhoto , REQUEST_IMAGE_PICK);
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK && data != null) {
            Uri selectedImage = data.getData();
            imageView.setImageURI(selectedImage); // 선택한 이미지 표시
        }
    }
}

레이아웃 파일 (res/layout/activity_main.xml):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Pick Image"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"/>

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"/>
</RelativeLayout>

3. 퍼미션 처리

갤러리 접근 권한이 부여되지 않은 경우를 처리하기 위해 런타임 권한 요청을 추가할 수 있습니다.

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_IMAGE_PICK = 1;
    private static final int REQUEST_PERMISSION_READ_EXTERNAL_STORAGE = 2;
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        imageView = findViewById(R.id.imageView);

        button.setOnClickListener(v -> {
            // 퍼미션 체크
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                        REQUEST_PERMISSION_READ_EXTERNAL_STORAGE);
            } else {
                openGallery();
            }
        });
    }

    private void openGallery() {
        Intent pickPhoto = new Intent(Intent.ACTION_PICK,
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(pickPhoto, REQUEST_IMAGE_PICK);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_PERMISSION_READ_EXTERNAL_STORAGE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openGallery();
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK && data != null) {
            Uri selectedImage = data.getData();
            imageView.setImageURI(selectedImage);
        }
    }
}

4. 종합

위의 코드와 설명을 통해 안드로이드 앱에서 갤러리 기능을 사용하여 이미지를 선택하고 이를 처리하는 방법을 배웠습니다. 여기서는 갤러리 접근을 위한 퍼미션 처리, 인텐트를 사용하여 갤러리를 호출하는 방법, 그리고 선택한 이미지를 이미지뷰에 표시하는 방법을 다루었습니다.

이 기본적인 예제를 확장하여 더 복잡한 이미지 처리 기능을 추가할 수 있습니다. 예를 들어, 선택한 이미지를 파일로 저장하거나, 이미지를 편집하거나, 업로드하는 기능을 구현할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *