ความตั้งใจของกล้อง

หากต้องการดำเนินการพื้นฐานของกล้อง เช่น การจับภาพหรือวิดีโอโดยใช้แอปพลิเคชันกล้องเริ่มต้นของอุปกรณ์ คุณไม่จำเป็นต้องผสานรวมกับคลังกล้อง ให้ใช้ Intent แทน

ถ่ายรูปด้วยแอปกล้องถ่ายรูป

Android มอบสิทธิ์การดำเนินการให้กับแอปพลิเคชันอื่นๆ โดยการเรียกใช้ Intent กระบวนการนี้ประกอบด้วย 3 ส่วน ได้แก่ ตัว Intent เอง การเรียกให้เริ่ม Activity ภายนอก และโค้ดบางอย่างเพื่อจัดการข้อมูลรูปภาพเมื่อโฟกัสกลับมาที่กิจกรรมของคุณ

นี่คือฟังก์ชันที่เรียกใช้ Intent เพื่อถ่ายภาพ

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
    }
}

บันทึกวิดีโอด้วยแอปกล้อง

หรือจะเรียกใช้ Intent เพื่อบันทึกวิดีโอก็ได้

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
    }
}

เมธอด startActivityForResult() ได้รับการปกป้องโดยเงื่อนไขที่เรียก resolveActivity() ซึ่งจะแสดงผลคอมโพเนนต์กิจกรรมแรกที่จัดการกับ Intent ได้ ดำเนินการตรวจสอบนี้เพื่อให้มั่นใจว่าคุณกำลังเรียกใช้ Intent ที่ไม่ทำให้แอปของคุณขัดข้อง

แหล่งข้อมูลเพิ่มเติม

สำหรับการดำเนินการพื้นฐานของกล้อง ให้ใช้ Intent ไม่เช่นนั้น เราขอแนะนำให้ใช้ไลบรารี Camera2 และ CameraX สำหรับสิ่งที่ซับซ้อนกว่าการจับภาพหรือวิดีโอธรรมดา