最近做了一个视频功能涉及到摄像机和麦克风的权限问题所以写一个权限判断
下面贴代码 以下是摄像机 和 麦克风的权限 设置 分别为 第一次使用的情况 和 以后每次使用时候 设备的检测情况
func authStatus()
{
let videoType = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
let audioType = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeAudio)
switch videoType {
case .NotDetermined:
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (isCanUse) in
if isCanUse == true
{
//用户同意则
dispatch_async(dispatch_get_main_queue(), {
})
}
else
{
//用户拒绝回调不在主线程 要加入主线程
dispatch_async(dispatch_get_main_queue(), {
//这边做了一个返回的操作 也可以留在当前页面做其他操作
if self.navigationController != nil
{
self.navigationController?.popViewControllerAnimated(true)
}
})
}
})
case .Denied: //用户拒绝
dispatch_async(dispatch_get_main_queue(), {
self.tips("未获得授权使用摄像头", message: "请在iOS'设置'-'隐私'-'相机'中打开")
})
case .Restricted: //无法访问
dispatch_async(dispatch_get_main_queue(), {
self.function.showReadTip("无法访问摄像机", isCount: false)
})
case .Authorized:
print("启动成功")
default: break
}
switch audioType {
case .NotDetermined:
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (isCanUse) in
if isCanUse == true
{
//用户同意则
dispatch_async(dispatch_get_main_queue(), {
})
}
else
{
//用户拒绝回调不在主线程 要加入主线程
dispatch_async(dispatch_get_main_queue(), {
if self.navigationController != nil
{
self.navigationController?.popViewControllerAnimated(true)
}
})
}
})
case .Denied: //用户拒绝
dispatch_async(dispatch_get_main_queue(), {
self.tips("未获得授权使用麦克风", message: "请在iOS'设置'-'隐私'-'麦克风'中打开")
})
case .Restricted: //无法访问
dispatch_async(dispatch_get_main_queue(), {
self.function.showReadTip("无法访问摄像机", isCount: false)
})
case .Authorized:
print("启动成功")
default: break
}
}
//提示框
func tips(title:String,message:String)
{
//title: "未获得授权使用摄像头", message: "请在iOS'设置'-'隐私'-'相机'中打开"
//提示相机不可用
if #available(iOS 8.0, *) {
let alert = UIAlertController.init(title: title, message: message, preferredStyle: .Alert)
let confirm = UIAlertAction.init(title: "知道了", style: .Cancel, handler: { (cofirm) in
if self.navigationController != nil
{
self.navigationController?.popViewControllerAnimated(true)
}
})
let nowGo = UIAlertAction.init(title: "现在就去", style: .Default, handler: { (nowGo) in
// let url = NSURL.init(string: "prefs:root=privacy")
let url = NSURL.init(string: UIApplicationOpenSettingsURLString)
if UIApplication.sharedApplication().canOpenURL(url!)
{
UIApplication.sharedApplication().openURL(url!)
if self.navigationController != nil
{
self.navigationController?.popViewControllerAnimated(false)
}
}
else
{
if self.navigationController != nil
{
self.navigationController?.popViewControllerAnimated(true)
}
}
})
alert.addAction(confirm)
alert.addAction(nowGo)
self.presentViewController(alert, animated: true, completion: nil)
} else {
}
}