当应用程序尝试访问iOS中的相机API时,显示的操作系统级别为alertview。 用户在这里必须允许访问摄像机或禁用访问。当用户选择允许访问iOS中的相机时收到通知
我的问题是如何得到用户所做选择的通知..?
说他选择不允许访问比在那里提出的任何通知,我可以用在我的应用程序..?
任何帮助表示赞赏。
当应用程序尝试访问iOS中的相机API时,显示的操作系统级别为alertview。 用户在这里必须允许访问摄像机或禁用访问。当用户选择允许访问iOS中的相机时收到通知
我的问题是如何得到用户所做选择的通知..?
说他选择不允许访问比在那里提出的任何通知,我可以用在我的应用程序..?
任何帮助表示赞赏。
您可以检查当前授权状态并手动请求授权,而不是让操作系统在相机出现时显示警报视图。这样,当用户接受/拒绝您的请求时,您会得到一个回调。
在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的信息。
从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
谢谢,作品完美! 不要忘记导入AVFoundation。 – 2015-05-13 17:30:56