Обнаружить наличие камеры в приложении iPhone? - PullRequest
61 голосов
/ 05 сентября 2010

Я пишу приложение для iOS, и мне нужно уметь определять, есть ли на устройстве камера. Раньше я проверял, является ли устройство iPhone или нет, так как только у iPhone есть камера - но с запуском iPod Touch 4 это больше не жизнеспособный вариант. Приложение работает без камеры, но наличие камеры добавляет функциональность.

Итак, кто-нибудь может предоставить мне код, который возвращает, есть ли камера или нет?

Ответы [ 7 ]

159 голосов
/ 05 сентября 2010

Вы можете использовать +isSourceTypeAvailable: метод в UIImagePickerController:

if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
   // Has camera
21 голосов
/ 22 января 2014

Если вы используете классы AV Foundation вместо UIImagePickerController, вы можете сделать:

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

Если вы используете UIImagePickerController, это, вероятно, не стоит, так как вам придется добавить AVFoundation.framework в ваш проект.

20 голосов
/ 03 мая 2017

SWIFT 3

Как Хуан Боэро написал чек:

    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)
}
19 голосов
/ 05 сентября 2010

Да, для этого есть API:

BOOL isCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
11 голосов
/ 13 ноября 2015

Swift:

if UIImagePickerController.isSourceTypeAvailable(.Camera){

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

    print(UIImagePickerController.availableMediaTypesForSourceType(.Camera))

    }
6 голосов
/ 04 июля 2014

Если вам необходимо узнать, имеет ли устройство определенно переднюю или заднюю камеру, используйте это:

isCameraAvailable = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
0 голосов
/ 30 августа 2016

Для проверки камеры доступно (Swift)

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