鸿蒙中 相机服务:Camera Kit(一)
本文同步发表于微信公众号微信搜索程语新视界即可关注每个工作日都有文章更新一、Camera KitCamera Kit相机服务提供了相机开发的接口访问和操作相机硬件实现预览、拍照和录像等基础操作通过接口组合完成更多操作控制闪光灯、曝光时间、对焦等开发场景场景说明相机应用开发开发独立的相机应用应用内相机模块在应用中嵌入相机功能快速拍摄使用CameraPicker拉起系统相机提示如果仅是需要拉起系统相机拍摄一张照片、录制一段视频可直接使用CameraPicker无需申请相机权限。二、相机开发模型2.1 工作流程三部分相机应用开发的工作流程可概括为三部分┌─────────────────────────────────────────────────────────┐ │ 相机应用 │ ├─────────────────────────────────────────────────────────┤ │ 1. 相机设备 │ 2. 相机会话管理 │ 3. 相机输出管理 │ │ 相机输入流 │ 配置参数 │ 预览/拍照/录像 │ └─────────────────────────────────────────────────────────┘2.2 各模块模块功能说明相机设备相机输入流选择合适的相机镜头前置/后置进行拍摄相机会话管理配置参数配置闪光灯、曝光时间、对焦和调焦等参数相机输出管理输出配置将图像内容以预览流、拍照流或视频流输出2.3 数据流转流程相机设备采集数据 ↓ 图像信号处理器ISP处理 ↓ 相机HDI接口硬件设备接口 ↓ 缓存队列传递 ↓ 上层应用预览/拍照/录像三、相机开发所需权限3.1 权限清单权限说明必需性ohos.permission.CAMERA相机权限访问相机硬件必需ohos.permission.MICROPHONE麦克风权限录制音频时需申请录制音视频时必需ohos.permission.MEDIA_LOCATION地理位置信息照片/视频显示位置时需申请需要位置信息时必需3.2 权限申请原则以上权限均需要配置文件权限声明通过弹窗向用户申请授权3.3 替代方案建议需求推荐方案说明读取图片/视频文件媒体库Picker优先使用PhotoViewPicker选择媒体资源保存图片/视频文件安全控件优先使用SaveButton安全控件保存媒体资源3.4 受限权限说明仅当应用需要克隆、备份或同步用户公共目录的图片、视频类文件时可申请以下受限权限权限说明ohos.permission.READ_IMAGEVIDEO读取图片视频文件ohos.permission.WRITE_IMAGEVIDEO写入图片视频文件注意受限权限需要通过AGC审核后才能使用。为避免应用上架申请被驳回应优先使用Picker/控件等替代方案仅少量符合特殊场景的应用被允许申请受限权限。四、权限申请代码示例4.1 声明权限module.json5{ module: { requestPermissions: [ { name: ohos.permission.CAMERA, reason: $string:camera_permission_reason, usedScene: { abilities: [EntryAbility], when: inuse } }, { name: ohos.permission.MICROPHONE, reason: $string:microphone_permission_reason, usedScene: { abilities: [EntryAbility], when: inuse } } ] } }4.2 动态申请权限import { abilityAccessCtrl, common } from kit.AbilityKit; import { BusinessError } from kit.BasicServicesKit; async function requestCameraPermission() { const permissions: Arraystring [ ohos.permission.CAMERA, ohos.permission.MICROPHONE ]; let atManager abilityAccessCtrl.createAtManager(); let context getContext(this) as common.UIAbilityContext; try { let result await atManager.requestPermissionsFromUser(context, permissions); let grantStatus result.authResults; for (let i 0; i grantStatus.length; i) { if (grantStatus[i] 0) { console.info(${permissions[i]} 授权成功); } else { console.warn(${permissions[i]} 授权失败); } } } catch (error) { let err error as BusinessError; console.error(权限申请失败: ${err.code}, ${err.message}); } }五、CameraPicker快速方案如果仅需要拉起系统相机拍摄一张照片、录制一段视频可直接使用CameraPicker无需申请相机权限直接拉起系统相机完成拍摄。使用场景场景说明快速拍照拉起系统相机拍照后返回快速录像拉起系统相机录像后返回无需预览不需要自定义相机预览界面优势无需申请权限无需声明CAMERA权限开发简单几行代码即可完成用户体验统一使用系统相机界面鸿蒙相机开发可通过Camera Kit实现自定义相机界面需申请CAMERA权限也可通过CameraPicker快速拉起系统相机无需权限读写媒体文件时优先使用Picker/安全控件替代受限权限。