Programing

iPhone 앱에서 카메라의 존재를 감지 하시겠습니까?

crosscheck 2020. 11. 29. 09:54
반응형

iPhone 앱에서 카메라의 존재를 감지 하시겠습니까?


iOS 앱을 작성 중이며 기기에 카메라가 있는지 감지 할 수 있어야합니다. 이전에는 iPhone에만 카메라가 있기 때문에 장치가 iPhone인지 아닌지 확인했지만 iPod Touch 4가 출시되면서 더 이상 실행 가능한 옵션이 아닙니다. 앱은 카메라없이 작동하지만 카메라가 있으면 기능이 추가됩니다.

그렇다면 누구나 카메라가 있는지 여부를 반환하는 코드를 제공 할 수 있습니까?


+isSourceTypeAvailable:UIImagePickerController에서 메서드를 사용할 수 있습니다 .

if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
   // Has camera

SWIFT 3

으로 후안 Boero가 쓴를 확인 :

    if UIImagePickerController.isSourceTypeAvailable(.camera){ }

그러나 Apple이 PhotoPicker 예제 ( PhotoPicker 예제 Objective-C ) 에서 제안한대로 사용자가 카메라에 대한 액세스를 허용했는지 확인하기 위해 또 다른 검사를 추가합니다 .

* AVFoundation을 가져와야합니다.

let authStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)

if authStatus == AVAuthorizationStatus.denied {
    // Denied access to camera
    // Explain that we need camera access and how to change it.
    let dialog = UIAlertController(title: "Unable to access the Camera", message: "To enable access, go to Settings > Privacy > Camera and turn on Camera access for this app.", preferredStyle: UIAlertControllerStyle.alert)

    let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)

    dialog.addAction(okAction)
    self.present(dialog, animated:true, completion:nil)

} else if authStatus == AVAuthorizationStatus.notDetermined {     // The user has not yet been presented with the option to grant access to the camera hardware.
    // Ask for it.
    AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: { (grantd) in
    // If access was denied, we do not set the setup error message since access was just denied.
       if grantd {
       // Allowed access to camera, go ahead and present the UIImagePickerController.
            self.showImagePickerForSourceType(sourceType: UIImagePickerControllerSourceType.camera)
        }
    })
} else {

    // Allowed access to camera, go ahead and present the UIImagePickerController.
    self.showImagePickerForSourceType(sourceType: UIImagePickerControllerSourceType.camera)

}

func showImagePickerForSourceType(sourceType: UIImagePickerControllerSourceType) {

    let myPickerController = UIImagePickerController()
    myPickerController.delegate = self;
    myPickerController.sourceType = sourceType  
    self.present(myPickerController, animated: true, completion: nil)
}

UIImagePickerController 대신 AV Foundation 클래스를 사용하는 경우 다음을 수행 할 수 있습니다.

BOOL hasCamera = ([[AVCaptureDevice devices] count] > 0);

UIImagePickerController를 사용하는 경우 프로젝트에 AVFoundation.framework를 추가해야하므로 그만한 가치가 없을 것입니다.


예,이를 위해 제공되는 API가 있습니다.

BOOL isCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

빠른:

if UIImagePickerController.isSourceTypeAvailable(.Camera){

    //Your code goes here
    //For example you can print available media types:

    print(UIImagePickerController.availableMediaTypesForSourceType(.Camera))

    }

장치에 특별히 전면 또는 후면 카메라가 있는지 알아야하는 경우 다음을 사용하십시오.

isCameraAvailable = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];

카메라 확인 가능 (Swift)

if(!UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera))

검색 세션 (Swift 5)을 사용하여 특정 소스 유형의 가용성을 확인할 수 있습니다.

let discovery = AVCaptureDevice.DiscoverySession.init(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back)
let isWideAngleCameraSupported = !discovery.devices.isEmpty

참고 URL : https://stackoverflow.com/questions/3643949/detect-existence-of-camera-in-iphone-app

반응형