美文网首页
第一次调用相机时弹出系统提示选择拒绝应用Crash的问题

第一次调用相机时弹出系统提示选择拒绝应用Crash的问题

作者: 马克叔_Marco | 来源:发表于2016-11-17 11:31 被阅读50次

很长的前置条件。
应用第一次安装后,第一次调用相机,此时弹出系统提示,如果选择拒绝,应用会crash。
这个问题主要在iOS10以后才被我发现。
因为在iOS10之前,手机会记录同一个应用,即使应用被删除,下次再安装的时候也不会弹系统提示,除非修改BundleID,让系统识别成两个应用。
iOS10之后,每次删掉应用后第一次访问相机,都会提示系统级别授权,所以把这个问题暴露出来了。
再次重现的时候连到真机调试的时候打了全局断点,结果发现崩溃在设置自定义的alertWindow的frame这句。po了一下发现alertWindow没有出现空指针。那么原因很明显了。在操作UI的时候出现了crash,原因是操作UI没有在主线程。回到代码里看发现调用相机状态的判断

    let authStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
    
    switch authStatus {
    case .NotDetermined:
        AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { (granted) in
            if (granted) {
                //第一次用户接受
                if let tmp = handle {
                    tmp()
                }
            }else{
                //用户拒绝 *** 问题在这里,如果第一次用户拒绝了,回调并不在主线程。(注意,此时的case分支在用户并未决定里)
                if let tmp = limitHandle {
                    dispatch_async(dispatch_get_main_queue(), {
                        tmp()
                    })
                }
            }
        })
    case .Restricted: // 无法访问
        dLog("没有设备")
    case .Denied: // 用户拒绝
        if let tmp = limitHandle {
            dispatch_async(dispatch_get_main_queue(), {
                tmp()
            })
        }
    case .Authorized: // 开启授权
        if let tmp = handle {
            tmp()
        }
    }

把用户第一次决定是否要同意使用相册的地方回调放到主线程,即可解决这个问题。

相关文章

  • 第一次调用相机时弹出系统提示选择拒绝应用Crash的问题

    很长的前置条件。应用第一次安装后,第一次调用相机,此时弹出系统提示,如果选择拒绝,应用会crash。这个问题主要在...

  • iOS:权限管理框架

    说明 请求从未询问的权限会弹出系统的权限窗口 请求用户曾经拒绝的权限会展示弹窗提示用户,用户选择同意则跳入系统设置...

  • ios 系统控件显示中文

    问题描述最近在调用系统相机时,出现英文的提示与按钮,所以怎么让显示按系统的语言显示呢? 解决方案打开“info.p...

  • 2018-12-10

    tesCamera(){ let that =this; //调用原生系统弹出按钮选择框let page ...

  • 相机权限以及引导设置

    在第一次使用相机前,系统会弹出提示“是否允许使用相机”,如果我们拒绝权限请求的话,就无法正常使用相机。下面是相机权...

  • 相机、相册权限请求问题

    问题: 在调用相机时,进行了权限请求,发生了Crash。 原因: 在相机权限请求回调中,不在主线程,故唤起UIIm...

  • 如何解决警示窗显示系统调用出现问题?

    用户的显示屏上会突然弹出“系统调用失败”的提示,一时间让小编的朋友不知道该怎么办。Win7提示系统调用失败是什么原...

  • 开发中的小设置

    1、将系统提示文字改为中文 很多情况下,双击UITextField系统会默认弹出Paste,copy等,还有打开相...

  • 【转】Info.plist中常用的key简介

    UIRequiresPersistentWiFi 在程序中弹出wifi选择的key(系统设置中需要将wifi提示打...

  • iOS8下的定位问题及解决方案

    问题 在iOS8之前,app第一次开始定位服务时,系统会弹出一个提示框来让用户选择是否允许使用定位信息。但iOS8...

网友评论

      本文标题:第一次调用相机时弹出系统提示选择拒绝应用Crash的问题

      本文链接:https://www.haomeiwen.com/subject/qfedpttx.html