안드로이드에서 카메라와 갤러리를 사용하여 사진 및 동영상을 캡처하고, 갤러리에서 미디어 파일을 선택하는 방법을 자세히 설명합니다.
1. 카메라 사용
카메라를 사용하여 사진 캡처하기
Step 1: 퍼미션 요청
카메라를 사용하려면 AndroidManifest.xml
에 퍼미션을 추가해야 합니다.
<uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Step 2: 카메라 인텐트 사용
카메라 인텐트를 호출하여 사진을 캡처합니다.
import android.content.Intent; import android.graphics.Bitmap; 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; public class MainActivity extends AppCompatActivity { private static final int REQUEST_IMAGE_CAPTURE = 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 takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); imageView.setImageBitmap(imageBitmap); } } }
Step 3: 레이아웃 파일
res/layout/activity_main.xml
파일에 UI 요소를 추가합니다.
<?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="Take Picture" 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>
Step 4: 사진 저장하기
더 나아가서, 사진을 파일로 저장하고 싶다면 FileProvider
를 사용하여 파일 URI를 생성하고 카메라 인텐트에 전달해야 합니다.
import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.widget.Button; import android.widget.ImageView; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.FileProvider; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class MainActivity extends AppCompatActivity { private static final int REQUEST_IMAGE_CAPTURE = 1; private ImageView imageView; private String currentPhotoPath; @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 -> { dispatchTakePictureIntent(); }); } private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { File photoFile = null; try { photoFile = createImageFile(); } catch (IOException ex) { // 오류 처리 } if (photoFile != null) { Uri photoURI = FileProvider.getUriForFile(this, "com.example.android.fileprovider", photoFile); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } } } private File createImageFile() throws IOException { String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); File image = File.createTempFile( imageFileName, /* prefix */ ".jpg", /* suffix */ storageDir /* directory */ ); currentPhotoPath = image.getAbsolutePath(); return image; } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bitmap bitmap = BitmapFactory.decodeFile(currentPhotoPath); imageView.setImageBitmap(bitmap); } } }
2. 갤러리 사용
갤러리에서 이미지를 선택하기 위해서는 Intent.ACTION_PICK
을 사용하여 갤러리 앱을 호출할 수 있습니다.
Step 1: 갤러리에서 이미지 선택
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.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; 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) { Uri selectedImage = data.getData(); imageView.setImageURI(selectedImage); } } }
Step 2: 레이아웃 파일
res/layout/activity_main.xml
파일에 UI 요소를 추가합니다.
<?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>
종합
안드로이드에서 카메라와 갤러리를 사용하는 방법을 알아보았습니다. 카메라를 사용하여 사진을 캡처하고 저장하는 방법과 갤러리에서 이미지를 선택하는 방법을 다루었습니다. 이를 통해 사용자에게 다양한 멀티미디어 기능을 제공하는 앱을 개발할 수 있습니다.