Ich entwickle eine sehr einfache Video-App. Ich benutze das offizielle Steuerelement: UIImagePickerController.
Hier ist das Problem. Bei der erstmaligen Präsentation des UIImagePickerController fragt iOS nach der Erlaubnis. Der Benutzer kann auf Ja oder Nein klicken. Wenn der Benutzer auf Nein klickt, wird das Steuerelement nicht geschlossen. Wenn der Benutzer weiterhin auf die Startschaltfläche klickt, werden die Timer fortgesetzt, während der Bildschirm immer schwarz ist, und der Benutzer kann die Timer nicht stoppen oder zurückgehen. Der Benutzer kann nur die App beenden. Wenn der UIImagePickerController das nächste Mal angezeigt wird, ist er immer noch schwarz und der Benutzer kann nicht zurückkehren, wenn er auf Start klickt.
Ich habe mich gefragt, ob es ein Fehler ist. Gibt es eine Möglichkeit, die Berechtigung der Kamera zu erkennen, um zu entscheiden, ob der UIImagePickerController angezeigt werden soll oder nicht?
quelle
UIImageViewController
wird in iOS 2.0 hinzugefügt, und die Dokumente wurden nie mit Anmerkungen versehen, um anzuzeigen, dass der AVAuthorizationStatus verwendet werden sollte, sondern in einem anderen Framework ausgeführt wird.Antworten:
Überprüfen Sie
AVAuthorizationStatus
die Fälle und behandeln Sie sie ordnungsgemäß.quelle
#import <AVFoundation/AVFoundation.h>
oder ähnlichesBundle ID
die App jedes Mal zu ändern, wenn ich dies testen möchte. Ein Schmerz im Hintern, aber zumindest etwas.Swift 4 und neuer
Stellen Sie sicher, dass:
Der folgende Code prüft auf alle möglichen Berechtigungszustände:
Seit iOS 10 müssen Sie
NSCameraUsageDescription
in Ihrer Info.plist einen Schlüssel angeben, um nach dem Zugriff auf die Kamera fragen zu können. Andernfalls stürzt Ihre App zur Laufzeit ab. Siehe APIs, für die Verwendungsbeschreibungen erforderlich sind .Wussten Sie als interessante Randnotiz, dass iOS die App beendet, wenn sie ausgeführt wird, während Sie die Kameraberechtigungen in den Einstellungen ändern?
Aus dem Apple Developer Forum:
quelle
Schnelle Lösung
Und dann, um es zu benutzen, tun Sie es
quelle
Als Ergänzung zur Antwort von @Raptor sollte Folgendes erwähnt werden. Ab iOS 10 wird möglicherweise die folgende Fehlermeldung angezeigt:
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.
Um dies zu beheben, stellen Sie sicher, dass Sie die Ergebnisse des Hauptthreads wie folgt behandeln (Swift 3):
quelle
Geben Sie zuerst den NSCameraUsageDescription-Schlüssel in Info.plist an. Überprüfen Sie dann AVAuthorizationStatus, falls autorisiert, und präsentieren Sie den UIImagePickerController. Es wird klappen.
quelle
Swift: Verwenden von AVFoundation
@IBAction func cameraButtonClicked (Absender: AnyObject) {
quelle