I have denied permission of camera but given permission of photolibrary previously. But camera opens with black screen. and I can see the option to take photo. Is there any way to not open camera.
My code is like this
-(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;
}
}];
}
}
}
Try like this :
For camera:
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];
}
For PhotoLibrary :
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];
}
And the methods to call pickerView delegates
-(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];
});
}
Then you can get image from didFinishPickingMediaWithInfo
method.