iOS相机权限不会出现在某些设备的设置下

时间:2015-09-01 12:58:37

标签: ios iphone ipad ios-camera

我在尝试使用相机时遇到了一些问题。问题是有些设备会在设置下显示Camera条目,而其他设备则不会。在那些没有出现相机开关的设备中,我无法使用相机,因为它没有权限,并且它也不会出现在启用它们的设置下。

这是它在有效设备上的外观:

enter image description here

这就是它在不起作用的设备中的外观。

enter image description here

当我拍摄这些截图时,应用程序应该已经要求权限,但事实并非如此。

我还验证了这些设备没有启用限制。

有什么想法吗?

更新1:添加了代码

这是我用来显示相机的代码(它在自定义视图下,而不是原生相机视图控制器)

self.captureSession = [[AVCaptureSession alloc] init];
AVCaptureDevice *videoCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSError *error = nil;
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoCaptureDevice error:&error];
if(videoInput)
{
    [self.captureSession addInput:videoInput];
}
else
{
    NSLog(@"Error: %@", error);
}

AVCaptureMetadataOutput *metadataOutput = [[AVCaptureMetadataOutput alloc] init];
[self.captureSession addOutput:metadataOutput];
[metadataOutput setMetadataObjectsDelegate:self
                                     queue:dispatch_get_main_queue()];
[metadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeQRCode]];

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
previewLayer.frame = self.view.layer.bounds;
UIView * previewView = [[UIView alloc] initWithFrame:self.view.frame];
[previewView.layer addSublayer:previewLayer];
[self.view addSubview:previewView];
[self.view sendSubviewToBack:previewView];

[self.captureSession startRunning];

4 个答案:

答案 0 :(得分:8)

您需要在开会前请求权限。使用

[AVCaptureDevice requestAccessForMediaType:completionHandler:]

答案 1 :(得分:3)

步骤1:使用以下密钥(不含引号)在info.plist上提供正确的相机消息访问消息

"Privacy - Camera Usage Description"

步骤2:对于objective-C / SWIFT,您需要申请相机访问权限

目标-C

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
        {
            if (granted == true)
            {
                //[self presentViewController           : picker animated:YES completion:NULL];
               //Do your stuff

            }
            else
            {
                UIAlertView *cameraAlert = [[UIAlertView alloc]initWithTitle:STR_APPLICATION_TITLE
                                                                     message:STR_ALERT_CAMERA_DENIED_MESSAGE
                                                                    delegate:self
                                                           cancelButtonTitle:@"OK"
                                                           otherButtonTitles:nil,nil];
                [cameraAlert show];

                NSLog(@"denied");
            }

        }];

SWIFT

AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (videoGranted: Bool) -> Void in
        if (videoGranted) {
             //Do Your stuff here

        } else {
            // Rejected Camera
        }
    })

答案 2 :(得分:0)

在将相机类型更改为宽镜头之前,我遇到了同样的问题:

   let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back)

答案 3 :(得分:0)

如果上述解决方案无效,则可以考虑在iOS设备上检查此设置。

enter image description here