如何检测用户是否点击了“不允许”访问相机的选项

5

我正在使用UIImagePicker来呈现相机以拍摄照片,这些照片将在应用程序中使用。

我的问题是,当用户第一次打开图像选择器时,会提示:““我的应用程序”想要访问您的相机”,并提供两个选项:不允许和确定。

我的要求是,当用户点击“不允许”时,图像选择器会被关闭,留下一个黑色视图。有没有办法检测用户是否选择了“不允许”?

以下是我呈现UIImagePicker的代码:

var PhotoPicker:UIImagePickerController = UIImagePickerController()
PhotoPicker.delegate = self
PhotoPicker.sourceType = .Camera
PhotoPicker.cameraFlashMode = .Off
PhotoPicker.showsCameraControls = false
PhotoPicker.cameraDevice = .Rear
self.presentViewController(PhotoPicker, animated: false, completion: nil)
3个回答

5

检测对你的库的访问:

你需要使用AssetsLibrary。首先,导入assets library framework:

import AssetsLibrary

然后,请求授权状态,如果没有确定,则使用块捕获这些事件,代码如下:
if ALAssetsLibrary.authorizationStatus() == ALAuthorizationStatus.NotDetermined {

    let library = ALAssetsLibrary()
    library.enumerateGroupsWithTypes(.All, usingBlock: { (group, stop) -> Void in

        // User clicked ok
    }, failureBlock: { (error) -> Void in

        // User clicked don't allow
        imagePickerController.dismissViewControllerAnimated(true, completion: nil)
    })
}

检测相机访问:

您需要使用AVFoundation来实现。首先,导入AVFoundation框架:

import AVFoundation

和之前一样,当您进入图像选择器并捕获事件时,请请求用户权限。

if AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo) == AVAuthorizationStatus.NotDetermined {

    AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (videoGranted: Bool) -> Void in

        // User clicked ok
        if (videoGranted) {

        // User clicked don't allow
        } else {
            imagePickerController.dismissViewControllerAnimated(true, completion: nil)
        }
    })
}

希望这能有所帮助!

小提示:在iOS9中,AssetsLibrary已被废弃,请使用PHPhotoLibrary来替代。 - Gerald Eersteling

3

iOS 10中,请使用:

import Photos

let authStatus = PHPhotoLibrary.authorizationStatus()
if authStatus == .notDetermined || authStatus == .denied {
    PHPhotoLibrary.requestAuthorization({ (status) in
        if status == PHAuthorizationStatus.authorized {

        } else {
            imagePickerController.dismissViewControllerAnimated(true, completion: nil)
        }
    })
}

更新:照片可用于iOS 8及以上版本 PHOTOS_AVAILABLE_IOS_TVOS(8_0,10_0); - CJ Lin

0

检查一下这个关于检测摄像头权限的内容

在iOS 8中呈现摄像头权限对话框

当用户选择“不允许”时,请使用此选项。

PhotoPicker.dismissViewControllerAnimated(false, completion: nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接