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