Hier ist meine Swift-Lösung (iOS 8). Ich brauchte die Kamera für das QR-Scannen, also musste ich sie wirklich auffordern.
Dies bietet
Ermutigen Sie den Benutzer, Zulassen zu wählen, wenn vor der Standardeinstellung die Frage zum Zugriff auf die Kamera zulässig ist
Einfache Möglichkeit, auf Einstellungen zuzugreifen, wenn der Benutzer die erste Anforderung abgelehnt hat.
Um es zum Laufen zu bringen, rufen Sie die Kamera in ViewDidAppear / oder ViewDidLoad usw. auf. Ich musste viewDidAppear verwenden, damit meine benutzerdefinierten Einschränkungen für Kameraansichten eingerichtet wurden.
func checkCamera() {
let authStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)
switch authStatus {
case .authorized: break
case .denied: alertToEncourageCameraAccessInitially()
case .notDetermined: alertPromptToAllowCameraAccessViaSetting()
default: alertToEncourageCameraAccessInitially()
}
}
func alertToEncourageCameraAccessInitially() {
let alert = UIAlertController(
title: "IMPORTANT",
message: "Camera access required for QR Scanning",
preferredStyle: UIAlertControllerStyle.alert
)
alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
alert.addAction(UIAlertAction(title: "Allow Camera", style: .cancel, handler: { (alert) -> Void in
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
}))
present(alert, animated: true, completion: nil)
}
func alertPromptToAllowCameraAccessViaSetting() {
let alert = UIAlertController(
title: "IMPORTANT",
message: "Please allow camera access for QR Scanning",
preferredStyle: UIAlertControllerStyle.alert
)
alert.addAction(UIAlertAction(title: "Dismiss", style: .cancel) { alert in
if AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo).count > 0 {
AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo) { granted in
DispatchQueue.main.async() {
self.checkCamera() } }
}
}
)
present(alert, animated: true, completion: nil)
}
Dank jamix oben für den Tipp zur Verwendung von dispatch_async - macht die Reaktion auf die Anzeige der neu eingestellten Kamerafunktion so viel schneller.
Entschuldigung für eine Mischung aus nachlaufenden Verschlüssen. Ich wollte sie ausprobieren.