ios 请在设置中打开相机权限_在iOS中请求摄像头权限对话框启动(Prime权限)

本文介绍了在iOS应用中如何处理相机权限,包括首次请求权限、用户拒绝后的处理以及通过设置引导用户开启权限的方法。通过展示Swift代码片段,详细说明了如何优雅地处理相机权限请求流程。
摘要由CSDN通过智能技术生成

权限底漆是为了避免一种情况,你的客户可能会拒绝一个关键功能接入的有效途径的应用程序。

在iOS上,只允许每个功能触发默认系统权限一次。权限启动是指应用程序通过模仿系统权限的警报“启动”客户。

这样做的好处是,如果客户选择退出(选择取消),该应用程序仍然可以在将来再次询问,直到他们说是 - 在此时显示实际的系统权限以及客户在统计上不太可能改变主意并进入负面的工作流程。

此外,由于cameraSelected()执行该流程,如果用户拒绝,但后来在未来的某个时刻确实更改它们的设置,应用程序将立即反映没有进一步输入新的权限(即用户可以切换到设置,更改权限,然后切换回应用程序)。

下面是一些斯威夫特3代码来实现此功能:

[更新:包括是打开一个深层链接设置,用户可以启用摄像头的访问,如果他们之前都否认的解决方案它]

[UPDATE 2:添加样品分析执行线]

func cameraSelected() {

// First we check if the device has a camera (otherwise will crash in Simulator - also, some iPod touch models do not have a camera).

if let deviceHasCamera = UIImagePickerController.isSourceTypeAvailable(.camera) {

let authStatus = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo)

switch authStatus {

case .authorized:

showCameraPicker()

case .denied:

alertPromptToAllowCameraAccessViaSettings()

case .notDetermined:

permissionPrimeCameraAccess()

default:

permissionPrimeCameraAccess()

}

} else {

let alertController = UIAlertController(title: "Error", message: "Device has no camera", preferredStyle: .alert)

let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { (alert) in

Analytics.track(event: .permissionsPrimeCameraNoCamera)

})

alertController.addAction(defaultAction)

present(alertController, animated: true, completion: nil)

}

}

func alertPromptToAllowCameraAccessViaSettings() {

let alert = UIAlertController(title: "\"\" Would Like To Access the Camera", message: "Please grant permission to use the Camera so that you can .", preferredStyle: .alert)

alert.addAction(UIAlertAction(title: "Open Settings", style: .cancel) { alert in

Analytics.track(event: .permissionsPrimeCameraOpenSettings)

if let appSettingsURL = NSURL(string: UIApplicationOpenSettingsURLString) {

UIApplication.shared.openURL(appSettingsURL)

}

})

present(alert, animated: true, completion: nil)

}

func permissionPrimeCameraAccess() {

let alert = UIAlertController(title: "\"\" Would Like To Access the Camera", message: " would like to access your Camera so that you can .", preferredStyle: .alert)

let allowAction = UIAlertAction(title: "Allow", style: .default, handler: { (alert) -> Void in

Analytics.track(event: .permissionsPrimeCameraAccepted)

if AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo).count > 0 {

AVCaptureDevice.requestAccess(forMediaType: AVMediaTypeVideo, completionHandler: { [weak self] granted in

DispatchQueue.main.async {

self?.cameraTabSelected() // try again

}

})

}

})

alert.addAction(allowAction)

let declineAction = UIAlertAction(title: "Not Now", style: .cancel) { (alert) in

Analytics.track(event: .permissionsPrimeCameraCancelled)

}

alert.addAction(declineAction)

present(alert, animated: true, completion: nil)

}

func showCameraPicker() {

let picker = UIImagePickerController()

picker.delegate = self

picker.modalPresentationStyle = UIModalPresentationStyle.currentContext

picker.allowsEditing = false

picker.sourceType = UIImagePickerControllerSourceType.camera

present(picker, animated: true, completion: nil)

} 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值