为什么我的iOS应用程序不会要求用户访问摄像头的权限?

时间:2016-02-19 08:13:04

标签: ios avcapturesession avcapturedevice avcam

我开发iOS应用程序,它使用相机。 AVCaptureDeviceInput用于连接摄像头。 我检查了授权状态为

- (void)checkDeviceAuthorizationStatus
{
    NSString *mediaType = AVMediaTypeVideo;

    [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
        if (granted)
        {
            //Granted access to mediaType
            [self setDeviceAuthorized:YES];
        }
        else
        {
            //Not granted access to mediaType
            dispatch_async(dispatch_get_main_queue(), ^{
                [[[UIAlertView alloc] initWithTitle:@"AVCam!"
                                            message:@"AVCam doesn't have permission to use Camera, please change privacy settings"
                                           delegate:self
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil] show];
                [self setDeviceAuthorized:NO];
            });
        }
    }];
}

当我启动应用程序时,为什么它不会要求用户访问相机的权限? 因此,应用程序不会出现在设置/隐私/相机中以手动允许访问相机。 然后显示此错误"AVCam doesn't have permission to use Camera, please change privacy settings",应用无法使用相机。

编辑: 这意味着在未征得用户许可的情况下,不允许应用访问相机。 不仅相机,相机胶卷也有同样的问题。

在重置设置/重置/休息所有设置中的设置后,所有这些都发生了。在此之前,应用程序运行良好。

3 个答案:

答案 0 :(得分:4)

问题现在解决了。我需要一步一步地追溯,并花了我很长时间来解决问题。 有人建议包括  NSCamerausageDescription键。实际上,iOS 7及以上版本的设备是必需的。我包含了密钥但仍未提出用户权限。 最后我在Info.plist上找到了问题。 有一些额外的行,我删除了三行。不确定它们与我的问题有什么关系。 我删除的是

(1)获取信息字符串

(2)捆绑显示名称

(3)申请类别

在info.plist中删除这三行后。然后该应用程序会询问用户权限。关键是您可能需要检查Info.plist是否存在此类问题。

答案 1 :(得分:0)

您需要将应用名称放在info.plist

中的“Bundle display name”中

答案 2 :(得分:0)

仔细研究以上矛盾的解决方案-删除并添加捆绑显示名称-让我想到了导致此错误的原因。我猜这个(苹果)错误仅在没有摄像头许可的情况下(仅安装了相同应用的设备上出现)(没有摄像头功能的较旧版本或不良的testflight版本)出现。因此,如果您只是从头删除并安装,则错误的应用程序权限将变得可以。说到不卸载现有应用程序的解决方法,如果您更改了plist中的捆绑包描述(删除或添加),那么iOS将使用新的plist,并按我们的预期对已安装的权限进行权限。