Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the authorization status to Photo/Camera on IOS?

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:

without auth

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.

like image 295
duan Avatar asked Oct 14 '25 06:10

duan


2 Answers

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
    }
})

enter image description here

Just like when UIImagePickerController appears the first time.

and class func authorizationStatus() -> PHAuthorizationStatus can return the current authorization status of 'photo album'

like image 186
duan Avatar answered Oct 16 '25 20:10

duan


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;
        }
like image 37
Nitheesh George Avatar answered Oct 16 '25 20:10

Nitheesh George