Forked from iandundas/UIImagePickerController+cats.m
Created
November 3, 2016 07:13
-
-
Save irshadpc/ada24bc7a92a01991793d9b3dcaeffa7 to your computer and use it in GitHub Desktop.
How to detect iOS Photo library or Camera permissions (>iOS8)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Created by Ian Dundas on 16/03/15. | |
// | |
#import "UIImagePickerController+cats.h" | |
#import <AVFoundation/AVFoundation.h> | |
#import "Photos/Photos.h" | |
/* | |
example usage: | |
[UIImagePickerController obtainPermissionForMediaSourceType:UIImagePickerControllerSourceTypePhotoLibrary withSuccessHandler:^{ | |
UIImagePickerController *pickerNavController = [[UIImagePickerController alloc] init]; | |
pickerNavController.delegate = self; | |
pickerNavController.allowsEditing = NO; | |
pickerNavController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; | |
[self presentViewController:pickerNavController animated:YES completion:nil]; | |
} andFailure:^{ | |
UIAlertController *alertController= [UIAlertController | |
alertControllerWithTitle:nil | |
message:NSLocalizedString(@"You have disabled Photos access", nil) | |
preferredStyle:UIAlertControllerStyleActionSheet]; | |
[alertController addAction:[UIAlertAction | |
actionWithTitle:NSLocalizedString(@"Open Settings", @"Photos access denied: open the settings app to change privacy settings") | |
style:UIAlertActionStyleDefault | |
handler:^(UIAlertAction *action) { | |
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; | |
}] | |
]; | |
[alertController addAction:[UIAlertAction | |
actionWithTitle:NSLocalizedString(@"Cancel", @"Cancel") | |
style:UIAlertActionStyleDefault | |
handler:NULL] | |
]; | |
[self presentViewController:alertController animated:YES completion:^{}]; | |
}]; | |
*/ | |
@implementation UIImagePickerController (Additions) | |
+ (void)obtainPermissionForMediaSourceType:(UIImagePickerControllerSourceType)sourceType withSuccessHandler:(void (^) ())successHandler andFailure:(void (^) ())failureHandler { | |
if (sourceType == UIImagePickerControllerSourceTypePhotoLibrary || sourceType == UIImagePickerControllerSourceTypeSavedPhotosAlbum){ | |
// Denied when photo disabled, authorized when photos is enabled. Not affected by camera | |
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { | |
switch (status) { | |
case PHAuthorizationStatusAuthorized: { | |
if (successHandler) | |
dispatch_async (dispatch_get_main_queue (), ^{ successHandler (); }); | |
}; break; | |
case PHAuthorizationStatusRestricted: | |
case PHAuthorizationStatusDenied:{ | |
if (failureHandler) | |
dispatch_async (dispatch_get_main_queue (), ^{ failureHandler (); }); | |
}; break; | |
default: | |
break; | |
} | |
}]; | |
} | |
else if (sourceType == UIImagePickerControllerSourceTypeCamera){ | |
// Checks for Camera access: | |
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; | |
switch (status){ | |
case AVAuthorizationStatusAuthorized:{ | |
if (successHandler) | |
dispatch_async (dispatch_get_main_queue (), ^{ successHandler (); }); | |
}; break; | |
case AVAuthorizationStatusNotDetermined:{ | |
// seek access first: | |
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { | |
if(granted){ | |
if (successHandler) | |
dispatch_async (dispatch_get_main_queue (), ^{ successHandler (); }); | |
} else { | |
if (failureHandler) | |
dispatch_async (dispatch_get_main_queue (), ^{ failureHandler (); }); | |
} | |
}]; | |
}; break; | |
case AVAuthorizationStatusDenied: | |
case AVAuthorizationStatusRestricted: | |
default:{ | |
if (failureHandler) | |
dispatch_async (dispatch_get_main_queue (), ^{ failureHandler (); }); | |
}; break; | |
} | |
} | |
else{ | |
NSAssert(NO, @"Permission type not found"); | |
} | |
} | |
@end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// Created by Ian Dundas on 16/03/15 | |
// | |
#import <Foundation/Foundation.h> | |
@interface UIImagePickerController (cats) | |
+ (void)obtainPermissionForMediaSourceType:(UIImagePickerControllerSourceType)sourceType withSuccessHandler:(void (^) ())successHandler andFailure:(void (^) ())failureHandler; | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment