diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 1c95b4ebf95d54d4637998cc7f6752ad44190f8e..294ed25caa6f5aa5d68267cf86ea12e6558a968b 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -63,6 +63,8 @@ struct Index { async onPageHide(): Promise { Logger.info(TAG, 'onPageHide'); + this.flashMode = camera.FlashMode.FLASH_MODE_CLOSE; + CameraService.hasFlashFn(this.flashMode); } build() { @@ -114,7 +116,9 @@ struct Index { SlideComponent() // photograph - ModeComponent() + ModeComponent({ + flashMode: $flashMode + }) Row({ space: Constants.ROW_SPACE_24 }) { FlashingLightComponent({ diff --git a/entry/src/main/ets/views/FlashingLightComponent.ets b/entry/src/main/ets/views/FlashingLightComponent.ets index 6b631c8e6de2a5607d52d1819d77845ab144e80f..bed6a124f193e7fcaa2a9c085443f3e99c151937 100644 --- a/entry/src/main/ets/views/FlashingLightComponent.ets +++ b/entry/src/main/ets/views/FlashingLightComponent.ets @@ -21,6 +21,7 @@ const TAG: string = 'FlashingLightComponent'; @Component export struct FlashingLightComponent { + @StorageLink('sceneMode') sceneMode: camera.SceneMode = camera.SceneMode.NORMAL_PHOTO; @Link @Watch('flashModeChange') flashMode: camera.FlashMode; @State flashIconResource: Resource = $r('app.media.ic_camera_public_flash_off'); @@ -55,7 +56,8 @@ export struct FlashingLightComponent { .backgroundColor($r('app.color.flash_background_color')) .borderRadius($r('app.string.50px')) .onClick(() => { - this.flashMode = (this.flashMode + 1) % 4; + this.sceneMode === camera.SceneMode.NORMAL_PHOTO ? + (this.flashMode = (this.flashMode + 1) % 4) : (this.flashMode = this.flashMode === 0 ? 3 : 0); Logger.info(TAG, `flashMode: ${this.flashMode}`); CameraService.hasFlashFn(this.flashMode); }) diff --git a/entry/src/main/ets/views/ModeComponent.ets b/entry/src/main/ets/views/ModeComponent.ets index b365f9af837d8951ffada225d482672cbb3ee563..6cd0a974d5b218e82c34861d4c1afdbca394eaba 100644 --- a/entry/src/main/ets/views/ModeComponent.ets +++ b/entry/src/main/ets/views/ModeComponent.ets @@ -27,7 +27,8 @@ const TAG: string = 'ModeComponent'; export struct ModeComponent { @StorageLink('isOpenEditPage') @Watch('changePageState') isOpenEditPage: boolean = false; @StorageLink('cameraIndex') cameraIndex: number = 0; - @State sceneMode: camera.SceneMode = camera.SceneMode.NORMAL_PHOTO; + @StorageLink('sceneMode') sceneMode: camera.SceneMode = camera.SceneMode.NORMAL_PHOTO; + @Link flashMode: camera.FlashMode; @State isRecording: boolean = false; changePageState(): void { @@ -81,10 +82,12 @@ export struct ModeComponent { return; } this.sceneMode = camera.SceneMode.NORMAL_PHOTO; + this.flashMode = camera.FlashMode.FLASH_MODE_CLOSE; CameraService.setSceneMode(this.sceneMode); let cameraDeviceIndex = GlobalContext.get().getT('cameraDeviceIndex'); let surfaceId = GlobalContext.get().getT('xComponentSurfaceId'); await CameraService.initCamera(surfaceId, cameraDeviceIndex); + CameraService.hasFlashFn(this.flashMode); }) Column() { @@ -100,10 +103,12 @@ export struct ModeComponent { return; } this.sceneMode = camera.SceneMode.NORMAL_VIDEO; + this.flashMode = camera.FlashMode.FLASH_MODE_CLOSE; CameraService.setSceneMode(this.sceneMode); let cameraDeviceIndex = GlobalContext.get().getT('cameraDeviceIndex'); let surfaceId = GlobalContext.get().getT('xComponentSurfaceId'); await CameraService.initCamera(surfaceId, cameraDeviceIndex); + CameraService.hasFlashFn(this.flashMode); }) } .height(Constants.CAPTURE_ROW_HEIGHT) @@ -188,7 +193,9 @@ export struct ModeComponent { cameraDeviceIndex ? cameraDeviceIndex = 0 : cameraDeviceIndex = 1; GlobalContext.get().setObject('cameraDeviceIndex', cameraDeviceIndex); this.cameraIndex = cameraDeviceIndex; + this.flashMode = camera.FlashMode.FLASH_MODE_CLOSE; await CameraService.initCamera(surfaceId, cameraDeviceIndex); + CameraService.hasFlashFn(this.flashMode); }) } }