如何判断Android运行时权限弹窗中用户选择的选项?
iOS相机权限选择结果的判断与回调方法
一、通过权限请求回调获取用户选择
iOS中请求相机权限时,AVFoundation框架提供了闭包回调,可以直接在回调中判断用户的选择:
1. 请求权限并处理结果
导入AVFoundation后,调用requestAccess(for:completionHandler:)方法,在回调里解析权限状态:
import AVFoundation // 请求相机权限 AVCaptureDevice.requestAccess(for: .video) { [weak self] granted in // 切回主线程更新UI或处理逻辑 DispatchQueue.main.async { let status = AVCaptureDevice.authorizationStatus(for: .video) switch status { case .authorized: // 对应用户选择「While using the app」 print("用户允许App使用期间访问相机") case .limited: // iOS 14+新增,对应用户选择「Only this time」 print("用户仅允许本次访问相机") case .denied, .restricted: // 对应用户选择「Don't allow」,或权限被系统限制(如家长控制) print("用户拒绝相机权限") case .notDetermined: // 权限未请求过(此状态不会出现在该回调中) break @unknown default: break } } }
2. 各状态对应选项说明
authorized:用户选择「While using the app」,App在前台运行时可正常访问相机。limited:仅iOS 14及以上支持,对应用户选择「Only this time」,本次App会话内可访问相机,下次启动需重新请求。denied:用户明确选择「Don't allow」,后续App无法访问相机,需引导用户去设置页修改权限。restricted:权限被系统限制(如设备开启了家长控制),用户无法自主修改权限。
二、主动查询当前权限状态
如果需要在非请求时机(比如App启动时)检查相机权限状态,可直接调用以下方法:
let currentCameraStatus = AVCaptureDevice.authorizationStatus(for: .video) // 根据currentCameraStatus做对应处理
内容的提问来源于stack exchange,提问作者kc_dev
相关产品推荐
相关产品推荐

