H4.08.3system camera picker over standing grant设计
一次性拍摄场景应优先使用系统选择器而非请求持续权限
别名: 系统相机 · 一次拍摄 · document camera picker · one-shot capture
概念解释
换头像、拍一张发票、扫一个码,人需要的是这一帧,不是应用长期占用相机。应优先调用系统提供的拍摄或扫描界面:拍完即关、图像以结果交回、应用往往不必持有持续相机权限。上来就申请「允许相机」并留下自定义预览,是把单次任务写成持续能力。这条谈拍摄入口怎么选,不是相册里选已有照片(那是图库粒度),也不是视频通话这种真正持续的预览。
机制
持续相机权限让应用在之后任何时刻打开取景器,包括人已经离开「拍头像」情境之后。系统选择器把能力关在系统进程里:应用拿到的是结果文件,不是传感器开关。对单次任务,这把风险从「从此可以打开相机」收到「这一张图」。自定义预览的唯一正当理由是任务需要持续取景(扫码对准、证件边缘检测、美颜调节);若这些都不存在,自定义预览只是为了品牌,却换来一条长期权限。
边界
实时扫码、AR 测量、视频通话、持续补光调节需要自己的预览,系统选择器完成不了对准过程。系统选择器若仍在幕后申请一次相机权限,应在用完后不把「始终允许」当作成功态。网页的 capture 与文件上传也有类似分界:只要一张图,用文件选择加拍摄,而不是 getUserMedia 长连接。
怎么落地
- 单帧任务走系统拍摄或文档扫描 API;产品代码在这条路径上不请求持续相机权限。
- 需要持续取景的任务才用自定义预览,并在离开该屏时立即释放会话。
- 从自定义预览回到「只需要一张」的改版时,删掉启动时的相机请求。
- 验证:走完「换头像 / 拍发票」后,到系统设置看相机权限是否仍为未决定或仅本次。若变成始终允许,入口选错了。再查离开拍摄屏后是否还有相机会话未关。