React Native Vision Camera存储与后台能力问题咨询
react-native-vision-camera 相关问题解答
1. 临时拍摄/录制文件保存到系统媒体目录方法
这个库拍的照片、录的视频默认都存在App自己的临时缓存目录里,存储空间不够的时候系统会直接清这部分文件,要存到系统公共媒体目录(也就是系统相册能识别的位置),按平台分开处理就行:
- 安卓端:先对应版本申请存储权限,Android13及以上要申请
READ_MEDIA_IMAGES、READ_MEDIA_VIDEO,老版本申请WRITE_EXTERNAL_STORAGE。拿到返回的临时文件本地路径后,要么自己写原生桥接调用系统媒体存储API,把文件拷贝到DCIM、Pictures这类公共媒体目录,插入成功后系统会自动识别,相册里就能看到;要么直接用成熟的本地文件处理类库做拷贝、刷新媒体库的操作,省得自己写原生逻辑。别图省事直接把临时文件剪切过去,一定要做拷贝,临时目录的文件随时可能被系统回收,直接引用原路径大概率会出文件失效的问题。 - iOS端:先申请相册写入权限,拿到临时文件路径后调用系统
PHPhotoLibrary相关接口把文件存到系统相册就行,存完之后可以按需把临时目录里的原文件删掉,避免占多余的存储空间。
小提示:保存完最好校验下目标文件的大小、可读性,避免权限没给全、IO写入出错导致存出来的文件损坏打不开。
2. 离开页面、切后台、锁屏状态下的持续录制支持
默认配置下完全不支持后台持续录制,分场景给你说清楚实际表现:
- 离开react-navigation对应页面:如果页面跳转的时候相机组件跟着卸载了,录制会直接中断;如果只是盖了个透明页、弹窗,相机组件没被销毁,那前台状态下录制会继续,一旦组件销毁录制立刻停。
- 切到其他应用、锁定手机:App进后台之后系统会直接暂停相机捕获会话,默认配置下录制马上中断,严重的时候还可能因为相机资源被系统强收导致应用闪退。
如果一定要做后台持续录制,得自己补原生端的配置,库本身不自带这部分能力: - iOS端要开后台音频权限,把音频会话设置成播放+录制分类,在Xcode里把后台模式的音频选项勾上,才能在锁屏、切后台的时候保持相机录制不中断。注意这个能力上架的时候必须符合App Store的审核规则,乱开后台权限很容易被拒审。
- 安卓端要配置常驻前台服务,给服务绑定相机、麦克风权限,App切后台的时候立刻启动前台服务持有相机会话,才能保持后台录制。安卓12及以上版本还要单独适配前台服务的特殊权限申请,不然服务会被系统直接杀死,录制还是会断。
不管哪个平台,后台用相机、麦克风的时候系统都会有非常明显的常驻提示,不存在无感知偷偷后台录制的可能,别想绕开系统限制做违规功能。
内容的提问来源于stack exchange,提问作者Elolawyn
相关产品推荐
相关产品推荐

