如何检测相机是否受用户限制

A.V*_*ila 17 camera restrictions ios

我正在使用启动相机的按钮来执行ios应用程序.

如果设备有可用的相机,我想启用/禁用按钮.

我想检测设备是否有摄像头,以及设备是否有摄像头但是受限制(使用此设备),因此您无法使用它.

我该如何检测这两个选项?

谢谢

pan*_*kaj 26

要在应用中检查相机权限状态,请使用以下代码段.

@import AVFoundation;

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
 {
  AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

  if(status == AVAuthorizationStatusAuthorized) {
    // authorized
  } else if(status == AVAuthorizationStatusDenied){
    // denied
  } else if(status == AVAuthorizationStatusRestricted){
    // restricted
  } else if(status == AVAuthorizationStatusNotDetermined){
      // not determined
      [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
          if(granted){
            NSLog(@"Granted access");
          } else {
            NSLog(@"Not granted access");
          }
      }];
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是正确答案的一半,它可以在iOS 9中运行.有3种状态可以禁用摄像头.1.没有摄像头,2.专门为此应用程序禁用摄像头,以及3.通过限制禁用摄像头.只有这个捕获案例2,但没有案例1和3.` [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]`捕获案例1和3,但不捕获案例2.如果您想检查相机可能无法使用的所有可能原因,您需要实现这个AND`isSourceTypeAvailable` (3认同)
  • 确保导入AVFoundation` @ import STFoundation;` (2认同)

nic*_*kjm -6

AVAuthorizationStatus正如其他地方所述,尽管枚举中存在“受限”值,但检查实际上并不会告诉您它是否受到限制。相反,我发现检查源是否启用是有帮助的:

BOOL isCameraAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
Run Code Online (Sandbox Code Playgroud)

如果isCameraAvailableNO,则用户很可能在限制中禁用了相机。请参阅在 iPhone 应用程序中检测相机是否存在?