Ý định của máy ảnh

Để thực hiện các thao tác cơ bản với máy ảnh, chẳng hạn như chụp ảnh hoặc quay video bằng ứng dụng máy ảnh mặc định trên thiết bị, bạn không cần phải tích hợp với Thư viện máy ảnh. Thay vào đó, hãy dùng Intent.

Chụp ảnh bằng ứng dụng máy ảnh

Android uỷ quyền các thao tác cho những ứng dụng khác bằng cách gọi Intent. Quá trình này bao gồm 3 phần: Intent, lệnh gọi bắt đầu Activity bên ngoài và một số mã giúp xử lý dữ liệu hình ảnh khi tiêu điểm quay lại hoạt động của bạn.

Đây là một hàm gọi Intent chụp ảnh.

Kotlin

val REQUEST_IMAGE_CAPTURE = 1
 
private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // display error state to the user
    }
}

Java

static final int REQUEST_IMAGE_CAPTURE = 1;
 
private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // display error state to the user
    }
}

Quay video bằng ứng dụng máy ảnh

Bạn cũng có thể gọi một Intent để quay video.

Kotlin

val REQUEST_VIDEO_CAPTURE = 1
 
private fun dispatchTakeVideoIntent() {
    Intent(MediaStore.ACTION_VIDEO_CAPTURE).also { takeVideoIntent ->
        takeVideoIntent.resolveActivity(packageManager)?.also {
            startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE)
        } ?: run {
          //display error state to the user
        }
    }
}

Java

static final int REQUEST_VIDEO_CAPTURE = 1;
 
private void dispatchTakeVideoIntent() {
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
    }
    else {
      //display error state to the user
    }
}

Phương thức startActivityForResult() được bảo vệ bằng một điều kiện giúp gọi resolveActivity(). Mã này trả về thành phần hoạt động đầu tiên có thể xử lý Intent. Hãy thực hiện thao tác kiểm tra này để đảm bảo rằng Intent mà bạn gọi không gây ra lỗi ứng dụng.

Tài nguyên khác

Đối với các thao tác cơ bản của máy ảnh, hãy sử dụng Intent. Nếu không, bạn nên sử dụng thư viện Camera2 và CameraX cho những thao tác phức tạp hơn chụp ảnh hoặc quay video cơ bản.