자바 안드로이드 앱개발 강좌, 카메라, 갤러리 앱과 연동하는 앱 만들기

안드로이드 앱 개발에서 카메라 및 갤러리 연동 기능은 매우 소비자 친화적이며 많은 앱에서 필수적인 기능입니다. 본 강좌에서는 자바를 이용해 간단한 카메라 및 갤러리 연동 앱을 개발할 것입니다. 이 앱은 사용자가 사진을 찍거나 갤러리에서 이미지를 선택할 수 있는 기능을 제공합니다. 이제 이 앱을 만드는 데 필요한 단계별 과정을 살펴보겠습니다.

1. 환경 설정

안드로이드 스튜디오를 설치하고 새로운 프로젝트를 만듭니다. 프로젝트를 만들 때 “Empty Activity” 또는 “Basic Activity”를 선택합니다. 언어는 Java 선택을 하고 “Finish”를 클릭하여 프로젝트 생성을 완료합니다.

2. 필요한 권한 요청

카메라와 갤러리 기능을 실행하기 위해 필요한 권한을 AndroidManifest.xml 파일에 추가해야 합니다.


    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.camera_gallery">
        <uses-permission android:name="android.permission.CAMERA"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
        <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.AppCompat.Light.NoActionBar">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    </manifest>
    

3. UI 디자인

activity_main.xml 파일에서 간단한 사용자 인터페이스를 설계합니다. 두 개의 버튼과 이미지를 표시할 ImageView를 추가합니다.


    <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_camera"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="카메라로 찍기" 
            android:layout_centerHorizontal="true"
            android:layout_marginTop="50dp"/>
    
        <Button
            android:id="@+id/button_gallery"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="갤러리에서 선택하기" 
            android:layout_below="@id/button_camera"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"/>
    
        <ImageView
            android:id="@+id/image_view"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            android:layout_below="@id/button_gallery"
            android:layout_marginTop="20dp"
            android:scaleType="centerCrop"/>
    
    </RelativeLayout>
    

4. MainActivity.java 구현

이제 MainActivity.java 파일을 작성하여 버튼 클릭 이벤트에 따라 카메라 또는 갤러리 앱을 호출하도록 합니다. 우선 버튼의 클릭 리스너를 설정하고 각각의 기능을 구현합니다.


    package com.example.camera_gallery;

    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AppCompatActivity;

    public class MainActivity extends AppCompatActivity {
        private static final int CAMERA_REQUEST = 100;
        private static final int GALLERY_REQUEST = 200;
        
        private ImageView imageView;

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

            imageView = findViewById(R.id.image_view);
            Button buttonCamera = findViewById(R.id.button_camera);
            Button buttonGallery = findViewById(R.id.button_gallery);

            buttonCamera.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);
                }
            });

            buttonGallery.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    startActivityForResult(galleryIntent, GALLERY_REQUEST);
                }
            });
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                if (requestCode == CAMERA_REQUEST) {
                    Bundle extras = data.getExtras();
                    Bitmap imageBitmap = (Bitmap) extras.get("data");
                    imageView.setImageBitmap(imageBitmap);
                } else if (requestCode == GALLERY_REQUEST) {
                    Uri selectedImageUri = data.getData();
                    imageView.setImageURI(selectedImageUri);
                }
            }
        }
    }
    

5. 앱 실행 및 테스트

이제 모든 코드를 작성했으므로 앱을 실행하여 테스트합니다. 에뮬레이터나 실제 스마트폰에서 앱을 실행하면 “카메라로 찍기” 버튼을 눌러 카메라 앱이 열리고 사진을 찍어서 미리 보기 이미지로 설정할 수 있습니다. “갤러리에서 선택하기” 버튼을 눌러 갤러리 앱에서 이미지를 선택하고 미리 보기로 표시할 수 있습니다.

6. 결론

이 강좌에서는 자바를 활용해 카메라와 갤러리 앱을 연동하는 간단한 안드로이드 앱을 개발했습니다. 이러한 기능은 다양한 안드로이드 앱에서 사용할 수 있는 기초적인 기술이며, 이를 바탕으로 보다 복잡한 기능을 추가하여 개인의 필요에 맞는 앱을 개발할 수 있습니다. 안드로이드 개발을 계속 진행하면서 이러한 기초적인 내용을 확장해 나가시면 좋겠습니다.

7. 추가 참고 자료