最近在做自定义相机,然后就是iOS8要授权才能使用,如果用户拒绝,那么,就不能操作。
问题是,怎么知道用户第一次选择相机,并且应用有打开相机的权限?
// 在iOS7 时,只有部分地区要求授权才能打开相机
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_7_1) {
// Pre iOS 8 -- No camera auth required.
}else {
// iOS 8 后,全部都要授权
// Thanks: http://stackoverflow.com/a/24684021/2611971
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
switch (status) {
case AVAuthorizationStatusNotDetermined:{
// 许可对话没有出现,发起授权许可
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if (granted) {
//第一次用户接受
}else{
//用户拒绝
}
}];
break;
}
case AVAuthorizationStatusAuthorized:{
// 已经开启授权,可继续
break;
}
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusRestricted:
// 用户明确地拒绝授权,或者相机设备无法访问
break;
default:
break;
}
}
最后一个坑:
没有解决:
而问题的关键是,在第一次授权时,弹出的AlertView,其实,应用已经在后台了。当用户选择其中一个时,会从新回到前台,导致第一次时,如果要打开相机,会非常的慢,暂时还不知道这个问题怎么解决?欢迎在讨论区,谢谢大家!
补充:2015.7.26
发现其它相机应用,刚打开时,就询问打授权,可能这就是目前比较好的解决方案?
- 如果有什么疑问,可以在评论区一起讨论;
- 如果有什么不正确的地方,欢迎指导!
注:本文首发于 iHTCboy's blog,如若转载,请注明来源。
网友评论
dispatch_async(dispatch_get_main_queue(), ^{
if (granted) {
//第一次用户接受
allowBlock();
}else{
//用户拒绝
showAlert(@"已拒绝授权,打开相机失败");
}
});
回到主线程 提示就可以了