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

在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)

} 。

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

  1. linux中打开pdf文件_在Linux中减少PDF文件大小

    linux中打开pdf文件 In our Linux system, If we have a large PDF file, we may want to reduce it's size. We ...

  2. 怎么在Vc中打开MySQL数据库_在vc++中使用mysql数据库_MySQL

    vc++版本:v6.0 Host Info: localhost via TCP/IP Server Info: 5.0.67-community-nt Server Version: 50067 C ...

  3. H5+在浏览器中打开相机扫描二维码

    刚开始提出要在手机浏览器中的HTML页面做扫描是有点懵的,一顿百度后搜到两种方法: 方案一,浏览器中打开相机navigator.mediaDevices.getUserMedia 自带浏览器不支持该属 ...

  4. 【相机】(2)——WebView中打开相机、文件选择器的问题和解决方法

    近几年前端开发真是越来越火,H5 页面开发的移动端页面甚有夺我原生开发半壁江山的意思,忧伤忧伤.不过从实际情况考虑,H5 一套代码到处跑的特性,我们的 Android.IOS-也就只能呵呵了.然而我还 ...

  5. iOS 取相册照片/打开相机

    最近做了个功能,就是关于打开手机相册取照片,或者是通过相机照相 作为菜鸟的我,花了两天的时间才学会,在此分享给大家 基本思路: 1 打开相机:直接打开,通过代理方法取到我们拍下的照片(在进行照片压缩上 ...

  6. 打开相机拍照或从相册中选择照片

    1.添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ...

  7. linux sudo 权限_在Linux中使用sudo委派权限

    linux sudo 权限 我最近写了一个简短的Bash程序,将MP3文件从一个网络主机上的USB拇指驱动器复制到另一网络主机上. 这些文件被复制到我为志愿者组织运行的服务器上的特定目录中,从该目录可 ...

  8. iphone屏幕圆角插件_关于iOS控件设置圆角的一些个人看法(iOS 10.0.2)

    写在最前面:该文章使用的机器是iPhone 6(iOS 10.0.2),得出的结果跟iOS 8和iOS 9不太一样,关于iOS 8和iOS 9的结论,在最后有. 这几天看简书上的文章,看到几篇关于控件 ...

  9. android中打开pdf,在Android应用程序中打开PDF

    我正在开发应用程序,需要在设备中打开pdf文件, 我实际上已经获得了与大多数示例类似的网络上的代码.但是,事情是我无法打开文件,控件直接转到"Exception"部分. 以下是以下 ...

  10. 能在html中打开ppt吗,怎样在PPT中直接打开网页

    怎样在PPT中直接打开网页 2019-10-24 13:09 责任编辑:砕月 导读 / 当我们使用PowerPoint2007做幻灯片演示的时候,经常会碰到超级链接调用到网络信息.但是,只要一点击链接 ...

最新文章

  1. JAVA中大小写转化函数_Java-切换大小写,多个大小写调用同一函数
  2. 北京理工大学python系列课程-北理工《Python语言程序设计》荣获中国最美慕课一等奖...
  3. 给Eclipse提速的7个技巧
  4. Ab Initio软件
  5. OpenCV与图像处理学习十一——分水岭算法(含代码)
  6. 如何手动修改XP系统属性中的技术支持信息
  7. PHP新闻APP,【优速软件】APP/小程序接口:全部新闻列表,POSCMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
  8. Linux的c编程getopt(分析命令行参数)
  9. 【GIS】投影类型的选择
  10. python按行拆分表格_Pandas进阶之DataFrame行列拆分
  11. jvisualvm监控java,配置 jvisualvm 监控Java虚拟机
  12. 计算机操作系统答案(完整版)
  13. java——15位身份证号码升级到18位
  14. 电视盒子线刷固件教程B860AV2.1-A-M-T版
  15. CoffeeScript
  16. c语言三种循环结构特点,c语言循环结构(c语言循环结构特点)
  17. JWS-Exception
  18. # JAVA实现评论功能设计开发
  19. Kibana--KQL和Lucene的区别
  20. 零中频接收机频率转换图_【新品情报站】俄罗斯产VisAir HF DDC/DUC SDR 收发信机视频|接收机|转换器|ddc|天线|调谐器...

热门文章

  1. Java 算法 等差数列
  2. pytorch实现基本AutoEncoder与案例
  3. linux bash gt,linux之bash的基础特性(一)--gt;命令历史(history命令),命令补全,路径补全...
  4. java线程下载文件_Java多线程下载文件实例详解
  5. LY.JAVA面向对象编程.形式参数和返回值
  6. 导入 kotlin(7)
  7. Algorithm: 匈牙利算法
  8. 软件测试相关的63个国外站点
  9. Sqlserver存储过程和C#分页类简化你的代码!
  10. 需要gmail的朋友请留下你们的email,还有86个