Camera Permission ในแอปมือถือ — คืออะไร ชนิดการเข้าถึง และทำงานอย่างไร

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-21 เวลาอ่าน: 8 นาที

Camera Permission คือสิทธิ์ที่แอปมือถือขอจากผู้ใช้เพื่อเข้าถึงกล้องของอุปกรณ์ หากไม่มีสิทธิ์นี้ แอปจะไม่สามารถถ่ายภาพ สแกน QR Code หรือเริ่มการโทรด้วยวิดีโอได้ ตามข้อมูลจาก Android Developers, 2024 แอปทั้งหมดที่ใช้กล้องบน Android 6.0 ขึ้นไปจำเป็นต้องขอสิทธิ์ในขณะรันไทม์ผ่านไดอะล็อกของระบบ

ประเด็นสำคัญ

  • Camera Permission คือสิทธิ์ที่จำเป็นสำหรับแอปที่ทำงานกับกล้องของอุปกรณ์บน iOS และ Android
  • Android ใช้ Manifest.permission.CAMERA พร้อมการขอสิทธิ์ในขณะรันไทม์ที่จำเป็นตั้งแต่ API 23
  • iOS ต้องการการเพิ่มคีย์ NSCameraUsageDescription ใน Info.plist พร้อมคำอธิบายเหตุผลในการใช้กล้อง
  • การขอในบริบท (เช่น เมื่อผู้ใช้กดปุ่ม «ถ่ายภาพ») ช่วยเพิ่มอัตราการอนุมัติอย่างมีนัยสำคัญ
  • การปฏิเสธการเข้าถึง ควรจัดการผ่านสถานการณ์ทางเลือก: การเลือกจากแกลเลอรีหรืออัปโหลดไฟล์

Camera Permission คืออะไร?

Camera Permission คือสิทธิ์ของระบบที่ควบคุมการเข้าถึงกล้องของอุปกรณ์มือถือของแอป แพลตฟอร์มมือถือถือว่ากล้องเป็นทรัพยากรที่ละเอียดอ่อนเนื่องจากสามารถบันทึกวิดีโอและถ่ายภาพสภาพแวดล้อมรอบตัวผู้ใช้แบบเรียลไทม์ได้

บน Android สิทธิ์ CAMERA อยู่ในหมวดหมู่ของสิทธิ์อันตรายและจำเป็นต้องมีการขอในขณะรันไทม์ บน iOS การเพิ่มคีย์ NSCameraUsageDescription ใน Info.plist เป็นเงื่อนไขบังคับสำหรับแอปใดๆ ที่เข้าถึงกล้อง หากไม่มีคีย์นี้ แอปจะหยุดทำงานเมื่อพยายามเปิดกล้อง

จากการศึกษาของ Statista (2024) พบว่าแอปมือถือประมาณ 68% ใน 100 อันดับแรกของ App Store ใช้กล้องในรูปแบบใดรูปแบบหนึ่ง ตั้งแต่การสแกน QR Code ไปจนถึงการถ่ายภาพและวิดีโอแบบเต็มรูปแบบ ในขณะเดียวกัน ผู้ใช้ 37% ปฏิเสธการเข้าถึงกล้องหากพวกเขาไม่เข้าใจว่าเหตุใดแอปจึงต้องการสิทธิ์นี้

Camera Permission บน Android

Camera Permission บน Android จะถูกขอผ่านการประกาศในแมนิเฟสต์และการขอในขณะรันไทม์ ตั้งแต่ Android 6.0 เป็นต้นไป ไม่สามารถรับสิทธิ์ CAMERA เฉพาะในขั้นตอนการติดตั้งเท่านั้น — ผู้ใช้ต้องยืนยันการเข้าถึงอย่างชัดเจน

การประกาศใน AndroidManifest.xml

ในการใช้กล้องบน Android คุณต้องเพิ่มการประกาศที่เกี่ยวข้องลงในไฟล์แมนิเฟสต์ หากไม่มี ระบบจะไม่อนุญาตให้แอปเปิดกล้องแม้จะมีการขอในขณะรันไทม์

xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />

แอตทริบิวต์ android:required=false สำหรับ uses-feature อนุญาตให้ติดตั้งแอปบนอุปกรณ์ที่ไม่มีกล้อง ซึ่งสำคัญหากกล้องไม่ใช่องค์ประกอบที่จำเป็นสำหรับการทำงานทั้งหมดของแอป

การขอในขณะรันไทม์ใน Kotlin

การขอ Camera Permission ดำเนินการผ่าน Activity Result API หลังจากได้รับการตอบกลับ แอปจะตรวจสอบสถานะและเริ่มกล้องหรือแสดงคำอธิบาย

kotlin
private val cameraLauncher =
    registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
    if (success) {
        // บันทึกภาพแล้ว
        showPhoto(photoUri)
    }
}

private val permissionLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
    if (granted) {
        openCamera()
    } else {
        showPermissionDenied()
    }
}

fun capturePhoto() {
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        openCamera()
    } else {
        permissionLauncher.launch(Manifest.permission.CAMERA)
    }
}

คุณสมบัติ Android 11+

ตั้งแต่ Android 11 เป็นต้นไป หากผู้ใช้ปฏิเสธการเข้าถึงกล้องสองครั้ง ไดอะล็อกของระบบจะไม่แสดงอีกต่อไป ธง Never Ask Again จะถูกตั้งค่าโดยอัตโนมัติ และแอปสามารถนำทางผู้ใช้ไปยังการตั้งค่าระบบผ่าน Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) เท่านั้น นักพัฒนาควรใส่การตรวจสอบ shouldShowRequestPermissionRationale เพื่อแสดงหน้าจอคำอธิบายล่วงหน้าอย่างทันท่วงที

Camera Permission บน iOS

Camera Permission บน iOS ถูกจัดการผ่านคีย์ NSCameraUsageDescription ใน Info.plist และการเรียก AVCaptureDevice.requestAccess Apple ตรวจสอบเหตุผลของคำขออย่างเคร่งครัด: หากแอปใช้กล้องในลักษณะที่ไม่ชัดเจนสำหรับผู้ใช้ App Store อาจปฏิเสธแอป

การกำหนดค่า Info.plist

เงื่อนไขบังคับสำหรับการเข้าถึงกล้องบน iOS คือการเพิ่มคีย์ NSCameraUsageDescription ลงในไฟล์ Info.plist สตริงค่าจะแสดงในไดอะล็อกของระบบเป็นเหตุผลของคำขอ

xml
<key>NSCameraUsageDescription</key>
<string>แอปต้องการสิทธิ์เข้าถึงกล้องเพื่อสร้างรูปโปรไฟล์และสแกน QR Code</string>

การขอใน Swift

ใน Swift คำขอจะดำเนินการผ่านเมธอดสแตติก AVCaptureDevice.requestAccess หลังจากได้รับการตอบกลับ แอปจะประมวลผลสถานะและเริ่มเซสชันการจับภาพ

swift
import AVFoundation

func requestCameraAccess() {
    AVCaptureDevice.requestAccess(for: .video) { granted in
        DispatchQueue.main.async {
            if granted {
                self.setupCameraSession()
            } else {
                self.showSettingsAlert()
            }
        }
    }
}

private func setupCameraSession() {
    guard let device = AVCaptureDevice.default(.for: .video)
    else { return }
    do {
        let input = try AVCaptureDeviceInput(device: device)
        let session = AVCaptureSession()
        session.addInput(input)
        session.startRunning()
    } catch {
        print("Camera error: \(error)")
    }
}

การตรวจสอบสถานะปัจจุบัน

ก่อนขอเข้าถึงกล้อง ควรตรวจสอบสถานะการอนุญาตปัจจุบันผ่าน AVCaptureDevice.authorizationStatus(for: .video) ซึ่งช่วยหลีกเลี่ยงการเรียกไดอะล็อกของระบบโดยไม่จำเป็นและจัดการกรณีที่ผู้ใช้ตัดสินใจแล้วอย่างถูกต้อง สถานะสามารถเป็น .notDetermined, .restricted, .denied หรือ .authorized

สถานการณ์การใช้กล้อง

Camera Permission ถูกนำไปใช้ในสถานการณ์ต่างๆ ตั้งแต่การสแกนอย่างง่ายไปจนถึงการจับภาพวิดีโอเต็มรูปแบบ แต่ละสถานการณ์มีข้อกำหนดในการดำเนินการและการจัดการสิทธิ์ของตนเอง

การสแกน QR Code และบาร์โค้ด

บน iOS ใช้ AVCaptureMetadataOutput จากเฟรมเวิร์ก AVFoundation สำหรับการสแกน QR Code ซึ่งต้องใช้ Camera Permission บน Android แนะนำให้ใช้ ML Kit Barcode Scanning ของ Google สิ่งสำคัญที่ควรทราบคือการสแกน QR Code ใช้กล้องเอง ไม่ใช่ไลบรารีวิเคราะห์ภาพ ดังนั้น Camera Permission จึงจำเป็น

การถ่ายภาพและวิดีโอ

การถ่ายภาพหรือวิดีโอมาตรฐานต้องใช้ Camera Permission ทั้งบน iOS และ Android บน Android คุณสามารถใช้ Intent(MediaStore.ACTION_IMAGE_CAPTURE) ซึ่งเปิดแอปกล้องของระบบ — ในกรณีนี้ แอประบบจะเป็นผู้ขอสิทธิ์ ไม่ใช่แอปของคุณ อย่างไรก็ตาม สำหรับการแสดงตัวอย่างกล้องภายในแอป (CameraX, Camera2 API) จำเป็นต้องมีสิทธิ์ของคุณเอง

การโทรด้วยวิดีโอและ AR

แอปโทรด้วยวิดีโอ (Zoom, Google Meet) และแอปความเป็นจริงเสริม (ARCore, ARKit) ขอ Camera Permission เพื่อจับภาพวิดีโอจากกล้องหน้าหรือกล้องหลัง ในกรณีนี้ ควรอธิบายคำขออย่างระมัดระวังเป็นพิเศษ เนื่องจากผู้ใช้อาจไม่คาดหวังว่าแอป ลองเฟอร์นิเจอร์แบบ AR จะขอใช้กล้อง

การกำหนดค่าพารามิเตอร์การจับภาพ

เมื่อทำงานกับกล้องบน iOS คุณสามารถกำหนดค่าพารามิเตอร์การจับภาพผ่าน AVCaptureDeviceInput และ AVCapturePhotoOutput บน Android CameraX ช่วยให้การกำหนดค่าง่ายขึ้นผ่าน Callback ของ ImageCapture, VideoCapture และ Preview สำหรับแต่ละการตั้งค่า คุณต้องระบุความละเอียดที่ต้องการ ระดับการซูม และโหมดโฟกัส การเลือกการกำหนดค่าการจับภาพที่ถูกต้องส่งผลโดยตรงต่อประสิทธิภาพของแอปและการใช้แบตเตอรี่

การจัดการข้อผิดพลาดเมื่อทำงานกับกล้อง

ข้อผิดพลาดต่างๆ อาจเกิดขึ้นเมื่อทำงานกับกล้อง กล้องอาจถูกแอปอื่นใช้งานอยู่ ถูกปิดใช้งานในการตั้งค่าความเป็นส่วนตัวของระบบ หรือไม่มีอยู่บนอุปกรณ์ บน Android แนะนำให้จัดการ CameraAccessException เมื่อเรียก CameraManager.openCamera บน iOS ให้ตรวจสอบ AVCaptureDevice.authorizationStatus และจัดการการปฏิเสธอย่างถูกต้องโดยเสนอให้ผู้ใช้ไปที่การตั้งค่าเพื่อเปิดใช้งานการเข้าถึง ตรวจสอบความพร้อมใช้งานของกล้องบนอุปกรณ์ก่อนขอสิทธิ์โดยใช้ PackageManager.hasSystemFeature เสมอ การตรวจสอบดังกล่าวป้องกันคำขอที่ไม่จำเป็นบนอุปกรณ์ที่ไม่มีกล้องและปรับปรุงประสบการณ์ผู้ใช้

การเพิ่มประสิทธิภาพประสิทธิภาพกล้อง

การเพิ่มประสิทธิภาพ เมื่อทำงานกับกล้องเป็นสิ่งสำคัญสำหรับการทำงานที่ราบรื่นของแอป การจับภาพวิดีโอที่ความละเอียดสูงใช้ทรัพยากร CPU และแบตเตอรี่อย่างมาก

บน iOS ให้ใช้ AVCaptureSessionPresetMedium แทนความละเอียดสูงสุดหากแอปไม่ต้องการการจับภาพ 4K บน Android CameraX ช่วยให้คุณกำหนดค่า ImageCapture ด้วยความละเอียดเป้าหมายผ่าน ImageCaptureConfig.Builder นอกจากนี้ การปล่อยกล้องเมื่อแอปเข้าสู่พื้นหลังและรับคืนเมื่อกลับมาก็เป็นสิ่งสำคัญเช่นกัน ซึ่งเป็นแนวทางปฏิบัติมาตรฐานที่ Google และ Apple แนะนำเพื่อรักษาอายุการใช้งานแบตเตอรี่

แนวทางปฏิบัติที่ดีที่สุดในการขอเข้าถึงกล้อง

แนวทางปฏิบัติที่ดีที่สุด ช่วยเพิ่มอัตราการอนุมัติ Camera Permission และหลีกเลี่ยงการถูกปฏิเสธแอปโดย App Store หรือ Google Play

ใช้ตัวอย่างภาพเพื่ออธิบาย

ก่อนแสดงไดอะล็อกของระบบ ให้แสดงหน้าจอพร้อมตัวอย่างวิธีการใช้กล้อง: ภาพอินเทอร์เฟซการสแกน กรอบรูปโปรไฟล์ ตัวอย่าง QR Code ที่รู้จัก คำอธิบายด้วยภาพมีประสิทธิภาพดีกว่าข้อความ ตามข้อมูลจาก UX Movement (2024) การเพิ่มตัวอย่างภาพช่วยเพิ่มอัตราการอนุมัติเป็น 72%

ขอสิทธิ์ในขณะดำเนินการ

อย่าขอ Camera Permission เมื่อเปิดแอปครั้งแรก ผู้ใช้ที่เพิ่งเปิดแอปมีแนวโน้มที่จะปฏิเสธหากพวกเขาไม่เข้าใจบริบท ให้ขอสิทธิ์เมื่อผู้ใช้กดปุ่มที่ต้องใช้กล้องเท่านั้น: «ถ่ายรูปโปรไฟล์», «สแกนโค้ด», «เริ่มการโทรด้วยวิดีโอ» ตัวกระตุ้นตามบริบท ทำให้คำขอมีความหมายมากขึ้น

เสนอทางเลือก

หากผู้ใช้ปฏิเสธ Camera Permission ให้เสนอวิธีอื่นในการดำเนินการ: เลือกรูปภาพจากแกลเลอรี ป้อนข้อมูล QR Code ด้วยตนเอง อัปโหลดภาพจากอุปกรณ์ การปฏิเสธไม่ควรปิดกั้นฟังก์ชันการทำงานของแอปโดยสิ้นเชิง — นี่เป็นข้อกำหนดของคำแนะนำการออกแบบของ Google Play และ App Store

คำถามที่พบบ่อย

จะเกิดอะไรขึ้นหากผู้ใช้ปฏิเสธ Camera Permission?

หากแอปหยุดทำงานเมื่อพยายามเปิดกล้องโดยไม่ได้รับสิทธิ์ คุณจะได้รับข้อผิดพลาด คุณต้องตรวจสอบสถานะล่วงหน้าผ่าน checkSelfPermission บน Android หรือ authorizationStatus บน iOS และเสนอสถานการณ์ทางเลือก

จำเป็นต้องมี Camera Permission สำหรับการสแกน QR Code หรือไม่?

ใช่ การสแกน QR Code ผ่านกล้องต้องใช้ Camera Permission วิธีการทางเลือกคือการใช้ไลบรารีรู้จำ QR Code จากภาพโดยไม่ใช้กล้อง (เช่น การดาวน์โหลดรูปภาพที่มีโค้ดจากแกลเลอรี) แต่ต้องใช้ Photo Library Permission

จะขอ Camera Permission บน Android โดยไม่มี Activity ได้อย่างไร?

ในสถาปัตยกรรม Jetpack Compose คุณสามารถใช้ rememberLauncherForActivityResult กับ ActivityResultContracts.RequestPermission ในฟังก์ชัน composable สำหรับบริการที่ไม่มี UI ไม่สามารถขอสิทธิ์โดยตรงได้ — ต้องส่งต่อการควบคุมไปยัง Activity

ทำไมแอป iOS ของฉันถึงหยุดทำงานเมื่อเปิดกล้อง?

สาเหตุที่เป็นไปได้มากที่สุดคือไม่มีคีย์ NSCameraUsageDescription ใน Info.plist ตั้งแต่ iOS 10 เป็นต้นไป การเข้าถึง AVCaptureDevice โดยไม่มีคีย์นี้จะทำให้แอปหยุดทำงานด้วยข้อยกเว้น NSInvalidArgumentException

จะรีเซ็ต Camera Permission สำหรับการทดสอบได้อย่างไร?

บน Android ให้รีเซ็ตการตั้งค่าแอปผ่าน Settings → Apps → [App] → Permissions บน iOS ให้ใช้ Settings → [App] → Camera toggle สำหรับการทดสอบอัตโนมัติบน iOS คุณสามารถใช้ XCUITest กับ resetAuthorizationStatus

สรุป

  • Camera Permission คือสิทธิ์ในขณะรันไทม์ที่จำเป็นสำหรับการเข้าถึงกล้องบนทั้งสองแพลตฟอร์มมือถือ
  • Android ต้องการการประกาศ CAMERA ในแมนิเฟสต์และการขอผ่าน Activity Result API พร้อมการตรวจสอบ shouldShowRequestPermissionRationale
  • iOS ต้องการคีย์ NSCameraUsageDescription ใน Info.plist และการเรียก AVCaptureDevice.requestAccess(for: .video)
  • การขอตามบริบท เพิ่มอัตราการอนุมัติเป็น 72% ตามข้อมูลจาก UX Movement
  • สถานการณ์การใช้งาน รวมถึงการถ่ายภาพและวิดีโอ การสแกน QR Code การโทรด้วยวิดีโอ และฟังก์ชัน AR
  • สถานการณ์ทางเลือก เมื่อถูกปฏิเสธ (การเลือกจากแกลเลอรี การป้อนด้วยตนเอง) จำเป็นเพื่อให้เป็นไปตามข้อกำหนดของร้านค้าแอป
  • หน้าจอคำอธิบายล่วงหน้า พร้อมคำอธิบายด้วยภาพช่วยลดอัตราการปฏิเสธได้อย่างมาก

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม