Presenting camera permission dialog in iOS 8

后端 未结 9 1582
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-29 17:45

When my app tries to access the camera for the first time on iOS 8, the user is presented with a camera permission dialog, much like the microphone one for microphone access

9条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-29 18:37

    I make an access check on the app delegate.

    import UIKit
    import AVFoundation
    import Photos
    
            func applicationDidBecomeActive(application: UIApplication) {
                cameraAllowsAccessToApplicationCheck()
                internetAvailabilityOnApplicationCheck()
                photoLibraryAvailabilityCheck()
            }
    
        //MARK:- CAMERA ACCESS CHECK
            func cameraAllowsAccessToApplicationCheck()
            {
                let authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
                switch authorizationStatus {
                case .NotDetermined:
                    // permission dialog not yet presented, request authorization
                    AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo,
                        completionHandler: { (granted:Bool) -> Void in
                            if granted {
                                print("access granted")
                            }
                            else {
                                print("access denied")
                            }
                    })
                case .Authorized:
                    print("Access authorized")
                case .Denied, .Restricted:
                alertToEncourageCameraAccessWhenApplicationStarts()
                default:
                    print("DO NOTHING")
                }
            }
            //MARK:- PHOTO LIBRARY ACCESS CHECK
            func photoLibraryAvailabilityCheck()
            {
                if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.Authorized
                {
    
                }
                else
                {
                    var cameraUnavailableAlertController = UIAlertController (title: "Photo Library Unavailable", message: "Please check to see if device settings doesn't allow photo library access", preferredStyle: .Alert)
    
                    var settingsAction = UIAlertAction(title: "Settings", style: .Destructive) { (_) -> Void in
                        let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString)
                        if let url = settingsUrl {
                            UIApplication.sharedApplication().openURL(url)
                        }
                    }
                    var cancelAction = UIAlertAction(title: "Okay", style: .Default, handler: nil)
                    cameraUnavailableAlertController .addAction(settingsAction)
                    cameraUnavailableAlertController .addAction(cancelAction)
                    self.window?.rootViewController!.presentViewController(cameraUnavailableAlertController , animated: true, completion: nil)
                }
            }
            func internetAvailabilityOnApplicationCheck()
            {
                //MARK:- INTERNET AVAILABLITY
                if InternetReachability.isConnectedToNetwork() {
    
                }
                else
                {
                    dispatch_async(dispatch_get_main_queue(), {
    
                        //INTERNET NOT AVAILABLE ALERT
                        var internetUnavailableAlertController = UIAlertController (title: "Network Unavailable", message: "Please check your internet connection settings and turn on Network Connection", preferredStyle: .Alert)
    
                        var settingsAction = UIAlertAction(title: "Settings", style: .Destructive) { (_) -> Void in
                            let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString)
                            if let url = settingsUrl {
                                UIApplication.sharedApplication().openURL(url)
                            }
                        }
                        var cancelAction = UIAlertAction(title: "Okay", style: .Default, handler: nil)
                        internetUnavailableAlertController .addAction(settingsAction)
                        internetUnavailableAlertController .addAction(cancelAction)
                        self.window?.rootViewController!.presentViewController(internetUnavailableAlertController , animated: true, completion: nil)
                    })
                }
            }
    

    *

提交回复
热议问题