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

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