Estoy escribiendo una aplicación para iOS, y tengo que ser capaz de detectar si el dispositivo tiene una cámara. Anteriormente, me gustaría comprobar si el dispositivo es un iPhone o no, ya que sólo el iPhone tiene una cámara, pero con el lanzamiento del iPod Touch 4 esto ya no es una opción viable. La aplicación funciona sin una cámara, pero la presencia de una cámara que añade una funcionalidad.

Así, ¿alguien puede proporcionarme el código que devuelve si hay una cámara o no?

InformationsquelleAutor Origamiguy | 2010-09-04

8 Comentarios

  1. 159

    Puede utilizar +isSourceTypeAvailable: método en UIImagePickerController:

    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
       //Has camera
    • Cuidado: Si la cámara está «restringido», éste devolverá false, incluso si la cámara lo que existe.
    • Estoy trabajando en una app ahora mismo con la cámara de acceso restringido, pero este es devolver true, de modo que @pulse4life comentario no es correcto (al menos no más – uso de iOS 10). Para la autorización de acceso debe utilizar AVAuthorizationStatus.
    • Acabo de probar esta de nuevo en iOS 10.3.2. Devolverá false si la cámara ha sido restringida en su dispositivo. Por la restricción de la me refiero a ir a Ajustes>General>Restricciones y apagar la cámara (esto es hecha generalmente por un administrador del sistema). Creo que este es el comportamiento esperado de apple quería, ya que no es técnicamente disponibles, incluso aunque una cámara existe.
    • Sin embargo, a veces mi cámara del iPhone no funciona, que puede ser software o hardware relacionado.. ¿Cómo averiguar la cámara de trabajar o no en programación en swift o c objetivo?
    • que quieres decir en los casos en que la cámara no funciona correctamente por alguna razón? Dudo que haya API para detectar que.
    • Por favor, hágamelo saber lo que la api?
    • a lo que me refería, creo que la api no existe

  2. 21

    Si usted está utilizando la AV las clases de la Fundación, en lugar de UIImagePickerController que usted puede hacer:

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

    Si usted está usando UIImagePickerController probablemente no vale la pena, ya que tendrías que añadir AVFoundation.marco de su proyecto.

    • Esto no necesariamente va a funcionar. Si las restricciones se han convertido de la cámara, esto podría salida del micrófono como dispositivo, pero no de la cámara estaría disponible. Mejor usar [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo] count]
  3. 21

    SWIFT 3

    Como Juan Boero escribió comprobar la:

        if UIImagePickerController.isSourceTypeAvailable(.camera){ }

    Pero me gustaría añadir otra comprobación para ver si el usuario ha permitido el acceso a la cámara como apple sugiere en su PhotoPicker ejemplo (PhotoPicker ejemplo Objective-C):

    *tenga en cuenta que usted tiene que importar 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)
    }
    • gracias por el super-práctico ejemplo de código!
    • A partir de Mayo de 2018, El estado de la autorización puede ser uno de {autorizado,notDetermined,negado,restringida} – el estado restringido (es decir, un administrador ha bloqueado al usuario del uso de la cámara en todos) no es manejado anteriormente. Puede que desee switch en lugar de if {} else if {} si esto es importante para el caso de uso.
  4. 19

    Sí, hay una API para hacer precisamente eso:

    BOOL isCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
  5. 11

    Swift:

    if UIImagePickerController.isSourceTypeAvailable(.Camera){
    
        //Your code goes here
        //For example you can print available media types:
    
        print(UIImagePickerController.availableMediaTypesForSourceType(.Camera))
    
        }
  6. 6

    Si usted necesita para saber si el dispositivo específicamente tiene una cámara trasera o frontal, utilice esto:

    isCameraAvailable = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
    • Esta debe ser la buena respuesta ya que esta no depende de la «restringido» de estado
  7. -1

    A la verificación de la cámara está disponible (Swift)

    if(!UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera))
  8. -1

    Puede comprobar la disponibilidad de un determinado tipo de fuente a través del descubrimiento de la sesión (Swift 5):

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

Dejar respuesta

Please enter your comment!
Please enter your name here