Ios 在Swift 2.0中检查权限
无论我在哪里添加代码来检查摄像头/麦克风/照片等的权限,弹出确认总是会终止我的应用程序或将我送回几个视图控制器 示例如下。 当我有一个处理权限的页面时,我几乎并没有视图控制器(部分通过注册过程)。用户点击一个按钮来处理摄像头权限,该权限使用以下代码Ios 在Swift 2.0中检查权限,ios,permissions,swift2,touch-up-inside,Ios,Permissions,Swift2,Touch Up Inside,无论我在哪里添加代码来检查摄像头/麦克风/照片等的权限,弹出确认总是会终止我的应用程序或将我送回几个视图控制器 示例如下。 当我有一个处理权限的页面时,我几乎并没有视图控制器(部分通过注册过程)。用户点击一个按钮来处理摄像头权限,该权限使用以下代码 if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) != AVAuthorizationStatus.Authorized { AVCapture
if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) != AVAuthorizationStatus.Authorized {
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (granted :Bool) -> Void in
if granted == true {
// do something
} else {
// determine whether not determined, denied etc and do something else
}
});
}
然而,一旦iOS确认弹出,它就会将应用程序抛出2个视图控制器。在其他情况下(例如,在viewDidLoad
)权限请求会在做出选择后立即终止应用程序
我的设置中缺少了什么,或者如何防止这种行为
谢谢。我想你误解了我的评论,我的意思是
if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) != AVAuthorizationStatus.Authorized { // here you are checking if it's not authorized i..e it's denied, NotDetermined or Restricted
....
}
else if if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) == AVAuthorizationStatus.Authorized
// do the something in case it's autorized
我在这里列出钥匙-
<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to the photo library.</string>
<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera.</string>
NSPhotoLibraryUsageDescription
此应用程序需要访问照片库。
NSCameraUsageDescription
此应用程序需要访问摄像头。
denied怎么样?@Misha-我知道用户可以选择更多选项,如果需要,这些选项会被处理,但与我想的问题无关。但是,如果权限被拒绝,应用程序将如何决定该做什么?另一个注意事项是,您是否在plist中添加了密钥?@Misha-它将根据代码的要求决定该做什么-在这种情况下,它实际上没有做任何事情,但重点是当弹出窗口显示时视图会回滚-其余部分与此无关,但我将编辑问题以避免将来的混淆。不管它在未授权的情况下做什么,重点是我总是授权,但流程崩溃或回滚视图,无论是在它要求作出决定时,还是在授权时,Hanks Misha-我都有状态检查,以确定当前的状态和其他代码(授权==true)为了确定他们在弹出窗口中的选择-对于密钥,我正在添加这些密钥,因为我有一个用于NSLOCATIONWHENUSAGESCRIPTION的密钥,但相机/照片的密钥带有“隐私-相机使用说明”(不确定我从何处获得该密钥)-稍后将返回结果。似乎我在info.plist中有一个缺少的描述条目,导致它弹出到最近的navigationController(这很奇怪,但没关系)-添加我能想到的所有描述似乎解决了问题