From a6dd0b7c7ef8700cf2d0b52ff13ae7f4d214c3b1 Mon Sep 17 00:00:00 2001 From: wanwenbo <13322507+wangwenbo55@user.noreply.gitee.com> Date: Wed, 26 Mar 2025 19:24:11 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=80=82=E9=85=8D=E7=9B=B8=E6=9C=BA?= =?UTF-8?q?=E6=97=8B=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- entry/src/main/ets/pages/Index.ets | 45 +++++----- entry/src/main/ets/pages/MovingPhotoPage.ets | 85 ------------------- entry/src/main/ets/utils/CameraShooter.ets | 31 +++++-- entry/src/main/ets/utils/GravityUtil.ets | 69 +++++++++++++++ entry/src/main/ets/utils/VideoRecorder.ets | 25 +++++- .../resources/base/profile/main_pages.json | 3 +- 7 files changed, 147 insertions(+), 115 deletions(-) delete mode 100644 entry/src/main/ets/pages/MovingPhotoPage.ets create mode 100644 entry/src/main/ets/utils/GravityUtil.ets diff --git a/README.md b/README.md index 0667acd..253256c 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ │ ├──entryability │ │ └──EntryAbility.ets │ ├──pages -│ │ ├──Index.ets // 主页 -│ │ └──MovingPhotoPage.ets //动态图片预览页 +│ │ └──Index.ets // 主页 │ ├──utils │ │ ├──CameraShooter.ets // 拍照 +│ │ ├──GravityUtil.ets // 重力工具类 │ │ └──VideoRecorder.ets // 录像 └──entry/src/main/resource // 应用静态资源目录 ``` diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index f350f50..c4a3179 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -45,10 +45,6 @@ import display from '@ohos.display'; import { curves } from '@kit.ArkUI'; import { sensor } from '@kit.SensorServiceKit'; -let previewSize: camera.Size = { - width: CameraConstants.PREVIEW_WIDTH, - height: CameraConstants.PREVIEW_HEIGHT -}; let cameraPosition = 0; let surfaceId = ''; let zoomRatioRange: number[] = []; @@ -119,11 +115,7 @@ struct XComponentPage { } foldAbleStatus = foldStatus; this.foldAbleStatus = foldStatus; - if (foldStatus === 1) { - cameraPosition = cameraPosition === 0 ? 0 : 2; - } else { - cameraPosition = cameraPosition === 0 ? 0 : 1; - } + cameraPosition = cameraPosition === 0 ? 0 : 1; setTimeout(() => { this.mXComponentController.setXComponentSurfaceRect({ surfaceWidth: this.foldAbleStatus === FoldStatus.FOLD_STATUS_EXPANDED ? 1400 : @@ -162,6 +154,8 @@ struct XComponentPage { .height(CameraConstants.IMAGE_SIZE) .margin(CameraConstants.MARGIN) .visibility(this.isPhoto || this.isFront ? Visibility.Hidden : Visibility.Visible) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(() => { this.isStabilization = !this.isStabilization; videoRecording(this.isStabilization, cameraPosition, qualityLevel, surfaceId, context, foldAbleStatus); @@ -171,6 +165,8 @@ struct XComponentPage { .height(CameraConstants.IMAGE_SIZE) .margin(CameraConstants.MARGIN) .visibility(this.isPhoto && !this.isFront ? Visibility.Visible : Visibility.Hidden) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(() => { this.isMovingPhoto = !this.isMovingPhoto; enableLivePic(this.isMovingPhoto); @@ -179,6 +175,8 @@ struct XComponentPage { .height(CameraConstants.IMAGE_HEIGHT) .margin(CameraConstants.MARGIN) .visibility(this.isFront ? Visibility.Hidden : Visibility.Visible) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .bindMenu(this.isPhoto ? [ { value: 'off', @@ -230,6 +228,8 @@ struct XComponentPage { .height(CameraConstants.IMAGE_SIZE) .margin(CameraConstants.MARGIN) .visibility(this.isPhoto ? Visibility.Hidden : this.isFront ? Visibility.Hidden : Visibility.Visible) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .bindMenu( [ { @@ -295,6 +295,8 @@ struct XComponentPage { Row() { Image(0 < this.zoom && this.zoom < 1 ? $r('app.media.W_0') : $r('app.media.W')) .height(CameraConstants.ZOOM_SIZE) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(() => { this.zoom = zoomRatioRange[0]; this.setZoom(); @@ -306,6 +308,8 @@ struct XComponentPage { Image(1 <= this.zoom && this.zoom < 5 ? $r('app.media.1x_0') : $r('app.media.1x')) .margin({ left: CameraConstants.MARGIN_LEFT }) .height(CameraConstants.ZOOM_SIZE) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(() => { this.zoom = 1; this.setZoom(); @@ -317,6 +321,8 @@ struct XComponentPage { Image(5 <= this.zoom && this.zoom < 10 ? $r('app.media.5x_0') : $r('app.media.5x')) .margin({ left: CameraConstants.MARGIN_LEFT }) .height(CameraConstants.ZOOM_SIZE) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(() => { this.zoom = 5; this.setZoom(); @@ -328,6 +334,8 @@ struct XComponentPage { Image(this.zoom >= 10 ? $r('app.media.10x_0') : $r('app.media.10x')) .margin({ left: CameraConstants.MARGIN_LEFT }) .height(CameraConstants.ZOOM_SIZE) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(() => { this.zoom = 10; this.setZoom(); @@ -345,6 +353,8 @@ struct XComponentPage { Row() { Text($r('app.string.Photo')) .fontColor(this.isPhoto ? Color.White : Color.Gray) + .rotate({ angle: this.rotation === camera.ImageRotation.ROTATION_180 ? this.rotation : 0 }) + .animation({ curve: curves.springMotion() }) .onClick(async () => { if (!this.isPhoto) { this.isPhoto = true; @@ -356,6 +366,8 @@ struct XComponentPage { }) Text($r('app.string.Video')) .fontColor(this.isPhoto ? Color.Gray : Color.White) + .rotate({ angle: this.rotation === camera.ImageRotation.ROTATION_180 ? this.rotation : 0 }) + .animation({ curve: curves.springMotion() }) .onClick(() => { if (this.isPhoto) { this.isPhoto = false; @@ -428,17 +440,10 @@ struct XComponentPage { Image($r('app.media.switch_camera')) .height(CameraConstants.CAMERA_SWITCH_SIZE) .visibility(this.recording ? Visibility.Hidden : Visibility.Visible) + .rotate({ angle: this.rotation }) + .animation({ curve: curves.springMotion() }) .onClick(async () => { - if (this.isFoldAble) { - foldAbleStatus = display.getFoldStatus(); - if (foldAbleStatus === 1) { - cameraPosition = cameraPosition === 0 ? 2 : 0; - } else { - cameraPosition = cameraPosition === 1 ? 0 : 1; - } - } else { - cameraPosition = cameraPosition === 1 ? 0 : 1 - } + cameraPosition = cameraPosition === 1 ? 0 : 1 if (this.isPhoto) { cameraShooting(isVideo, cameraPosition, surfaceId, context, foldAbleStatus); diff --git a/entry/src/main/ets/pages/MovingPhotoPage.ets b/entry/src/main/ets/pages/MovingPhotoPage.ets deleted file mode 100644 index c4a9436..0000000 --- a/entry/src/main/ets/pages/MovingPhotoPage.ets +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2024 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { photoAccessHelper } from '@kit.MediaLibraryKit'; -import { MovingPhotoView, MovingPhotoViewController, MovingPhotoViewAttribute } from '@ohos.multimedia.movingphotoview'; -import { emitter } from '@kit.BasicServicesKit'; -import { dataSharePredicates } from '@kit.ArkData'; - -const PHOTO_SELECT_EVENT_ID: number = 80001; -let context = getContext(this); - -@Entry -@Component -struct MovingPhotoPage { - @State src: photoAccessHelper.MovingPhoto | undefined = undefined; - @State isMuted: boolean = false; - controller: MovingPhotoViewController = new MovingPhotoViewController(); - - async aboutToAppear(): Promise { - emitter.on({ - eventId: PHOTO_SELECT_EVENT_ID, - priority: emitter.EventPriority.IMMEDIATE, - }, () => { - this.src = AppStorage.get('mv_data') as photoAccessHelper.MovingPhoto; - }) - - let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates(); - let fetchOptions: photoAccessHelper.FetchOptions = { - fetchColumns: [], - predicates: predicates - }; - let photoHelper = photoAccessHelper.getPhotoAccessHelper(context); - let fetchResult: photoAccessHelper.FetchResult = - await photoHelper.getAssets(fetchOptions); - if (fetchResult !== undefined) { - let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getLastObject(); - let requestOptions: photoAccessHelper.RequestOptions = { - deliveryMode: photoAccessHelper.DeliveryMode.FAST_MODE, - } - photoAccessHelper.MediaAssetManager.requestMovingPhoto(context, photoAsset, requestOptions, - new MediaDataHandlerMovingPhoto()); - } - } - - aboutToDisappear(): void { - emitter.off(PHOTO_SELECT_EVENT_ID); - } - - build() { - Column() { - Row() { - Column() { - MovingPhotoView({ - movingPhoto: this.src, - controller: this.controller - }) - .muted(this.isMuted) - .objectFit(ImageFit.Contain) - } - } - } - } -} - -class MediaDataHandlerMovingPhoto implements photoAccessHelper.MediaAssetDataHandler { - async onDataPrepared(movingPhoto: photoAccessHelper.MovingPhoto): Promise { - AppStorage.setOrCreate('mv_data', movingPhoto); - emitter.emit({ - eventId: PHOTO_SELECT_EVENT_ID, - priority: emitter.EventPriority.IMMEDIATE, - }, {}); - } -} \ No newline at end of file diff --git a/entry/src/main/ets/utils/CameraShooter.ets b/entry/src/main/ets/utils/CameraShooter.ets index 4812c35..f6d3a4a 100644 --- a/entry/src/main/ets/utils/CameraShooter.ets +++ b/entry/src/main/ets/utils/CameraShooter.ets @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -20,6 +20,7 @@ import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { common } from '@kit.AbilityKit'; import { display } from '@kit.ArkUI'; import { colorSpaceManager } from '@kit.ArkGraphics2D'; +import { getGravity } from './GravityUtil'; let previewOutput: camera.PreviewOutput; let cameraInput: camera.CameraInput; @@ -77,7 +78,7 @@ export async function cameraShooting(isVideo: boolean, cameraPosition: number, s if (previewProfile) { return profile.size.width <= 4096 && profile.size.width >= 2448 && profile.size.height === (foldAbleStatus === display.FoldStatus.FOLD_STATUS_EXPANDED ? 1 : - (previewProfile.size.height / previewProfile.size.width)) * profile.size.width; + (previewProfile.size.height / previewProfile.size.width)) * profile.size.width; } return undefined; }); @@ -138,10 +139,11 @@ export function setPhotoSmoothZoom(zoom: number): void { photoSession.setSmoothZoom(zoom); } -export function capture(isFront: boolean): void { +export async function capture(isFront: boolean) { + const curRotation = await getGravity() let settings: camera.PhotoCaptureSetting = { quality: camera.QualityLevel.QUALITY_LEVEL_HIGH, - rotation: camera.ImageRotation.ROTATION_0, + rotation: curRotation ? getPhotoRotation(photoOutPut, curRotation) : camera.ImageRotation.ROTATION_0, mirror: isFront }; photoOutPut.capture(settings); @@ -184,7 +186,10 @@ function setPhotoOutputCb(photoOutput: camera.PhotoOutput): void { AppStorage.setOrCreate('photoUri', await photoAsset.getThumbnail()); }); } - +/** + * Jump to the system application gallery + * @param context + */ export function previewPhoto(context: Context): void { let photoContext = context as common.UIAbilityContext; photoContext.startAbility({ @@ -193,4 +198,20 @@ export function previewPhoto(context: Context): void { bundleName: 'com.huawei.hmos.photos', abilityName: 'com.huawei.hmos.photos.MainAbility' }) +} +/** + * Get cur photo camera.ImageRotation + * @param photoOutput + * @param deviceDegree + * @returns + */ +function getPhotoRotation(photoOutput: camera.PhotoOutput, deviceDegree: number): camera.ImageRotation { + let photoRotation: camera.ImageRotation = camera.ImageRotation.ROTATION_0; + try { + photoRotation = photoOutput.getPhotoRotation(deviceDegree); + } catch (error) { + let err = error as BusinessError; + console.error(`The photoOutput.getPhotoRotation call failed. error code: ${err.code}`); + } + return photoRotation; } \ No newline at end of file diff --git a/entry/src/main/ets/utils/GravityUtil.ets b/entry/src/main/ets/utils/GravityUtil.ets new file mode 100644 index 0000000..ef1e48d --- /dev/null +++ b/entry/src/main/ets/utils/GravityUtil.ets @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Decimal } from '@kit.ArkTS'; +import { sensor } from '@kit.SensorServiceKit'; +/** + * Obtain device degree by sensor data + * @param data + * @returns + */ +function getRealData(data: sensor.GravityResponse): number { + let getDeviceDegree: number = 0; + console.info('Succeeded in invoki e. X-coordinate component: ' + data.x); + console.info('Succeeded in invoking once. Y-coordinate component: ' + data.y); + console.info('Succeeded in invoking once. Z-coordinate component: ' + data.z); + let x = data.x; + let y = data.y; + let z = data.z; + if ((x * x + y * y) * 3 < z * z) { + return getDeviceDegree; + } else { + let sd: Decimal = Decimal.atan2(y, -x); + let sc: Decimal = Decimal.round(Number(sd) / 3.141592653589 * 180) + getDeviceDegree = 90 - Number(sc); + getDeviceDegree = getDeviceDegree >= 0 ? getDeviceDegree % 360 : getDeviceDegree % 360 + 360; + } + return getDeviceDegree; +} +/** + * Obtain device data from gravity sensors + * @returns + */ +export async function getGravity(): Promise { + let isSupported: boolean = false + const data = await sensor.getSensorList() + for (let i = 0; i < data.length; i++) { + if (data[i].sensorId === sensor.SensorId.GRAVITY) { + isSupported = true; + break; + } + } + if (isSupported === true) { + const promise: Promise = new Promise((resolve, reject) => { + sensor.once(sensor.SensorId.GRAVITY, (data: sensor.GravityResponse) => { + resolve(getRealData(data)); + }); + }) + return promise; + } else { + const promise: Promise = new Promise((resolve, reject) => { + sensor.once(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => { + resolve(getRealData(data)); + }); + }) + return promise; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/utils/VideoRecorder.ets b/entry/src/main/ets/utils/VideoRecorder.ets index e907eef..cb15123 100644 --- a/entry/src/main/ets/utils/VideoRecorder.ets +++ b/entry/src/main/ets/utils/VideoRecorder.ets @@ -19,6 +19,8 @@ import { photoAccessHelper } from '@kit.MediaLibraryKit'; import { fileIo } from '@kit.CoreFileKit'; import { common } from '@kit.AbilityKit'; import { display } from '@kit.ArkUI'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { getGravity } from './GravityUtil'; let file: fileIo.File; let previewOutput: camera.PreviewOutput; @@ -62,7 +64,7 @@ export async function videoRecording(isStabilization: boolean, cameraPosition: n } let previewProfile: undefined | camera.Profile = previewProfilesArray.find((profile: camera.Profile) => { let screen = display.getDefaultDisplaySync(); - if (screen.width <= 1440 ) { + if (screen.width <= 1440) { return profile.size.height === 1080 && profile.size.width === 1920; } return profile.size.height <= screen.width && profile.size.height >= 1080 && @@ -192,6 +194,9 @@ export function setVideoSmoothZoom(zoom: number): void { } export async function startRecord(): Promise { + // Update the rotation angle before starting recording + const deviceDegree = await getGravity() + await avRecorder.updateRotation(getVideoRotation(videoOutput,deviceDegree)) await videoOutput.start(); await avRecorder.start(); } @@ -216,3 +221,21 @@ export function previewVideo(context: Context, videoUri: string): void { abilityName: 'com.huawei.hmos.photos.MainAbility' }) } + +/** + * Get cur video camera.ImageRotation + * @param photoOutput + * @param deviceDegree + * @returns + */ +function getVideoRotation(videoOutput: camera.VideoOutput, deviceDegree: number): camera.ImageRotation { + let videoRotation: camera.ImageRotation = camera.ImageRotation.ROTATION_0; + try { + videoRotation = videoOutput.getVideoRotation(deviceDegree); + console.log(`Video rotation is: ${videoRotation}`); + } catch (error) { + let err = error as BusinessError; + console.error(`The videoOutput.getVideoRotation call failed. error code: ${err.code}`); + } + return videoRotation; +} \ No newline at end of file diff --git a/entry/src/main/resources/base/profile/main_pages.json b/entry/src/main/resources/base/profile/main_pages.json index 93f40d0..55c3f00 100644 --- a/entry/src/main/resources/base/profile/main_pages.json +++ b/entry/src/main/resources/base/profile/main_pages.json @@ -1,6 +1,5 @@ { "src": [ - "pages/Index", - "pages/MovingPhotoPage" + "pages/Index" ] } \ No newline at end of file -- Gitee From 63b38fc3f4878421caaceeda7c50c07770ca6179 Mon Sep 17 00:00:00 2001 From: wanwenbo <13322507+wangwenbo55@user.noreply.gitee.com> Date: Thu, 27 Mar 2025 10:20:07 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=8D=E5=8A=9B?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/utils/GravityUtil.ets | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/entry/src/main/ets/utils/GravityUtil.ets b/entry/src/main/ets/utils/GravityUtil.ets index ef1e48d..77f5ef9 100644 --- a/entry/src/main/ets/utils/GravityUtil.ets +++ b/entry/src/main/ets/utils/GravityUtil.ets @@ -15,6 +15,7 @@ import { Decimal } from '@kit.ArkTS'; import { sensor } from '@kit.SensorServiceKit'; + /** * Obtain device degree by sensor data * @param data @@ -38,6 +39,7 @@ function getRealData(data: sensor.GravityResponse): number { } return getDeviceDegree; } + /** * Obtain device data from gravity sensors * @returns @@ -51,16 +53,12 @@ export async function getGravity(): Promise { break; } } - if (isSupported === true) { - const promise: Promise = new Promise((resolve, reject) => { - sensor.once(sensor.SensorId.GRAVITY, (data: sensor.GravityResponse) => { - resolve(getRealData(data)); - }); - }) - return promise; + if (!isSupported) { + console.error(`The getGravity call failed. error is device unsupported`); + return 0; } else { const promise: Promise = new Promise((resolve, reject) => { - sensor.once(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => { + sensor.once(sensor.SensorId.GRAVITY, (data: sensor.GravityResponse) => { resolve(getRealData(data)); }); }) -- Gitee From a3f08e42b70dee053f6f6e11a64644ae38624fc8 Mon Sep 17 00:00:00 2001 From: wanwenbo <13322507+wangwenbo55@user.noreply.gitee.com> Date: Thu, 27 Mar 2025 14:41:55 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=87=8D=E5=8A=9B?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/utils/GravityUtil.ets | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entry/src/main/ets/utils/GravityUtil.ets b/entry/src/main/ets/utils/GravityUtil.ets index 77f5ef9..75b3809 100644 --- a/entry/src/main/ets/utils/GravityUtil.ets +++ b/entry/src/main/ets/utils/GravityUtil.ets @@ -23,7 +23,7 @@ import { sensor } from '@kit.SensorServiceKit'; */ function getRealData(data: sensor.GravityResponse): number { let getDeviceDegree: number = 0; - console.info('Succeeded in invoki e. X-coordinate component: ' + data.x); + console.info('Succeeded in invoking once. X-coordinate component: ' + data.x); console.info('Succeeded in invoking once. Y-coordinate component: ' + data.y); console.info('Succeeded in invoking once. Z-coordinate component: ' + data.z); let x = data.x; @@ -57,7 +57,7 @@ export async function getGravity(): Promise { console.error(`The getGravity call failed. error is device unsupported`); return 0; } else { - const promise: Promise = new Promise((resolve, reject) => { + const promise: Promise = new Promise((resolve) => { sensor.once(sensor.SensorId.GRAVITY, (data: sensor.GravityResponse) => { resolve(getRealData(data)); }); -- Gitee From 79d6af8a71a739c64a6eae00928613c81381d499 Mon Sep 17 00:00:00 2001 From: wanwenbo <13322507+wangwenbo55@user.noreply.gitee.com> Date: Fri, 28 Mar 2025 17:55:33 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9READEME=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.en.md b/README.en.md index b4b0420..512ef68 100644 --- a/README.en.md +++ b/README.en.md @@ -42,8 +42,8 @@ Use Camera Kit to take photos and use **photoAccessHelper** to save photos and v 1. The sample app is supported only on Huawei phones running the standard system. -2. The HarmonyOS version must be HarmonyOS NEXT Developer Beta1 or later. +2. The HarmonyOS version must be HarmonyOS 5.0.0 Release or later. -3. The DevEco Studio version must be DevEco Studio NEXT Developer Beta1 or later. +3. The DevEco Studio version must be DevEco Studio 5.0.0 Release or later. -4. The HarmonyOS SDK version must be HarmonyOS NEXT Developer Beta1 or later. +4. The HarmonyOS SDK version must be HarmonyOS 5.0.0 Release SDK or later. diff --git a/README.md b/README.md index 253256c..23ea975 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,8 @@ 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 -2. HarmonyOS系统:HarmonyOS NEXT Developer Beta5及以上。 +2. HarmonyOS系统:HarmonyOS 5.0.0 Release及以上。 -3. DevEco Studio版本:DevEco Studio NEXT Developer Beta5及以上。 +3. DevEco Studio版本:DevEco Studio 5.0.0 Release及以上。 -4. HarmonyOS SDK版本:HarmonyOS NEXT Developer Beta5 SDK及以上。 +4. HarmonyOS SDK版本:HarmonyOS 5.0.0 Release SDK及以上。 -- Gitee