web-dev-qa-db-ja.com

iPhoneアプリでカメラの存在を検出しますか?

IOSアプリを作成していますが、デバイスにカメラがあるかどうかを検出できる必要があります。以前は、iPhoneにのみカメラがあるため、デバイスがiPhoneかどうかを確認していましたが、iPod Touch 4の発売により、これはもはや実行可能なオプションではなくなりました。アプリはカメラなしで機能しますが、カメラが存在すると機能が追加されます。

だから、誰かがカメラがあるかどうかを返すコードを私に提供できますか?

61
Origamiguy

UIImagePickerControllerで+isSourceTypeAvailable:メソッドを使用できます。

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

Swift3

Juan 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)
}
21
Boaz Frenkel

UIImagePickerControllerの代わりにAV Foundationクラスを使用している場合、次のことができます。

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

UIImagePickerControllerを使用している場合、AVFoundation.frameworkをプロジェクトに追加する必要があるため、おそらく価値はありません。

21
prewett

はい、それを行うために提供されているAPIがあります。

BOOL isCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
19
Ben Zotto

スイフト:

if UIImagePickerController.isSourceTypeAvailable(.Camera){

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

    print(UIImagePickerController.availableMediaTypesForSourceType(.Camera))

    }
11
Juan Boero

デバイスに具体的にフロントカメラまたはリアカメラがあるかどうかを知る必要がある場合は、これを使用します。

isCameraAvailable = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
6
RawMean