/** * 相机拍照能力(契约 §8.8/§9,T-M3-12)。@kit.CameraKit CameraPicker。 * - opencamera:拉起系统相机拍照 → 出站 getcameraaAddress(拼写原样双 a,照片 uri 裸串)。 * 系统相机选择器无需申请相机权限。 */ import { camera, cameraPicker } from '@kit.CameraKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { common } from '@kit.AbilityKit'; import { BridgeController } from 'feature_bridge'; import { InboundHandlers, OutboundHandlers } from 'contracts'; import { Logger } from 'common'; import { CapabilityContext, CapabilityProvider } from '../core/CapabilityProvider'; export class CameraProvider implements CapabilityProvider { readonly name: string = 'camera'; private readonly log: Logger = Logger.tag('CameraProvider'); private bridge: BridgeController | undefined = undefined; private context: common.UIAbilityContext | undefined = undefined; register(bridge: BridgeController, ctx: CapabilityContext): void { this.bridge = bridge; this.context = ctx.uiAbilityContext; bridge.registerHandler(InboundHandlers.OpenCamera, (_d: string, _cb: (resp: string) => void) => { this.capture(); }); } private capture(): void { const ctx = this.context; if (ctx === undefined) { return; } const profile: cameraPicker.PickerProfile = { cameraPosition: camera.CameraPosition.CAMERA_POSITION_BACK, }; cameraPicker.pick(ctx, [cameraPicker.PickerMediaType.PHOTO], profile) .then((result: cameraPicker.PickerResult) => { if (result.resultCode === 0 && result.resultUri !== '') { this.bridge?.callHandler(OutboundHandlers.GetCameraAddress, result.resultUri); } else { this.log.i(`camera canceled: resultCode=${result.resultCode}`); } }) .catch((e: BusinessError) => { this.log.i(`camera failed: ${e.code} ${e.message}`); }); } }