J'écris une application iOS et je dois pouvoir détecter si l'appareil dispose d'un appareil photo. Auparavant, je vérifiais si l'appareil était un iPhone ou non, car seul l'iPhone a un appareil photo - mais avec le lancement de l'iPod Touch 4, ce n'est plus une option viable. L'application fonctionne sans caméra, mais la présence d'une caméra ajoute des fonctionnalités.
Alors, quelqu'un peut-il me fournir un code qui renvoie qu'il y ait un appareil photo ou non?
Vous pouvez utiliser +isSourceTypeAvailable:
méthode dans UIImagePickerController:
if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
// Has camera
Rapide 3
Comme Juan Boero l'a écrit, vérifiez:
if UIImagePickerController.isSourceTypeAvailable(.camera){ }
Mais j'ajouterais une autre vérification pour voir si l'utilisateur a autorisé l'accès à la caméra comme Apple suggère dans leur exemple PhotoPicker ( exemple PhotoPicker Objective-C ):
* veuillez noter que vous devez importer 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)
}
Si vous utilisez les classes AV Foundation au lieu de UIImagePickerController, vous pouvez faire:
BOOL hasCamera = ([[AVCaptureDevice devices] count] > 0);
Si vous utilisez UIImagePickerController, cela n'en vaut probablement pas la peine, car vous devrez ajouter AVFoundation.framework à votre projet.
Oui, une API est fournie pour cela:
BOOL isCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
Swift:
if UIImagePickerController.isSourceTypeAvailable(.Camera){
//Your code goes here
//For example you can print available media types:
print(UIImagePickerController.availableMediaTypesForSourceType(.Camera))
}
Si vous avez besoin de savoir si l'appareil dispose spécifiquement d'une caméra avant ou arrière, utilisez ceci:
isCameraAvailable = [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];