如何判断Unity应用是否获得设备摄像头访问权限及相关异常处理方案
问题原因确认
你关于try-catch不生效的推测是正确的:WebCamTexture.Play()输出的ERROR - Could not find specified video device属于Unity底层Native层的错误日志,并非C#托管层抛出的异常,该错误已经在引擎底层完成捕获处理,因此上层C#代码的try-catch块无法捕获到该异常。
摄像头权限检测解决方案
你可以通过以下两种成熟方案检测用户是否拒绝了摄像头权限:
方案1:主动提前申请摄像头权限
无需等待调用WebCamTexture接口触发权限申请,可在初始化摄像头逻辑前主动调用Unity官方的权限申请接口,直接根据权限返回结果判断访问状态:
安卓端示例代码:using UnityEngine.Android; // 调用摄像头逻辑前先检查权限 if (!Permission.HasUserAuthorizedPermission(Permission.Camera)) { // 发起权限申请,可自定义回调监听用户选择结果 Permission.RequestUserPermission(Permission.Camera); } else { // 已获得权限,直接执行摄像头初始化逻辑 }iOS端可使用Unity提供的iOS权限申请API,或在XCode打包配置中补充权限描述后调用对应授权接口,获取授权状态。
方案2:通过
WebCamTexture运行状态判定授权结果
若你已经调用了backCam.Play(),可以在调用后延迟2-3帧检测WebCamTexture的运行参数判断是否授权成功:backCam.Play(); // 等待底层完成摄像头初始化尝试 yield return new WaitForEndOfFrame(); yield return new WaitForEndOfFrame(); yield return new WaitForEndOfFrame(); // 权限被拒时,WebCamTexture宽高会保持初始极小值(通常为16x16),且isPlaying状态为false if (backCam.width <= 16 || backCam.height <= 16 || !backCam.isPlaying) { // 判定为用户拒绝摄像头权限,执行对应错误提示逻辑 }
内容的提问来源于stack exchange,提问作者Divinor
相关产品推荐
相关产品推荐

