安卓Expo Go环境下React Native应用无法调用相机问题求助
问题解决:Expo开发模式下相机无法打开,打包APK后正常的问题
核心代码问题:权限判断逻辑错误
你的verifyPermission函数存在逻辑漏洞:当权限处于DENIED状态时,返回的是完整的permissionResponse对象(如{granted: false}),而非布尔值permissionResponse.granted。这会导致imagePickerHandler里的if (!hasPermission)判断失效——对象属于真值,即便权限未被授予,代码仍会执行launchCameraAsync,最终触发相机权限警告。
修复后的verifyPermission函数:
const verifyPermission = async () => { console.log('PermissionStatus.DENIED', PermissionStatus.DENIED); if (cameraPermissionInformation.status === PermissionStatus.UNDETERMINED) { const responseStatus = await requestPermission(); return responseStatus.granted; } if (cameraPermissionInformation.status === PermissionStatus.DENIED) { const permissionResponse = await requestPermission(); console.log('permissionResponse.granted-----', permissionResponse.granted); // 返回布尔值而非对象,确保权限判断逻辑正确 return permissionResponse.granted; } return true; };
开发模式额外配置检查
开发模式下需确保app.json(或app.config.js)中显式声明相机相关权限,Expo开发服务器会依赖该配置发起权限请求:
{ "expo": { "android": { "permissions": [ "CAMERA", "READ_EXTERNAL_STORAGE", "WRITE_EXTERNAL_STORAGE" ] } } }
开发模式权限重置
若之前手动拒绝过应用相机权限,需进入安卓系统设置重置应用权限,再重启开发服务器,确保权限请求流程正常触发。
内容的提问来源于stack exchange,提问作者Infinity Bot
相关产品推荐
相关产品推荐

