이 글에서는 Kotlin을 사용하여 안드로이드 앱에서 카메라를 실행하고, 촬영한 사진을 화면에 표시하는 방법을 단계별로 자세히 살펴봅니다. 초보자도 따라 할 수 있도록 각 단계를 코드 예제와 함께 설명합니다.
1단계: 새 프로젝트 생성
Android Studio를 실행한 후 File → New Project를 선택하고, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.
2단계: 레이아웃 작성 (res/layout/activity_main.xml)
아래 코드를 res/layout/activity_main.xml 파일에 추가합니다. 이 레이아웃은 화면 하단 중앙에 위치한 '사진 촬영' 버튼과, 그 위를 꽉 채우는 ImageView로 구성됩니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="Take a Photo" />
<ImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/button"
android:layout_alignParentTop="true" />
</RelativeLayout>
3단계: 메인 액티비티 작성 (src/MainActivity.kt)
다음으로 MainActivity.kt에 아래 코드를 추가합니다. 이 코드는 카메라 권한을 확인하고 요청하며, 버튼을 누르면 카메라 앱을 호출하고, 촬영된 이미지를 Bitmap으로 받아 ImageView에 표시하는 역할을 합니다.
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity() {
private val cameraRequest = 1888
lateinit var imageView: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
// 카메라 권한이 거부된 경우 권한 요청
if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED)
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA), cameraRequest)
imageView = findViewById(R.id.imageView)
val photoButton: Button = findViewById(R.id.button)
photoButton.setOnClickListener {
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, cameraRequest)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == cameraRequest) {
val photo: Bitmap = data?.extras?.get("data") as Bitmap
imageView.setImageBitmap(photo)
}
}
}
4단계: 매니페스트 설정 (AndroidManifest.xml)
아래와 같이 AndroidManifest.xml을 작성합니다. 한 가지 주의할 점은, 카메라 권한을 런타임에 요청하더라도 매니페스트에 권한 선언이 반드시 포함되어야 한다는 것입니다. 따라서 <manifest> 태그 내부에 다음 줄을 추가하는 것이 좋습니다.
<uses-permission android:name="android.permission.CAMERA" />
전체 매니페스트 파일은 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<uses-permission android:name="android.permission.CAMERA" />
<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/AppTheme">
<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>
앱 실행하기
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘
을 클릭하세요. 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 앱의 기본 화면이 나타납니다.

추가 팁: 최신 API에서의 대안
startActivityForResult()와 onActivityResult()는 현재 공식적으로 지원 중단(deprecated)된 방식입니다. 최신 안드로이드 프로젝트에서는 Activity Result API(registerForActivityResult)를 사용하는 것이 권장되므로, 새 프로젝트를 개발할 때는 해당 API를 활용하는 것이 좋습니다.