I am using UIImagePickerController. I need guide my user to Setting -> Privacy to unlock the camera/photo access if they rejected it in the first place.
By default, UIImagePickerController will show:
 
 
But how about i want the message before presenting UIImagePickerController? How can i get the message that whether i have the access?
I want to claim that it is not an absolute duplicated question. AVCaptureDevice in this question detect permission of camera on ios only fixes the access to the camera, but the access to 'photo album' still cannot be detected.
the question detect permission of camera on ios mentioned the class AVCaptureDevice, it can fix the authorization of Camera Usage.
I found the solution to the authorization of 'photo'. There is a new framework called Photos in IOS8 and a class PHPhotoLibrary.
This method can give an Alert:
PHPhotoLibrary.requestAuthorization({(status: PHAuthorizationStatus)in
    switch status{
    case .denied:
        break
    case .authorized:
        break
    default:
        break
    }
})

Just like when UIImagePickerController appears the first time. 
and class func authorizationStatus() -> PHAuthorizationStatus can return the current authorization status of 'photo album'
The AVCaptureDevice provides API for this.
        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;
        }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With