Android

Android - Camera Gallery 기능 활용

임베디드 친구 2024. 11. 27. 09:09
반응형

안녕하세요, '소프트웨어 공장'입니다! 오늘은 안드로이드의 미디어 기능을 활용하는 방법을 간단한 예제를 통해 알아보겠습니다. 안드로이드에서는 사진이나 비디오 촬영, 갤러리에서 이미지 선택 등 다양한 미디어 기능을 손쉽게 구현할 수 있습니다. 이번 포스팅에서는 간단한 예제를 통해 카메라와 갤러리를 활용하여 이미지를 앱에 표시하는 방법을 소개하겠습니다.

목표

이 포스팅을 통해 여러분은 다음과 같은 내용을 배울 수 있습니다:

  1. 카메라를 이용하여 사진 촬영하기
  2. 갤러리에서 이미지를 선택하기
  3. 선택된 이미지를 ImageView에 표시하기

구현 내용

우리는 다음 기능들을 구현해볼 것입니다:

  • 사용자가 버튼을 클릭하면 카메라를 열어 사진을 찍을 수 있도록 합니다.
  • 또 다른 버튼을 클릭하면 갤러리를 열어 이미지를 선택할 수 있도록 합니다.
  • 촬영한 사진이나 선택한 이미지를 앱 화면에 표시합니다.

준비 사항

먼저, 이 기능들을 구현하기 위해 필요한 권한을 매니페스트 파일에 추가해야 합니다. 카메라 사용과 갤러리 접근을 위해 다음과 같은 권한이 필요합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mediademo">

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

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.MediaDemo">
        <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>

레이아웃 작성

다음으로, 간단한 UI를 작성하겠습니다. 버튼 두 개와 이미지를 표시할 ImageView를 포함한 레이아웃입니다.

<!-- res/layout/activity_main.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <Button
        android:id="@+id/btn_take_photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Take Photo" />

    <Button
        android:id="@+id/btn_choose_from_gallery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Choose from Gallery" />

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginTop="16dp"
        android:scaleType="centerCrop" />

</LinearLayout>

Kotlin 코드 작성

이제 Kotlin으로 기능을 구현해보겠습니다. 카메라와 갤러리의 이미지를 불러와 ImageView에 표시하는 방법입니다.

// MainActivity.kt
package com.example.mediademo

import android.app.Activity
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    private lateinit var imageView: ImageView
    private val REQUEST_IMAGE_CAPTURE = 1
    private val REQUEST_IMAGE_PICK = 2

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnTakePhoto: Button = findViewById(R.id.btn_take_photo)
        val btnChooseFromGallery: Button = findViewById(R.id.btn_choose_from_gallery)
        imageView = findViewById(R.id.image_view)

        btnTakePhoto.setOnClickListener {
            val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            if (takePictureIntent.resolveActivity(packageManager) != null) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
            }
        }

        btnChooseFromGallery.setOnClickListener {
            val pickPhotoIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
            startActivityForResult(pickPhotoIntent, REQUEST_IMAGE_PICK)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK) {
            when (requestCode) {
                REQUEST_IMAGE_CAPTURE -> {
                    val imageBitmap = data?.extras?.get("data") as Bitmap
                    imageView.setImageBitmap(imageBitmap)
                }
                REQUEST_IMAGE_PICK -> {
                    val selectedImageUri: Uri? = data?.data
                    selectedImageUri?.let {
                        imageView.setImageURI(it)
                    }
                }
            }
        }
    }
}

코드 설명

  1. 카메라를 이용하여 사진 촬영하기
    • btnTakePhoto 버튼을 클릭하면 MediaStore.ACTION_IMAGE_CAPTURE 인텐트를 통해 기본 카메라 앱을 실행합니다.
    • 사진을 촬영하고 나면, onActivityResult() 메소드에서 결과를 받아 imageView에 촬영한 이미지를 표시합니다.
  2. 갤러리에서 이미지 선택하기
    • btnChooseFromGallery 버튼을 클릭하면 Intent.ACTION_PICK을 통해 갤러리를 엽니다.
    • 사용자가 이미지를 선택하면, 선택한 이미지의 URI를 imageView에 표시합니다.
  3. onActivityResult() 메소드
    • onActivityResult() 메소드는 다른 액티비티(카메라 앱이나 갤러리)에서 돌아올 때 호출됩니다. 여기서 요청 코드와 결과 코드를 확인하여 적절한 동작을 수행합니다.

결론

이 예제를 통해 간단하게 카메라와 갤러리의 이미지를 안드로이드 앱에서 활용하는 방법을 알아보았습니다. 안드로이드의 미디어 기능을 활용하여 사용자가 자신의 이미지를 추가할 수 있는 기능은 많은 앱에서 중요한 요소 중 하나입니다. 이 예제를 바탕으로 여러분의 프로젝트에 더욱 다양하고 창의적인 미디어 기능을 추가해 보세요!

반응형