HarmonyOS 应用开发《掌上英语》第96篇:相机管理实践指南 相机管理(ArkTS)在开发一个相机应用前需要先通过调用相机接口来创建一个相机管理实例。开发步骤详细的API说明请参考ohos.multimedia.camera (相机管理)。导入camera接口接口中提供了相机相关的属性和方法导入方法如下。import{camera}fromkit.CameraKit;import{BusinessError}fromkit.BasicServicesKit;import{common}fromkit.AbilityKit;通过getCameraManager方法获取cameraManager对象。Context获取方式请参考获取UIAbility的上下文信息。functiongetCameraManager(context:common.BaseContext):camera.CameraManager|undefined{letcameraManager:camera.CameraManager;try{cameraManagercamera.getCameraManager(context);}catch(error){leterrerrorasBusinessError;console.error(getCameraManager error, errCode:${err.code});returnundefined;}returncameraManager;}说明如果获取对象失败说明相机可能被占用或无法使用。如果被占用须等到相机被释放后才能重新获取。通过CameraManager中的getSupportedCameras方法获取当前设备支持的相机列表列表中存储了设备支持的所有相机ID。若列表不为空则说明列表中的每个ID都支持独立创建相机对象否则说明当前设备无可用相机无法进行后续操作。functiongetCameraDevices(cameraManager:camera.CameraManager):Arraycamera.CameraDevice{letcameraArray:Arraycamera.CameraDevicecameraManager.getSupportedCameras();if(cameraArray!undefinedcameraArray.length0){for(letindex0;indexcameraArray.length;index){console.info(cameraId : cameraArray[index].cameraId);// 获取相机ID。console.info(cameraPosition : cameraArray[index].cameraPosition);// 获取相机位置。console.info(cameraType : cameraArray[index].cameraType);// 获取相机类型。console.info(connectionType : cameraArray[index].connectionType);// 获取相机连接类型。}returncameraArray;}else{console.error(cameraManager.getSupportedCameras error);return[];}}状态监听在相机应用开发过程中可以随时监听相机状态包括新相机的出现、相机的移除、相机的可用状态。在回调函数中通过相机ID、相机状态这两个参数进行监听如当有新相机出现时可以将新相机加入到应用的备用相机中。通过注册cameraStatus事件通过回调返回监听结果callback返回CameraStatusInfo参数参数的具体内容可参考相机管理器回调接口实例CameraStatusInfo。functiononCameraStatusChange(cameraManager:camera.CameraManager):void{cameraManager.on(cameraStatus,(err:BusinessError,cameraStatusInfo:camera.CameraStatusInfo){if(err!undefinederr.code!0){console.error(Callback Error, errorCode:${err.code});return;}// 如果当通过USB连接相机设备时回调函数会返回新的相机出现状态。if(cameraStatusInfo.statuscamera.CameraStatus.CAMERA_STATUS_APPEAR){console.info(New Camera device appear.);}// 如果当断开相机设备USB连接时回调函数会返回相机被移除状态。if(cameraStatusInfo.statuscamera.CameraStatus.CAMERA_STATUS_DISAPPEAR){console.info(Camera device has been removed.);}// 相机被关闭时回调函数会返回相机可用状态。if(cameraStatusInfo.statuscamera.CameraStatus.CAMERA_STATUS_AVAILABLE){console.info(Current Camera is available.);}// 相机被打开/占用时回调函数会返回相机不可用状态。if(cameraStatusInfo.statuscamera.CameraStatus.CAMERA_STATUS_UNAVAILABLE){console.info(Current Camera has been occupied.);}console.info(camera:${cameraStatusInfo.camera.cameraId});console.info(status:${cameraStatusInfo.status});});}