如何在 IOS 上获得 Photo/Camera 的授权状态?
How can I get the authorization status to Photo/Camera on IOS?
我正在使用 UIImagePickerController
。我需要引导我的用户到 Setting -> Privacy
来解锁 camera/photo 访问权限,如果他们首先拒绝它的话。
默认情况下,UIImagePickerController
会显示:
但是我想要在呈现 UIImagePickerController
之前收到消息怎么样?我怎样才能得到我是否有访问权限的消息?
我想声明这不是一个绝对重复的问题。 AVCaptureDevice
本题detect permission of camera on ios只修复了访问camera,但是访问'photo album'还是检测不到
问题detect permission of camera on ios提到了classAVCaptureDevice
,可以修复Camera Usage
的授权。
我找到了'photo'授权的解决方法。在 IOS8 和 class PHPhotoLibrary
.
中有一个名为 Photos
的新框架
此方法可以发出警报:
PHPhotoLibrary.requestAuthorization({(status: PHAuthorizationStatus)in
switch status{
case .denied:
break
case .authorized:
break
default:
break
}
})
就像UIImagePickerController
第一次出现的时候一样。
和class func authorizationStatus() -> PHAuthorizationStatus
可以return'photo album'
的当前授权状态
AVCaptureDevice为此提供API。
if (![[AVCaptureDevice class] respondsToSelector:@selector(authorizationStatusForMediaType:)])
{
//Do something…
break;
}
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
switch (authStatus)
{
case AVAuthorizationStatusAuthorized:
case AVAuthorizationStatusRestricted:
{
//Do something…
break;
}
case AVAuthorizationStatusDenied:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"App name" message:@"Appname does not have access to your camera. To enable access, go to iPhone Settings > AppName and turn on Camera." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//Do something…
break;
}
case AVAuthorizationStatusNotDetermined:
{
// not determined?!
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
{
if(granted)
{
dispatch_async(dispatch_get_main_queue(), ^
{
//Do something…
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^
{
//Do something…
});
}
}];
break;
}
default:
break;
}
我正在使用 UIImagePickerController
。我需要引导我的用户到 Setting -> Privacy
来解锁 camera/photo 访问权限,如果他们首先拒绝它的话。
默认情况下,UIImagePickerController
会显示:
但是我想要在呈现 UIImagePickerController
之前收到消息怎么样?我怎样才能得到我是否有访问权限的消息?
我想声明这不是一个绝对重复的问题。 AVCaptureDevice
本题detect permission of camera on ios只修复了访问camera,但是访问'photo album'还是检测不到
问题detect permission of camera on ios提到了classAVCaptureDevice
,可以修复Camera Usage
的授权。
我找到了'photo'授权的解决方法。在 IOS8 和 class PHPhotoLibrary
.
Photos
的新框架
此方法可以发出警报:
PHPhotoLibrary.requestAuthorization({(status: PHAuthorizationStatus)in
switch status{
case .denied:
break
case .authorized:
break
default:
break
}
})
就像UIImagePickerController
第一次出现的时候一样。
和class func authorizationStatus() -> PHAuthorizationStatus
可以return'photo album'
AVCaptureDevice为此提供API。
if (![[AVCaptureDevice class] respondsToSelector:@selector(authorizationStatusForMediaType:)])
{
//Do something…
break;
}
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
switch (authStatus)
{
case AVAuthorizationStatusAuthorized:
case AVAuthorizationStatusRestricted:
{
//Do something…
break;
}
case AVAuthorizationStatusDenied:
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"App name" message:@"Appname does not have access to your camera. To enable access, go to iPhone Settings > AppName and turn on Camera." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//Do something…
break;
}
case AVAuthorizationStatusNotDetermined:
{
// not determined?!
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
{
if(granted)
{
dispatch_async(dispatch_get_main_queue(), ^
{
//Do something…
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^
{
//Do something…
});
}
}];
break;
}
default:
break;
}