如果授予照片库许可但未授予相机许可,则相机会打开并拍摄一张空白照片
if photolibrary permission is given and camera permission is not given then camera opens and take a blank photo
我已经拒绝了相机的权限,但之前已经授予了照片库的权限。但是相机打开时黑屏。我可以看到拍照的选项。有什么办法可以不开相机吗
我的代码是这样的
-(void)showImagePickerWithSoureType:(UIImagePickerControllerSourceType)type
{
if([UIImagePickerController isSourceTypeAvailable:type])
{
pickerObj = [UIImagePickerController new];
pickerObj.sourceType = type;
UIViewController *topMostViewController = [CommonFunctions getTopMostViewControllerFromRootViewController:[CommonFunctions getAppDelegateObject].window.rootViewController];
dispatch_async(dispatch_get_main_queue(), ^{
[topMostViewController presentViewController:pickerObj animated:YES completion:NULL];
pickerObj.delegate = self;
pickerObj.editing = true;
pickerObj.allowsEditing = true;
});
if([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusNotDetermined)
{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
switch (status) {
case PHAuthorizationStatusAuthorized:
break;
case PHAuthorizationStatusRestricted:
[self imagePickerControllerDidCancel:pickerObj];
break;
case PHAuthorizationStatusDenied:
[self imagePickerControllerDidCancel:pickerObj];
break;
default:
break;
}
}];
}
}
}
像这样尝试:
对于相机:
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(authStatus == AVAuthorizationStatusAuthorized)
{
[self accessCamera];
}
else if(authStatus == AVAuthorizationStatusNotDetermined)
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
{
if(granted)
{
[self accessCamera];
}
else
{
[self deniedCamera];
}
}];
}
else
{
[self deniedCamera];
}
对于图片库:
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusAuthorized) {
[self accessPhotoLibrary];
}
else if (status == PHAuthorizationStatusNotDetermined) {
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
[self accessPhotoLibrary];
}else {
[self deniedPhotoLibrbary];
}
}];
}
else {
[self deniedPhotoLibrbary];
}
以及调用 pickerView 委托的方法
-(void)accessCamera{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:picker animated:YES completion:NULL];
});
}
-(void)accessPhotoLibrary{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.allowsEditing = YES;
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:picker animated:YES completion:NULL];
});
}
然后你可以通过didFinishPickingMediaWithInfo
方法获取图像。
我已经拒绝了相机的权限,但之前已经授予了照片库的权限。但是相机打开时黑屏。我可以看到拍照的选项。有什么办法可以不开相机吗
我的代码是这样的
-(void)showImagePickerWithSoureType:(UIImagePickerControllerSourceType)type
{
if([UIImagePickerController isSourceTypeAvailable:type])
{
pickerObj = [UIImagePickerController new];
pickerObj.sourceType = type;
UIViewController *topMostViewController = [CommonFunctions getTopMostViewControllerFromRootViewController:[CommonFunctions getAppDelegateObject].window.rootViewController];
dispatch_async(dispatch_get_main_queue(), ^{
[topMostViewController presentViewController:pickerObj animated:YES completion:NULL];
pickerObj.delegate = self;
pickerObj.editing = true;
pickerObj.allowsEditing = true;
});
if([PHPhotoLibrary authorizationStatus] == PHAuthorizationStatusNotDetermined)
{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
switch (status) {
case PHAuthorizationStatusAuthorized:
break;
case PHAuthorizationStatusRestricted:
[self imagePickerControllerDidCancel:pickerObj];
break;
case PHAuthorizationStatusDenied:
[self imagePickerControllerDidCancel:pickerObj];
break;
default:
break;
}
}];
}
}
}
像这样尝试:
对于相机:
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(authStatus == AVAuthorizationStatusAuthorized)
{
[self accessCamera];
}
else if(authStatus == AVAuthorizationStatusNotDetermined)
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
{
if(granted)
{
[self accessCamera];
}
else
{
[self deniedCamera];
}
}];
}
else
{
[self deniedCamera];
}
对于图片库:
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusAuthorized) {
[self accessPhotoLibrary];
}
else if (status == PHAuthorizationStatusNotDetermined) {
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
[self accessPhotoLibrary];
}else {
[self deniedPhotoLibrbary];
}
}];
}
else {
[self deniedPhotoLibrbary];
}
以及调用 pickerView 委托的方法
-(void)accessCamera{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:picker animated:YES completion:NULL];
});
}
-(void)accessPhotoLibrary{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.allowsEditing = YES;
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:picker animated:YES completion:NULL];
});
}
然后你可以通过didFinishPickingMediaWithInfo
方法获取图像。