如果在 iOS 设置中禁用相机,则在 AVCaptureDeviceInput 崩溃

Posted

技术标签:

【中文标题】如果在 iOS 设置中禁用相机,则在 AVCaptureDeviceInput 崩溃【英文标题】:crash at AVCaptureDeviceInput if camera is disabled in iOS setting 【发布时间】:2012-07-31 03:35:07 【问题描述】:

我正在使用 ZXing 小部件来扫描二维码。如果用户从 ios 设置中禁用相机访问,我的应用程序将像这样崩溃:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* 无法添加,因为设备不支持 AVCaptureSessionPresetMedium。使用 -[AVCaptureDevice supportsAVCaptureSessionPreset:]。'

有没有办法尝试提示用户重新打开它?

谢谢

狮子座

【问题讨论】:

【参考方案1】:

我在 iPad 1 上遇到了同样的错误,我猜是因为 iPad1 没有摄像头。我这样做是为了解决崩溃问题:

if([[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] supportsAVCaptureSessionPreset:AVCaptureSessionPresetMedium])
    // add code to open ZXingWidgetController
 else 
    // show alert that device does not support

【讨论】:

【参考方案2】:

您可以使用以下代码,它兼容 iOS 5+

- (BOOL)backCameraIsReady

    AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    NSError *inputDeviceError = nil;
    AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&inputDeviceError];
    if (!captureInput) 
        return NO;
     else 
        return YES;
    

【讨论】:

以上是关于如果在 iOS 设置中禁用相机,则在 AVCaptureDeviceInput 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

我们可以通过快速编程来禁用应用程序级别的权限吗?

在 iOS 上的 Fine-uploader 中关闭相机

在 SceneKit 中禁用相机平移

如何将 Vignette CIFilter 应用于 iOS 中的实时摄像机源?

如果在 iOS 设置中禁用通知访问时安排本地通知,则不会在 iOS 13 上触发本地通知

电子禁用特定的相机设备访问或设置默认网络摄像头