728x90
안녕하세요! 이번 포스트에서는 안드로이드 앱에서 카메라를 사용하여 사진을 찍고 표시하는 간단한 예제를 Kotlin으로 작성해 보겠습니다.
1. 프로젝트 설정
먼저 , AndroidManifest.xml 파일에 카메라 및 외부저장소에 대한 권한을 추가합니다.
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 액티비티 및 레이아웃 설정
다음으로, 카메라를 사용할 액티비티를 생성하고, 해당 액티비티의 레이아웃(activity_camera.xml)에 이미지뷰(ImageView)와 버튼(Button)을 추가합니다.
activity_camera.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 이미지뷰: 카메라로 찍은 사진을 표시할 곳 -->
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:adjustViewBounds="true"
android:src="@drawable/placeholder_image" />
<!-- 버튼: 카메라 열기 -->
<Button
android:id="@+id/openCameraButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open Camera"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="24dp"/>
</RelativeLayout>
3.Kotlin 코드 작성
이제, Kotlin 코드로 카메라를 열고 사진을 찍어 이미지 뷰에 표시하는 작업을 합니다.
CameraActivity.kt
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 CameraActivity : AppCompatActivity() {
private val REQUEST_IMAGE_CAPTURE = 101
private val CAMERA_PERMISSION_CODE = 102
private lateinit var imageView: ImageView
private lateinit var openCameraButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_camera)
// XML 레이아웃에서 ImageView 및 Button 참조
imageView = findViewById(R.id.imageView)
openCameraButton = findViewById(R.id.openCameraButton)
// 카메라 버튼 클릭 이벤트 처리
openCameraButton.setOnClickListener {
// 카메라 권한 확인 및 요청
checkCameraPermission()
}
}
// 카메라 권한 확인 및 요청
private fun checkCameraPermission() {
// 카메라 권한이 부여되었는지 확인
if (ContextCompat.checkSelfPermission(
this,
Manifest.permission.CAMERA
) != PackageManager.PERMISSION_GRANTED
) {
// 권한이 없다면 권한 요청
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.CAMERA),
CAMERA_PERMISSION_CODE
)
} else {
// 권한이 이미 허용되었다면 사진 촬영 진행
dispatchTakePictureIntent()
}
}
// 카메라로 사진 찍기
private fun dispatchTakePictureIntent() {
// 카메라 앱을 실행하기 위한 Intent 생성
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
}
// 권한 요청 결과 처리
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == CAMERA_PERMISSION_CODE) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 권한이 허용되면 사진 촬영 진행
dispatchTakePictureIntent()
} else {
// 권한이 거부되었을 때 처리
// (예: 사용자에게 권한이 필요하다는 메시지 표시)
}
}
}
// 찍은 사진 결과 표시
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 사진 찍기 완료 후 결과 이미지를 ImageView에 설정
val imageBitmap = data?.extras?.get("data") as Bitmap
imageView.setImageBitmap(imageBitmap)
}
}
}
카메라 권한 확인 및 요청 (checkCameraPermission())
앱이 카메라에 액세스 할 수 있는 권한이 있는지 확인하고, 없다면 사용자에게 권한을 요청합니다. 이는 checkCameraPermission() 함수에서 수행됩니다.
사용자가 권한을 허용하면
이후 dispatchTakePictureIntent() 함수를 사용하여 카메라 앱을 엽니다.
사용자가 사진을 찍으면 onActivityResult() 함수가 호출되어 찍은 사진을 이미지뷰에 표시합니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Android][코틀린] 비트맵 합치기 PorterDuff.Mode (0) | 2023.12.15 |
---|---|
[Android][Kotlin] ConnectivityManager를 활용하여 현재 인터넷 상태 가져오기 (2) | 2023.12.05 |
[Android/Kotlin] 외부 화면 터치 시 키보드 숨기기 (0) | 2023.11.03 |
[Android][kotlin] EditText 외부 탭하여 키보드 내려가게 하기 (0) | 2023.10.23 |
[Android][kotlin] youtubePlayer 라이브러리 를 이용해 유튜브영상 표시해 주기 (2) | 2023.10.01 |