2016-04-08 2 views
-1

Как мне вызвать функцию после того, как пользователь предоставит разрешение на камеру или местоположение?Вызовите функцию, когда пользователь разрешает разрешение камеры

Я думал об использовании цикла while, но это не похоже на элегантное решение. Я знаю, что могу проверить статус разрешения («Авторизованный», «Не определено» и т. Д.), Но он не дает мне знать, предоставил ли пользователь разрешение.

Есть ли способ быть немедленно уведомленным?

+0

'CLLocationManger' имеет метод делегата, который запускается при изменении разрешений местоположения. Os убивает ваше приложение, когда разрешение камеры изменяется, поэтому уведомление не будет действительно полезным. – dan

+0

@dan iOS только убивает приложение, если пользователь меняет разрешение с помощью настроек. Если iOS запрашивает пользователя в первый раз, и пользователь делает выбор, приложение не будет убито. – rmaddy

ответ

1

Вы можете сначала проверить текущее разрешение. Если это неизвестно, вы можете сделать запрос на получение разрешения и получить уведомление о том, что пользователь выбирает.

Что-то, как это будет работать на разрешение камеры:

AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; 
switch (status) { 
    case AVAuthorizationStatusAuthorized: 
     // User accepted permission in the past - take a picture 
     break; 
    case AVAuthorizationStatusDenied: 
     // User denied permission in the past - handle as needed 
     break; 
    case AVAuthorizationStatusRestricted: 
     // Restrictions prevent access to the camera - handle as needed 
     break; 
    case AVAuthorizationStatusNotDetermined: 
     [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { 
      if (granted) { 
       // User just gave permission - take a picture 
      } else { 
       // User just denied permission - don't take a picture 
      } 
     }]; 
     break; 
} 

Код для разрешения местоположения будет похож.

+0

@ Cesare - что-то изменилось? Я заметил, что вы не приняли ответа. – rmaddy

Смежные вопросы