Je développe une application vidéo très simple. J'utilise le contrôle officiel: UIImagePickerController.
Voici le problème. Lors de la présentation de UIImagePickerController pour la première fois, iOS demandera l'autorisation. L'utilisateur peut cliquer sur oui ou non. Si l'utilisateur clique sur non, le contrôle n'est pas ignoré. Au lieu de cela, si l'utilisateur continue de cliquer sur le bouton de démarrage, les minuteries continuent alors que l'écran est toujours noir, et l'utilisateur ne peut pas arrêter les minuteries ou revenir en arrière. La seule chose que l'utilisateur peut faire est de tuer l'application. La prochaine fois que l'UIImagePickerController est présenté, il s'agit toujours d'un écran noir et l'utilisateur ne peut pas revenir en arrière en cliquant sur Démarrer.
Je me demandais si c'était un bug. Existe-t-il un moyen de détecter l'autorisation de la caméra afin que nous puissions décider d'afficher le UIImagePickerController ou non?
UIImageViewController
est noté comme étant ajouté dans iOS 2.0, et la documentation n'a jamais été annotée pour indiquer que AVAuthorizationStatus doit être utilisé, mais vit dans un autre cadre.Réponses:
Vérifiez
AVAuthorizationStatus
et manipulez correctement les boîtiers.la source
#import <AVFoundation/AVFoundation.h>
ou similaireBundle ID
l'application à chaque fois que je veux tester cela. Une douleur dans les fesses, mais quelque chose, au moins. N'oubliez pas deSwift 4 et plus récent
Assurez-vous de:
Le code ci-dessous vérifie tous les états d'autorisation possibles:
Depuis iOS 10, vous devez spécifier la
NSCameraUsageDescription
clé dans votre Info.plist pour pouvoir demander l'accès à la caméra, sinon votre application se plantera lors de l'exécution. Voir API nécessitant des descriptions d'utilisation .En guise de remarque intéressante, saviez-vous qu'iOS tue l'application si elle est en cours d'exécution pendant que vous modifiez les autorisations de sa caméra dans les paramètres?
Depuis le forum des développeurs Apple:
la source
Solution rapide
Et puis pour l'utiliser, vous faites
la source
En plus de la réponse de @Raptor, il convient de mentionner ce qui suit. Vous pouvez recevoir l'erreur suivante à partir d'iOS 10:
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Pour résoudre ce problème, assurez-vous de gérer les résultats du thread principal comme suit (Swift 3):
la source
Spécifiez d'abord la clé NSCameraUsageDescription dans Info.plist. Vérifiez ensuite AVAuthorizationStatus si Authorized, puis présentez UIImagePickerController. Ça va marcher.
la source
Swift: utilisation d'AVFoundation
@IBAction func cameraButtonClicked (expéditeur: AnyObject) {
la source