2014-09-19 93 views
3

当应用程序尝试访问iOS中的相机API时,显示的操作系统级别为alertview。 用户在这里必须允许访问摄像机或禁用访问。当用户选择允许访问iOS中的相机时收到通知

我的问题是如何得到用户所做选择的通知..?

说他选择不允许访问比在那里提出的任何通知,我可以用在我的应用程序..?

任何帮助表示赞赏。

回答

23

您可以检查当前授权状态并手动请求授权,而不是让操作系统在相机出现时显示警报视图。这样,当用户接受/拒绝您的请求时,您会得到一个回调。

在SWIFT:

let status = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) 
if status == AVAuthorizationStatus.Authorized { 
    // Show camera 
} else if status == AVAuthorizationStatus.NotDetermined { 
    // Request permission 
    AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (granted) -> Void in 
     if granted { 
      // Show camera 
     } 
    }) 
} else { 
    // User rejected permission. Ask user to switch it on in the Settings app manually 
} 

如果用户之前已经拒绝了这一要求,称requestAccessForMediaType将不会显示警觉,并会立即执行完毕块。在这种情况下,您可以选择显示自定义警报并将用户链接到设置页面。更多关于这个here的信息。

+1

谢谢,作品完美! 不要忘记导入AVFoundation。 – 2015-05-13 17:30:56

0

从KENS答案两者,我创建了这个斯威夫特3协议来处理权限访问:

import AVFoundation 

protocol PermissionHandler { 
    func handleCameraPermissions(completion: @escaping ((_ error: Error?) -> Void)) 
} 

extension PermissionHandler { 

    func handleCameraPermissions(completion: @escaping ((_ error: Error?) -> Void)) { 
     let status = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) 

     switch status { 
     case .authorized: 
      completion(nil) 
     case .restricted: 
      completion(ClientError.noAccess) 
     case .notDetermined: 
      AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo) { granted in 
       if granted { 
        completion(nil) 
       } else { 
        completion(ClientError.noAccess) 
       } 
      } 
     case .denied: 
      completion(ClientError.noAccess) 
     } 
    } 
} 

然后,您可以遵循这个协议,并呼吁它在你的类像这样:

handleCameraPermissions() { error in 
    if let error = error { 
     //Denied, handle error here 
     return 
    } 

    //Allowed! As you were 
相关问题