diff --git a/zh-cn/release-notes/changelogs/v4.0-beta2/Readme-CN.md b/zh-cn/release-notes/changelogs/v4.0-beta2/Readme-CN.md
index 4389c54a8dd3511a65c6a7656e2b767d70a774e4..9b244837f85c453e738724ee27d31fdb1830cb35 100644
--- a/zh-cn/release-notes/changelogs/v4.0-beta2/Readme-CN.md
+++ b/zh-cn/release-notes/changelogs/v4.0-beta2/Readme-CN.md
@@ -3,14 +3,18 @@
| 子系统 | 变更类型 | 变更描述 |
| -------- | -------- | -------- |
-| ArkUI | 参数变更 | [通用事件参数支持undefined。](changelogs-arkui.md#clarkui1-通用事件参数支持undefined) |
-| ArkUI | 状态变量变更 | [1.Prop/BuilderParam状态变量需要初始化或从父组件传值。](changelogs-arkui.md#clarkui2-propbuilderparam-状态变量需要初始化或从父组件传值)
[2.BuilderParam状态变量初始化赋值必须为@Builder函数/方法。](changelogs-arkui.md#clarkui3-builderparam-状态变量初始化赋值必须为builder函数方法) |
-| ArkUI | 接口/组件变更 | [Search组件的searchButton属性中SearchButtonOption修改为SearchButtonOptions。](changelogs-arkui.md#clarkui4-search组件的searchbutton属性中searchbuttonoption修改为searchbuttonoptions) |
-| ArkUI | 枚举值变更 | [滚动事件ScrollState上报滚动状态枚举值规则变更。](changelogs-arkui.md#clarkui5-滚动事件上报滚动状态枚举值规则变更) |
-| ArkUI | 组件变更 | [对ArkUI系统组件的使用场景进行限制,仅允许在struct的build方法内、pageTransition方法内或@Builder修饰的函数内使用。](changelogs-arkui.md#clarkui6-arkui系统组件使用限制) |
-| ArkUI | 行为变更 | [ArkUI子系统@Prop装饰器支持Object行为变化,Prop支持Object api9浅拷贝,api10变更为深拷贝。](changelogs-arkui.md#clarkui7-prop在api-9支持object浅拷贝api-10变更为深拷贝) |
-| ArkUI | 参数变更 | [1.编译拦截@Extend/@AnimatableExtend参数个数不符合预期。](changelogs-arkui.md#clarkui8-编译拦截extendanimatableextend参数个数不符合预期)
[2.编译拦截@Link/@ObjectLink成员变量未从父组件传值。](changelogs-arkui.md#clarkui9-编译拦截linkobjectlink成员变量未从父组件传值) |
-| ArkUI | 行为变更 | [canvas组件onReady事件行为变更,onReady事件在组件创建完成后或组件大小发生变化时触发,并清空画布。](changelogs-arkui.md#clarkui10-canvas组件onready事件行为变更) |
+| ArkUI | 状态变量变更 | [状态变量数据类型声明使用限制,所有的状态装饰器变量需要显式声明变量类型,不允许声明any。](changelogs-arkui.md#clarkui1-状态变量数据类型声明使用限制) |
+| ArkUI | 规则变更 | [自定义组件成员变量初始化的规则与约束,不允许从父组件初始化@LocalStorageLink,@LocalStorageProp修饰的变量。](changelogs-arkui.md#clarkui2-自定义组件成员变量初始化的规则与约束) |
+| ArkUI | 参数变更 | [通用事件参数支持undefined。](changelogs-arkui.md#clarkui3-通用事件参数支持undefined) |
+| ArkUI | 状态变量变更 | [1.Prop/BuilderParam状态变量需要初始化或从父组件传值。](changelogs-arkui.md#clarkui4-propbuilderparam-状态变量需要初始化或从父组件传值)
[2.BuilderParam状态变量初始化赋值必须为@Builder函数/方法。](changelogs-arkui.md#clarkui5-builderparam-状态变量初始化赋值必须为builder函数方法) |
+| ArkUI | 接口/组件变更 | [Search组件的searchButton属性中SearchButtonOption修改为SearchButtonOptions。](changelogs-arkui.md#clarkui6-search组件的searchbutton属性中searchbuttonoption修改为searchbuttonoptions) |
+| ArkUI | 枚举值变更 | [滚动事件ScrollState上报滚动状态枚举值规则变更。](changelogs-arkui.md#clarkui7-滚动事件上报滚动状态枚举值规则变更) |
+| ArkUI | 组件变更 | [对ArkUI系统组件的使用场景进行限制,仅允许在struct的build方法内、pageTransition方法内或@Builder修饰的函数内使用。](changelogs-arkui.md#clarkui8-arkui系统组件使用限制) |
+| ArkUI | 行为变更 | [ArkUI子系统@Prop装饰器支持Object行为变化,Prop支持Object api9浅拷贝,api10变更为深拷贝。](changelogs-arkui.md#clarkui9-prop在api-9支持object浅拷贝api-10变更为深拷贝) |
+| ArkUI | 参数变更 | [1.编译拦截@Extend/@AnimatableExtend参数个数不符合预期。](changelogs-arkui.md#clarkui10-编译拦截extendanimatableextend参数个数不符合预期)
[2.编译拦截@Link/@ObjectLink成员变量未从父组件传值。](changelogs-arkui.md#clarkui11-编译拦截linkobjectlink成员变量未从父组件传值) |
+| ArkUI | 行为变更 | [canvas组件onReady事件行为变更,onReady事件在组件创建完成后或组件大小发生变化时触发,并清空画布。](changelogs-arkui.md#clarkui12-canvas组件onready事件行为变更) |
+| ArkUI | 属性变更 | [Navigation menus属性显示变更。](changelogs-arkui.md#clarkui13-navigation-menus属性显示变更) |
+| ArkUI | 属性变更 | [Navigation的titleMode属性Free模式默认显示位置变更。](changelogs-arkui.md#clarkui14-navigation的titlemode属性free模式默认显示位置变更) |
| 包管理 | 接口底层实现变更 | [1.ohos.bundle.d.ts中getAllBundleInfo接口底层实现变更。](changelogs-bundlemanager.md#clbundlemanager1-包管理ohosbundledts中getallbundleinfo接口底层实现变更)
[2.ohos.bundle.d.ts中getAllApplicationInfo接口底层实现变更。](changelogs-bundlemanager.md#clbundlemanager2-包管理ohosbundledts中getallapplicationinfo接口底层实现变更) |
| 包管理 | 接口权限变更 | [1.ohos.bundle.bundleManager.d.ts中getAllBundleInfo接口权限变更。](changelogs-bundlemanager.md#clbundlemanager3-包管理ohosbundlebundlemanagerdts中getallbundleinfo接口权限变更)
[2.ohos.bundle.bundleManager.d.ts中getAllApplicationInfo接口权限变更。](changelogs-bundlemanager.md#clbundlemanager4-包管理ohosbundlebundlemanagerdts中getallapplicationinfo接口权限变更) |
| 包管理 | 接口/组件变更 | [1.ohos.bundle.installer.d.ts中getSpecifiedDistributionType接口移动到@ohos.bundle.bundleManager.d.ts中。](changelogs-bundlemanager.md#clbundlemanager5-包管理ohosbundleinstallerdts中getspecifieddistributiontype接口移动到ohosbundlebundlemanagerdts中)
[2.ohos.bundle.installer.d.ts中getAdditionalInfo接口移动到@ohos.bundle.bundleManager.d.ts中。](changelogs-bundlemanager.md#clbundlemanager6-包管理ohosbundleinstallerdts中getadditionalinfo接口移动到ohosbundlebundlemanagerdts中) |
@@ -23,15 +27,23 @@
| 程序访问控制 | 权限组拆分 | [原“媒体和文件”权限组内权限组进行调整,MEDIA_LOCATION 划分为图片和视频权限组,READ_MEDIA 和WRITE_MEDIA 划分为文件权限组。](changelogs-accesstoken.md#claccesstoken1-媒体和文件权限组拆分) |
| 输入法框架 | 返回错误码变更 | [1.ohos.InputMethod中on('imeShow')系统接口权限校验失败返回错误码变更。](changelogs-imf.md#climf1-ohosinputmethod中onimeshow系统接口权限校验失败返回错误码变更)
[2.ohos.InputMethod中on('imeHide')系统接口权限校验失败返回错误码变更。](changelogs-imf.md#climf2-ohosinputmethod中onimehide系统接口权限校验失败返回错误码变更) |
| 主题框架 | 接口实例名称变更 | [锁屏管理的包名为'@ohos.screenLock',在导入时,使用的代码实例由screenlock变更为screenLock。](changelogs-screenlock.md#clscreenlock1-代码实例名称变更) |
-| 分布式数据管理 | 变量变更(Narive接口) | [1.OH_Cursor结构体的函数指针成员变量int (*close)(OH_Cursor *cursor)变更为int (*destroy)(OH_Cursor *cursor)。](changelogs-distributeddatamgr.md#cldistributeddatamgr1-oh_cursor结构体的函数指针成员变量int-closeoh_cursor-cursor变更为int-destroyoh_cursor-cursor)
[2.OH_Predicates结构体的函数指针成员变量int (*destroyPredicates)(OH_Predicates *predicates)变更为 int (*destroy)(OH_Predicates *predicates)。](changelogs-distributeddatamgr.md#cldistributeddatamgr2-oh_predicates结构体的函数指针成员变量int-destroypredicatesoh_predicates-predicates变更为-int-destroyoh_predicates-predicates)
[3.OH_VObject结构体的函数指针成员变量int (*destroyValueObject)(OH_VObject *valueObject)变更为 int (*destroy)(OH_VObject *valueObject)。](changelogs-distributeddatamgr.md#cldistributeddatamgr3-oh_vobject结构体的函数指针成员变量int-destroyvalueobjectoh_vobject-valueobject变更为-int-destroyoh_vobject-valueobject)
[4.OH_VBucket结构体的函数指针成员变量int (*destroyValuesBucket)(OH_VBucket *bucket)变更为 int (*destroy)(OH_VBucket *bucket)](changelogs-distributeddatamgr.md#cldistributeddatamgr4-oh_vbucket结构体的函数指针成员变量int-destroyvaluesbucketoh_vbucket-bucket变更为-int-destroyoh_vbucket-bucket) |
-| 分布式数据管理 | 变量变更(Narive) | [OH_Rdb_Config结构体成员变量变更,将成员变量securityLevel的类型由enum OH_Rdb_SecurityLevel改为in;删除成员变量path;并新增成员变量selfSize、dataBaseDir、storeName、bundleName、moduleName。](changelogs-distributeddatamgr.md#cldistributeddatamgr5-oh_rdb_config结构体成员变量变更) |
-| 分布式数据管理 | 接口入参变更(Narive) | [OH_Rdb_DeleteStore接口入参const char *pat变更为const OH_Rdb_Config *config](changelogs-distributeddatamgr.md#cldistributeddatamgr6-oh_rdb_deletestore接口入参constchar-pat变更为const-oh_rdb_config-config) |
+| 分布式数据管理 | 接口/组件变更 | [ValuesBucket由系统接口变更为公共接口。](changelogs-distributeddatamgr.md#cldistributeddatamgr1-valuesbucket由系统接口变更为公共接口) |
+| 分布式数据管理 | 接口/组件变更 | [dataSharePredicates部分谓词由系统接口变更为公共接口。](changelogs-distributeddatamgr.md#cldistributeddatamgr2-datasharepredicates部分谓词由系统接口变更为公共接口) |
+| 分布式数据管理 | 接口/组件变更 | [@ohos.application.DataShareExtensionAbility的context属性取消可选标识,同时起始版本从API version 9变更为API version 10。](changelogs-distributeddatamgr.md#cldistributeddatamgr3-datashareextensionability的context属性取消可选标识符) |
+| 分布式数据管理 | 接口/组件变更 | [OH_Predicates结构体的函数指针成员变量返回值类型由OH_Predicates 变更为OH_Predicates。](changelogs-distributeddatamgr.md#cldistributeddatamgr4-oh_predicates结构体的函数指针成员变量返回值类型由oh_predicates变更为oh_predicates-) |
+| 分布式数据管理 | 接口/组件变更 | [OH_Rdb_ErrCode结构体的错误码信息变更。](changelogs-distributeddatamgr.md#cldistributeddatamgr5-oh_rdb_errcode结构体的错误码信息变更) |
+| 分布式数据管理 | 变量变更(Narive接口) | [1.OH_Cursor结构体的函数指针成员变量int (*close)(OH_Cursor *cursor)变更为int (*destroy)(OH_Cursor *cursor)。](changelogs-distributeddatamgr.md#cldistributeddatamgr6-oh_cursor结构体的函数指针成员变量int-closeoh_cursor-cursor变更为int-destroyoh_cursor-cursor)
[2.OH_Predicates结构体的函数指针成员变量int (*destroyPredicates)(OH_Predicates *predicates)变更为 int (*destroy)(OH_Predicates *predicates)。](changelogs-distributeddatamgr.md#cldistributeddatamgr7-oh_predicates结构体的函数指针成员变量int-destroypredicatesoh_predicates-predicates变更为-int-destroyoh_predicates-predicates)
[3.OH_VObject结构体的函数指针成员变量int (*destroyValueObject)(OH_VObject *valueObject)变更为 int (*destroy)(OH_VObject *valueObject)。](changelogs-distributeddatamgr.md#cldistributeddatamgr8-oh_vobject结构体的函数指针成员变量int-destroyvalueobjectoh_vobject-valueobject变更为-int-destroyoh_vobject-valueobject)
[4.OH_VBucket结构体的函数指针成员变量int (*destroyValuesBucket)(OH_VBucket *bucket)变更为 int (*destroy)(OH_VBucket *bucket)](changelogs-distributeddatamgr.md#cldistributeddatamgr9-oh_vbucket结构体的函数指针成员变量int-destroyvaluesbucketoh_vbucket-bucket变更为-int-destroyoh_vbucket-bucket) |
+| 分布式数据管理 | 变量变更(Narive) | [OH_Rdb_Config结构体成员变量变更,将成员变量securityLevel的类型由enum OH_Rdb_SecurityLevel改为in;删除成员变量path;并新增成员变量selfSize、dataBaseDir、storeName、bundleName、moduleName。](changelogs-distributeddatamgr.md#cldistributeddatamgr10-oh_rdb_config结构体成员变量变更) |
+| 分布式数据管理 | 接口入参变更(Narive) | [OH_Rdb_DeleteStore接口入参const char *pat变更为const OH_Rdb_Config *config](changelogs-distributeddatamgr.md#cldistributeddatamgr11-oh_rdb_deletestore接口入参constchar-pat变更为const-oh_rdb_config-config) |
+| 分布式硬件 | 接口权限变更 | [接口权限变更,在Opeharmonny 4.0.8.2之后版本开发的应用,需要持有相应权限,否则无法正常调用接口。](changelogs-device_manager.md) |
| 媒体 | 接口入参变更 | [getAudioEffectInfoArray接口入参变更,删除Content type入参。](changelogs-multimedia.md#clmultimedia4-getaudioeffectinfoarray接口入参变更删除content-type入参) |
| 媒体 | 接口变更 | [删除音轨切换相关接口。](changelogs-multimedia.md#clmultimedia5-播放功能接口变更) |
| 图形 | 接口名称变更 | [ohos.multimedia.image中getDelayTime更名为getDelayTimeList。](changelogs-image.md#climage1-ohosmultimediaimage中getdelaytime更名为getdelaytimelist) |
| 图形 | 接口变更(Native) | [1.image_pixel_map_napi.h 废弃API8接口。](changelogs-image.md#climage2-ndk接口变更)
[2.image_pixel_map_napi.h 移动除API8以外的接口到image_pixel_map_mdk.h,并去除命名空间。](changelogs-image.md#climage2-ndk接口变更) |
| 元能力-卡片框架 | 接口权限变更 | [ohos.app.form.formHost.d.ts部分接口移出,接口权限变动。](changelogs-formfwk.md#clformfwk1-ohosappformformhostdts部分接口移出接口权限变动) |
| 元能力-卡片框架 | 接口参数变更 | [事件订阅,取消订阅相关接口(on/off)中的callback调整为接口最后一个参数。](changelogs-formfwk.md#clformfwk2-事件订阅取消订阅相关接口onoff参数顺序调整) |
+| 泛Sensor | 接口/组件变更 | [新增自定义振动效果属性VibrateFromFile,自定义振动配置文件描述符属性HapticFileDescriptor;振动下发接口startVibration支持的振动效果由VibrateEffect = VibrateTime。](changelogs-miscdevice.md) |
+| 文件管理(媒体库) | 接口/组件变更 | [mediaLibrary部分接口兼容性发生变更。](changelogs-medialibrary.md#clfile1-medialibrary部分接口兼容性变更) |
> **说明:**
diff --git a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-arkui.md b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-arkui.md
index aafd94cbf98b0620c28f6d5177aaa14bc5a60c43..b0ca215acffe72b7ac4e3bb1a6be5e1d5f43127e 100644
--- a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-arkui.md
+++ b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-arkui.md
@@ -1,7 +1,107 @@
# ArkUI Changelog
+## cl.arkui.1 状态变量数据类型声明使用限制
-## cl.arkui.1 通用事件参数支持undefined
+所有的状态装饰器变量需要显式声明变量类型,不允许声明any。
+
+**示例:**
+
+```ts
+// xxx.ets
+@Entry
+@Component
+struct DatePickerExample {
+ // 错误写法: @State isLunar: any = false
+ @State isLunar: boolean = false
+
+ build() {
+ ...
+ }
+}
+```
+
+**变更影响**
+
+如果状态装饰器变量没有显式声明变量类型,声明any,编译拦截等级由WARN变成ERROR。
+
+```ts
+// ArkTS:ERROR Please define an explicit type, not any.
+@State isLunar: any = false
+```
+
+**关键的接口/组件变更**
+
+不涉及。
+
+**适配指导**
+
+状态装饰器变量声明具体的变量类型替代any。
+
+
+## cl.arkui.2 自定义组件成员变量初始化的规则与约束
+
+不允许从父组件初始化\@LocalStorageLink, \@LocalStorageProp修饰的变量。
+
+**示例:**
+
+```ts
+let NextID: number = 0;
+
+@Observed
+class ClassA {
+ public id: number;
+ public c: number;
+
+ constructor(c: number) {
+ this.id = NextID++;
+ this.c = c;
+ }
+}
+
+@Entry
+@Component
+struct LocalStorageComponent {
+ build() {
+ Column() {
+ Child({
+ /* ArkTS:ERROR Property 'simpleVarName' in the custom component 'Child' cannot
+ initialize here (forbidden to specify). */
+ simpleVarName: 1,
+ /* ArkTS:ERROR Property 'objectName' in the custom component 'Child' cannot
+ initialize here (forbidden to specify). */
+ objectName: new ClassA(1)
+ })
+ }
+ }
+}
+
+@Component
+struct Child {
+ @LocalStorageLink("storageSimpleProp") simpleVarName: number = 0;
+ @LocalStorageProp("storageObjectProp") objectName: ClassA = new ClassA(1);
+
+ build() {
+ }
+}
+```
+
+**变更影响**
+
+如果父组件初始化\@LocalStorageLink, \@LocalStorageProp修饰的变量,编译拦截等级由WARN变成ERROR。
+
+**关键的接口/组件变更**
+
+不涉及。
+
+**适配指导**
+
+构造子组件时,不对子组件的\@LocalStorageLink, \@LocalStorageProp修饰的变量进行赋值。
+
+如果需要在父组件中修改子组件的\@LocalStorageLink, \@LocalStorageProp修饰的变量,则使用LocalStorage提供的API接口方法(比如set方法)赋值。
+
+
+
+## cl.arkui.3 通用事件参数支持undefined
通用事件(点击事件、触摸事件、挂载卸载事件、按键事件、焦点事件、鼠标事件、组件区域变化事件)参数支持undefined。
@@ -35,7 +135,7 @@ struct Example {
当事件参数设置为undefined,将会禁用该事件,依据实际应用开发场景进行参数设置即可。
-## cl.arkui.2 \@Prop/\@BuilderParam 状态变量需要初始化或从父组件传值
+## cl.arkui.4 \@Prop/\@BuilderParam 状态变量需要初始化或从父组件传值
**示例:**
@@ -76,7 +176,7 @@ struct Child {
对\@Prop/\@BuilderParam 状态变量做初始化赋值或从父组件调用子组件时传入。
-## cl.arkui.3 \@BuilderParam 状态变量初始化赋值必须为\@Builder函数/方法
+## cl.arkui.5 \@BuilderParam 状态变量初始化赋值必须为\@Builder函数/方法
**示例:**
@@ -116,7 +216,7 @@ struct Index {
\@BuilderParam 状态变量初始化赋值传入\@Builder方法。
-## cl.arkui.4 Search组件的searchButton属性中SearchButtonOption修改为SearchButtonOptions
+## cl.arkui.6 Search组件的searchButton属性中SearchButtonOption修改为SearchButtonOptions
**变更影响**
@@ -131,7 +231,7 @@ searchButton属性中类型SearchButtonOption修改为SearchButtonOptions。
SearchButtonOption修改为SearchButtonOptions。
-## cl.arkui.5 滚动事件上报滚动状态枚举值规则变更
+## cl.arkui.7 滚动事件上报滚动状态枚举值规则变更
ScrollState枚举值在API version 9及以下上报规则:
@@ -215,7 +315,7 @@ struct ListExample {
```
-## cl.arkui.6 ArkUI系统组件使用限制
+## cl.arkui.8 ArkUI系统组件使用限制
对ArkUI系统组件的使用场景进行限制,仅允许在struct的build方法内、pageTransition方法内或\@Builder修饰的函数内使用。
@@ -248,7 +348,7 @@ Text('Hello World')
将ArkUI系统组件的调用修改到struct的build方法内、pageTransition方法内或\@Builder修饰的函数内。
-## cl.ArkUI.7 \@Prop在API 9支持Object浅拷贝,API 10变更为深拷贝
+## cl.ArkUI.9 \@Prop在API 9支持Object浅拷贝,API 10变更为深拷贝
**变更影响**
@@ -375,7 +475,7 @@ struct StateClassAArray {
```
-## cl.arkui.8 编译拦截\@Extend/\@AnimatableExtend参数个数不符合预期
+## cl.arkui.10 编译拦截\@Extend/\@AnimatableExtend参数个数不符合预期
\@Extend/\@AnimatableExtend装饰器参数有且仅能有一个。
@@ -448,7 +548,7 @@ struct Example {
```
-## cl.arkui.9 编译拦截\@Link/\@ObjectLink成员变量未从父组件传值
+## cl.arkui.11 编译拦截\@Link/\@ObjectLink成员变量未从父组件传值
子组件的\@Link/\@ObjectLink成员变量需要从父组件传值。
@@ -540,7 +640,7 @@ struct Child {
```
-## cl.arkui.10 canvas组件onReady事件行为变更
+## cl.arkui.12 canvas组件onReady事件行为变更
**说明**
@@ -610,7 +710,7 @@ API version 10及以后:onReady在组件创建完成时触发,在组件位
onReady事件在组件位置发生变化时行为变更,API version 9及以前会触发,API version 10及以后不会触发。
-## cl.arkui.11 Navigation menus属性显示变更
+## cl.arkui.13 Navigation menus属性显示变更
**变更影响**
@@ -646,7 +746,7 @@ API Version 10: menus中的value属性不显示

-## cl.arkui.12 Navigation的titleMode属性Free模式默认显示位置变更
+## cl.arkui.14 Navigation的titleMode属性Free模式默认显示位置变更
**变更影响**
diff --git a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-device_manager.md b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-device_manager.md
new file mode 100644
index 0000000000000000000000000000000000000000..f5763dadee431c432ca6175dc249ee7394c6f726
--- /dev/null
+++ b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-device_manager.md
@@ -0,0 +1,54 @@
+# 设备管理Changelog
+
+
+## cl.device_manager.1 接口权限变更
+
+从Opeharmonny 4.0.8.2版本开始,部分接口新增权限校验。
+
+**变更影响**
+
+在Opeharmonny 4.0.8.2之后版本开发的应用,需要持有相应权限,否则无法正常调用接口。
+
+**关键的接口/组件变更**
+
+| 模块名 | 类名 | 方法/属性/枚举/常量 | 新增权限 |
+| -------- | -------- | -------- | -------- |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** release(): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getTrustedDeviceListSync(): Array<DeviceInfo> | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getTrustedDeviceList(callback:AsyncCallback<Array<DeviceInfo>>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getTrustedDeviceList(): Promise<Array<DeviceInfo>> | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getLocalDeviceInfoSync(): DeviceInfo | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getLocalDeviceInfo(callback:AsyncCallback<DeviceInfo>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getLocalDeviceInfo(): Promise<DeviceInfo> | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getDeviceInfo(networkId: string, callback:AsyncCallback<DeviceInfo>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** getDeviceInfo(networkId: string): Promise<DeviceInfo> | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** startDeviceDiscovery(subscribeInfo: SubscribeInfo): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** startDeviceDiscovery(subscribeInfo: SubscribeInfo, filterOptions?: string): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** stopDeviceDiscovery(subscribeId: number): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** publishDeviceDiscovery(publishInfo: PublishInfo): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** unPublishDeviceDiscovery(publishId: number): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** authenticateDevice(deviceInfo: DeviceInfo, authParam: AuthParam, callback: AsyncCallback<{deviceId: string, pinToken ?: number}>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** unAuthenticateDevice(deviceInfo: DeviceInfo): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** verifyAuthInfo(authInfo: AuthInfo, callback: AsyncCallback<{deviceId: string, level: number}>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** setUserOperation(operateAction: number, params: string): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** requestCredentialRegisterInfo(requestInfo: string, callback: AsyncCallback<{registerInfo: string}>): void; | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** importCredential(credentialInfo: string, callback: AsyncCallback<{resultInfo: string}>): void; | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** deleteCredential(queryInfo: string, callback: AsyncCallback<{resultInfo: string}>): void; | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'uiStateChange', callback: Callback<{ param: string}>): void; | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'uiStateChange', callback?: Callback<{ param: string}>): void; | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'deviceStateChange', callback: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'deviceStateChange', callback?: Callback<{ action: DeviceStateChangeAction, device: DeviceInfo }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'deviceFound', callback: Callback<{ subscribeId: number, device: DeviceInfo }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'deviceFound', callback?: Callback<{ subscribeId: number, device: DeviceInfo }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'discoverFail', callback: Callback<{ subscribeId: number, reason: number }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'discoverFail', callback?: Callback<{ subscribeId: number, reason: number }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'publishSuccess', callback: Callback<{ publishId: number }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'publishSuccess', callback?: Callback<{ publishId: number }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'publishFail', callback: Callback<{ publishId: number, reason: number }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'publishFail', callback?: Callback<{ publishId: number, reason: number }>): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** on(type: 'serviceDie', callback: () => void): void | ohos.permission.ACCESS_SERVICE_DM |
+| \@ohos.distributedHardware.deviceManager | deviceManager | **function** off(type: 'serviceDie', callback?: () => void): void | ohos.permission.ACCESS_SERVICE_DM |
+
+**适配指导**
+
+调用以上接口,需要申请相应的权限才能正常调用。
diff --git a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-distributeddatamgr.md b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-distributeddatamgr.md
index 14e5908af9d0bc6e92034632f88c3efaaf7d3d1f..89a26a8741bbe25b3fcc2147c41b1630cab508eb 100644
--- a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-distributeddatamgr.md
+++ b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-distributeddatamgr.md
@@ -1,7 +1,262 @@
# 分布式数据管理Changelog
+## cl.distributeddatamgr.1 ValuesBucket由系统接口变更为公共接口
-## cl.distributeddatamgr.1 OH_Cursor结构体的函数指针成员变量**int** (close)(OH_Cursor cursor)变更为\*\*int (\*destroy)(OH_Cursor \*cursor)
+**变更影响**
+
+基于此前版本开发的应用,仅支持系统应用使用ValuesBucket。现接口类型中的系统接口标识取消,支持第三方开发者使用。
+
+**关键接口/组件变更**
+
+修改前的接口原型:
+
+```ts
+ /**
+ * Indicates possible value types
+ *
+ * @syscap SystemCapability.DistributedDataManager.DataShare.Core
+ * @systemapi
+ * @StageModelOnly
+ * @since 9
+ */
+ export type ValueType = number | string | boolean;
+```
+
+修改后的接口原型:
+
+```ts
+ /**
+ * Indicates possible value types
+ *
+ * @syscap SystemCapability.DistributedDataManager.DataShare.Core
+ * @StageModelOnly
+ * @since 10
+ */
+ export type ValueType = number | string | boolean;
+```
+
+
+## cl.distributeddatamgr.2 dataSharePredicates部分谓词由系统接口变更为公共接口
+
+**变更影响**
+
+基于此前版本开发的应用,仅支持系统应用使用dataSharePredicates。现命名空间dataSharePredicates、类dataSharePredicates及类内部分谓词接口类型中的系统接口标识取消,支持第三方开发者使用。
+
+**关键接口/组件变更**
+
+部分谓词接口的系统接口说明取消,涉及的接口有:
+
+- equalTo(field: string, value: ValueType): DataSharePredicates
+
+- and(): DataSharePredicates
+
+- orderByAsc(field: string): DataSharePredicates
+
+- orderByDesc(field: string): DataSharePredicates
+
+- limit(total: number, offset: number): DataSharePredicates
+
+- in(field: string, value: Array[/topic/body/section/ul/li/p/valuetype {""}) ): DataSharePredicates (valuetype]
+
+
+## cl.distributeddatamgr.3 DataShareExtensionAbility的context属性取消可选标识符
+
+\@ohos.application.DataShareExtensionAbility的context属性取消可选标识,同时起始版本从API version 9变更为API version 10。
+
+**变更影响**
+
+基于此前版本开发的应用,使用context需切换SDK至API version 10。
+
+**关键接口/组件变更**
+
+删除的API version 9的接口原型:
+
+```ts
+ /**
+ * Indicates datashare extension ability context.
+ *
+ * @type ?{ ExtensionContext }
+ * @syscap SystemCapability.DistributedDataManager.DataShare.Provider
+ * @systemapi
+ * @StageModelOnly
+ * @since 9
+ */
+ context?: ExtensionContext;
+```
+
+新增的API version 10的接口原型:
+
+```ts
+ /**
+ * Indicates datashare extension ability context.
+ *
+ * @type { ExtensionContext }
+ * @syscap SystemCapability.DistributedDataManager.DataShare.Provider
+ * @systemapi
+ * @StageModelOnly
+ * @since 10
+ */
+ context: ExtensionContext;
+```
+
+
+## cl.distributeddatamgr.4 OH_Predicates结构体的函数指针成员变量返回值类型由OH_Predicates变更为OH_Predicates \*
+
+**变更影响**
+
+该变更为不兼容变更,用户使用OH_Predicates结构体中的函数指针变量时,需要按照新类型进行使用。
+
+**关键接口/组件变更**
+
+修改前的OH_Predicates成员变量原型:
+
+```ts
+ OH_Predicates (*equalTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*notEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*beginWrap)(OH_Predicates *predicates);
+ OH_Predicates (*endWrap)(OH_Predicates *predicates);
+ OH_Predicates (*orOperate)(OH_Predicates *predicates);
+ OH_Predicates (*andOperate)(OH_Predicates *predicates);
+ OH_Predicates (*isNull)(OH_Predicates *predicates, const char *field);
+ OH_Predicates (*isNotNull)(OH_Predicates *predicates, const char *field);
+ OH_Predicates (*like)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*between)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*notBetween)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*greaterThan)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*lessThan)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*greaterThanOrEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*lessThanOrEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*orderBy)(OH_Predicates *predicates, const char *field, OH_OrderType type);
+ OH_Predicates (*distinct)(OH_Predicates *predicates);
+ OH_Predicates (*limit)(OH_Predicates *predicates, unsigned int value);
+ OH_Predicates (*offset)(OH_Predicates *predicates, unsigned int rowOffset);
+ OH_Predicates (*groupBy)(OH_Predicates *predicates, char const *const *fields, int length);
+ OH_Predicates (*in)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*notIn)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates (*clear)(OH_Predicates *predicates);
+```
+
+修改后的OH_Predicates成员变量原型:
+
+```ts
+ OH_Predicates *(*equalTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*notEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*beginWrap)(OH_Predicates *predicates);
+ OH_Predicates *(*endWrap)(OH_Predicates *predicates);
+ OH_Predicates *(*orOperate)(OH_Predicates *predicates);
+ OH_Predicates *(*andOperate)(OH_Predicates *predicates);
+ OH_Predicates *(*isNull)(OH_Predicates *predicates, const char *field);
+ OH_Predicates *(*isNotNull)(OH_Predicates *predicates, const char *field);
+ OH_Predicates *(*like)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*between)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*notBetween)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*greaterThan)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*lessThan)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*greaterThanOrEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*lessThanOrEqualTo)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*orderBy)(OH_Predicates *predicates, const char *field, OH_OrderType type);
+ OH_Predicates *(*distinct)(OH_Predicates *predicates);
+ OH_Predicates *(*limit)(OH_Predicates *predicates, unsigned int value);
+ OH_Predicates *(*offset)(OH_Predicates *predicates, unsigned int rowOffset);
+ OH_Predicates *(*groupBy)(OH_Predicates *predicates, char const *const *fields, int length);
+ OH_Predicates *(*in)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*notIn)(OH_Predicates *predicates, const char *field, OH_VObject *valueObject);
+ OH_Predicates *(*clear)(OH_Predicates *predicates);
+```
+
+**适配指导**
+
+示例代码如下:
+
+变更前代码示例:
+
+```
+predicates->beginWrap(predicates).equalTo(predicates, "data1", valueObject).orOperate(predicates);
+```
+
+变更后代码示例:
+
+```
+predicates->beginWrap(predicates)->equalTo(predicates, "data1", valueObject)->orOperate(predicates);
+```
+
+
+## cl.distributeddatamgr.5 OH_Rdb_ErrCode结构体的错误码信息变更
+
+**变更影响**
+
+该变更主要为将 RDB_ERR_INVALID_ARGS, RDB_ERR_OK错误码更改为RDB_E_INVALID_ARGS和RDB_OK,并增加其他错误码。
+
+**关键接口/组件变更**
+
+修改前的OH_Rdb_ErrCode成员变量原型:
+
+```ts
+ RDB_ERR_INVALID_ARGS = -2,
+ RDB_ERR = -1,
+ RDB_ERR_OK = 0
+```
+
+修改后的OH_Predicates成员变量原型:
+
+```ts
+ RDB_ERR = -1,
+ RDB_OK = 0,
+ E_BASE = 14800000,
+ RDB_E_NOT_SUPPORTED = 801,
+ RDB_E_ERROR = E_BASE,
+ RDB_E_INVALID_ARGS = (E_BASE + 1),
+ RDB_E_CANNOT_UPDATE_READONLY = (E_BASE + 2),
+ RDB_E_REMOVE_FILE = (E_BASE + 3),
+ RDB_E_EMPTY_TABLE_NAME = (E_BASE + 5),
+ RDB_E_EMPTY_VALUES_BUCKET = (E_BASE + 6),
+ RDB_E_EXECUTE_IN_STEP_QUERY = (E_BASE + 7),
+ RDB_E_INVALID_COLUMN_INDEX = (E_BASE + 8),
+ RDB_E_INVALID_COLUMN_TYPE = (E_BASE + 9),
+ RDB_E_EMPTY_FILE_NAME = (E_BASE + 10),
+ RDB_E_INVALID_FILE_PATH = (E_BASE + 11),
+ RDB_E_TRANSACTION_IN_EXECUTE = (E_BASE + 12),
+ RDB_E_INVALID_STATEMENT = (E_BASE + 13),
+ RDB_E_EXECUTE_WRITE_IN_READ_CONNECTION = (E_BASE + 14),
+ RDB_E_BEGIN_TRANSACTION_IN_READ_CONNECTION = (E_BASE + 15),
+ RDB_E_NO_TRANSACTION_IN_SESSION = (E_BASE + 16),
+ RDB_E_MORE_STEP_QUERY_IN_ONE_SESSION = (E_BASE + 17),
+ RDB_E_NO_ROW_IN_QUERY = (E_BASE + 18),
+ RDB_E_INVALID_BIND_ARGS_COUNT = (E_BASE + 19),
+ RDB_E_INVALID_OBJECT_TYPE = (E_BASE + 20),
+ RDB_E_INVALID_CONFLICT_FLAG = (E_BASE + 21),
+ RDB_E_HAVING_CLAUSE_NOT_IN_GROUP_BY = (E_BASE + 22),
+ RDB_E_NOT_SUPPORTED_BY_STEP_RESULT_SET = (E_BASE + 23),
+ RDB_E_STEP_RESULT_SET_CROSS_THREADS = (E_BASE + 24),
+ RDB_E_STEP_RESULT_QUERY_NOT_EXECUTED = (E_BASE + 25),
+ RDB_E_STEP_RESULT_IS_AFTER_LAST = (E_BASE + 26),
+ RDB_E_STEP_RESULT_QUERY_EXCEEDED = (E_BASE + 27),
+ RDB_E_STATEMENT_NOT_PREPARED = (E_BASE + 28),
+ RDB_E_EXECUTE_RESULT_INCORRECT = (E_BASE + 29),
+ RDB_E_STEP_RESULT_CLOSED = (E_BASE + 30),
+ RDB_E_RELATIVE_PATH = (E_BASE + 31),
+ RDB_E_EMPTY_NEW_ENCRYPT_KEY = (E_BASE + 32),
+ RDB_E_CHANGE_UNENCRYPTED_TO_ENCRYPTED = (E_BASE + 33),
+ RDB_E_CHANGE_ENCRYPT_KEY_IN_BUSY = (E_BASE + 34),
+ RDB_E_STEP_STATEMENT_NOT_INIT = (E_BASE + 35),
+ RDB_E_NOT_SUPPORTED_ATTACH_IN_WAL_MODE = (E_BASE + 36),
+ RDB_E_CREATE_FOLDER_FAIL = (E_BASE + 37),
+ RDB_E_SQLITE_SQL_BUILDER_NORMALIZE_FAIL = (E_BASE + 38),
+ RDB_E_STORE_SESSION_NOT_GIVE_CONNECTION_TEMPORARILY = (E_BASE + 39),
+ RDB_E_STORE_SESSION_NO_CURRENT_TRANSACTION = (E_BASE + 40),
+ RDB_E_NOT_SUPPORT = (E_BASE + 41),
+ RDB_E_INVALID_PARCEL = (E_BASE + 42),
+ RDB_E_QUERY_IN_EXECUTE = (E_BASE + 43),
+ RDB_E_SET_PERSIST_WAL = (E_BASE + 44),
+ RDB_E_DB_NOT_EXIST = (E_BASE + 45),
+ RDB_E_ARGS_READ_CON_OVERLOAD = (E_BASE + 46),
+ RDB_E_WAL_SIZE_OVER_LIMIT = (E_BASE + 47),
+ RDB_E_CON_OVER_LIMIT = (E_BASE + 48)
+```
+
+
+
+## cl.distributeddatamgr.6 OH_Cursor结构体的函数指针成员变量**int** (close)(OH_Cursor cursor)变更为\*\*int (\*destroy)(OH_Cursor \*cursor)
**变更影响**
@@ -38,7 +293,7 @@ cursor->destroy(cursor);
```
-## cl.distributeddatamgr.2 OH_Predicates结构体的函数指针成员变量**int** (\*destroyPredicates)(OH_Predicates \*predicates)变更为 **int** (\*destroy)(OH_Predicates \*predicates)
+## cl.distributeddatamgr.7 OH_Predicates结构体的函数指针成员变量**int** (\*destroyPredicates)(OH_Predicates \*predicates)变更为 **int** (\*destroy)(OH_Predicates \*predicates)
**变更影响**
@@ -75,7 +330,7 @@ predicates->destroy(predicates);
```
-## cl.distributeddatamgr.3 OH_VObject结构体的函数指针成员变量**int** (\*destroyValueObject)(OH_VObject \*valueObject)变更为 **int** (\*destroy)(OH_VObject \*valueObject)
+## cl.distributeddatamgr.8 OH_VObject结构体的函数指针成员变量**int** (\*destroyValueObject)(OH_VObject \*valueObject)变更为 **int** (\*destroy)(OH_VObject \*valueObject)
**变更影响**
@@ -112,7 +367,7 @@ valueObject->destroy(valueObject);
```
-## cl.distributeddatamgr.4 OH_VBucket结构体的函数指针成员变量**int** (\*destroyValuesBucket)(OH_VBucket \*bucket)变更为 int (\*destroy)(OH_VBucket \*bucket)
+## cl.distributeddatamgr.9 OH_VBucket结构体的函数指针成员变量**int** (\*destroyValuesBucket)(OH_VBucket \*bucket)变更为 int (\*destroy)(OH_VBucket \*bucket)
**变更影响**
@@ -149,7 +404,7 @@ valueBucket->destroyValuesBucket(valueBucket);
```
-## cl.distributeddatamgr.5 OH_Rdb_Config结构体成员变量变更
+## cl.distributeddatamgr.10 OH_Rdb_Config结构体成员变量变更
**变更影响**
@@ -186,7 +441,7 @@ typedef struct {
用户在利用OH_Rdb_Config创建数据库时,需要传入包名以及模块名等信息。
-## cl.distributeddatamgr.6 **OH_Rdb_DeleteStore**接口入参**constchar** pat变更为\*const OH_Rdb_Config \*config
+## cl.distributeddatamgr.11 **OH_Rdb_DeleteStore**接口入参**constchar** pat变更为\*const OH_Rdb_Config \*config
**变更影响**
diff --git a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-medialibrary.md b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-medialibrary.md
new file mode 100644
index 0000000000000000000000000000000000000000..516823dcb415f436bda212e6cf27f98815c81cac
--- /dev/null
+++ b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-medialibrary.md
@@ -0,0 +1,153 @@
+# 文件管理Changelog
+
+
+## cl.file.1 mediaLibrary部分接口兼容性变更
+
+mediaLibrary部分接口兼容性变更。
+
+**变更影响**
+
+mediaLibrary部分接口兼容性变更。
+
+基于此前版本开发的应用,需注意接口的迭代更新。
+
+**关键接口/组件变更**
+
+| 模块名 | 方法/属性/枚举/常量 | 变更类型 |
+| -------- | -------- | -------- |
+| medialibrary | **function** getFileAssets(options: MediaFetchOptions, callback: AsyncCallback<FetchFileResult>): void | 接口兼容性变更 |
+| medialibrary | **function** getFileAssets(options: MediaFetchOptions): Promise<FetchFileResult> | 接口兼容性变更 |
+| medialibrary | **function** createAsset(mediaType: MediaType, displayName: string, relativePath: string, callback: AsyncCallback<FileAsset>): void | 接口兼容性变更 |
+| medialibrary | **function** createAsset(mediaType: MediaType, displayName: string, relativePath: string): Promise<FileAsset> | 接口兼容性变更 |
+| medialibrary | **function** getAlbums(options: MediaFetchOptions, callback: AsyncCallback<Array<Album>>): void | 接口兼容性变更 |
+| medialibrary | **function** getAlbums(options: MediaFetchOptions): Promise<Array<Album>> | 接口兼容性变更 |
+| medialibrary | **function** FileAsset.commitModify(callback: AsyncCallback<void>): void | 接口兼容性变更 |
+| medialibrary | **function** FileAsset.commitModify(): Promise<void> | 接口兼容性变更 |
+
+**适配指导**
+
+**getFileAssets接口获取文件资源兼容性影响:**
+
+在API version 10上,摒弃了物理目录作为相册的设计,采用了逻辑相册的设计,一个相册中可以添加多个文件,一个文件也可以在多个相册中呈现。新的设计将带来parent、albumId、albumUri和albumName属性使用上的不兼容,无法作为MediaFetchOptions的参数在getFileAssets接口中使用。下面示例代码为错误示例:
+
+1. 使用getMediaLibrary接口获取媒体库实例。
+
+2. 创建检索条件MediaFetchOptions。
+
+3. 调用getFileAssets接口获取文件资源。
+
+**错误示例:**
+
+```js
+import mediaLibrary from '@ohos.multimedia.mediaLibrary';
+
+async function example() {
+ try {
+ let context = getContext(this);
+ let media = mediaLibrary.getMediaLibrary(context);
+ let fileKeyObj = mediaLibrary.FileKey;
+ let albumId = 1;
+ let getImageOp = {
+ selections: fileKeyObj.ALBUM_ID + '= ?', // 使用parent、albumId、albumUri和albumName属性查询均无法获取文件资源。
+ selectionArgs: [albumId.toString()],
+ };
+ const fetchFileResult = await media.getFileAssets(getImageOp); // 查询失败,获取的fetchFileResult为空。
+ const fileAsset = await fetchFileResult.getFirstObject();
+ console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName);
+ } catch (err) {
+ console.error('mediaLibrary fail, err: ' + err);
+ }
+}
+```
+
+推荐使用以下方式调用getFileAssets接口获取文件资源:
+
+**正确示例:**
+
+```js
+import mediaLibrary from '@ohos.multimedia.mediaLibrary';
+
+async function example() {
+ try {
+ let context = getContext(this);
+ let media = mediaLibrary.getMediaLibrary(context);
+ let fileKeyObj = mediaLibrary.FileKey;
+ let imageType = mediaLibrary.MediaType.IMAGE;
+ let getImageOp = {
+ selections: fileKeyObj.MEDIA_TYPE + '= ?',
+ selectionArgs: [imageType.toString()], // 查询所有图片类型的文件。
+ };
+ const fetchFileResult = await media.getFileAssets(getImageOp);
+ const fileAsset = await fetchFileResult.getFirstObject();
+ console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName);
+ } catch (err) {
+ console.error('mediaLibrary fail, err: ' + err);
+ }
+}
+```
+
+**createAsset接口创建相册兼容性影响:**
+
+由于API version 10的SDK上relativePath和相册没有关联关系,文件创建成功后,relativePath的最后一级目录不会作为相册呈现。
+
+**getAlbums接口获取相册兼容性影响:**
+
+由于API version 10的SDK上relativePath和相册没有关联关系,在使用getAlbums时不支持relativePath作为查询条件,并且ALBUM_NAME参数只能使用"Camera"和"Screenshots"。下面示例代码为错误示例:
+
+1. 使用getMediaLibrary接口获取媒体库实例。
+
+2. 创建相册检索条件MediaFetchOptions。
+
+3. 调用getAlbums接口获取相册。
+
+**错误示例:**
+
+```js
+import mediaLibrary from '@ohos.multimedia.mediaLibrary';
+
+async function example() {
+ try {
+ let context = getContext(this);
+ let media = mediaLibrary.getMediaLibrary(context);
+ let AlbumNoArgsfetchOp = {
+ selections: mediaLibrary.FileKey.ALBUM_NAME + ' = ?',
+ selectionArgs: ['新建相册1'], // 获取albumName为新建相册1的相册。
+ };
+ const albumList = await media.getAlbums(AlbumNoArgsfetchOp); // 查询失败,获取的fetchFileResult为空。
+ for (let i = 0; i < albumList.length; i++) {
+ console.info('mediaLibrary album albumName: ' + albumList[i].albumName);
+ }
+ } catch (err) {
+ console.error('mediaLibrary fail, err: ' + err);
+ }
+}
+```
+
+使用如下示例代码可以获取Camera和Screenshots相册。
+
+**正确示例:**
+
+```js
+import mediaLibrary from '@ohos.multimedia.mediaLibrary';
+
+async function example() {
+ try {
+ let context = getContext(this);
+ let media = mediaLibrary.getMediaLibrary(context);
+ let AlbumNoArgsfetchOp = {
+ selections: mediaLibrary.FileKey.ALBUM_NAME + ' = ? OR ' + mediaLibrary.FileKey.ALBUM_NAME + ' = ?',
+ selectionArgs: ['Camera', 'Screenshots'], // 获取相机相册和截屏录屏相册。
+ };
+ const albumList = await media.getAlbums(AlbumNoArgsfetchOp);
+ for (let i = 0; i < albumList.length; i++) {
+ console.info('mediaLibrary album albumName: ' + albumList[i].albumName);
+ }
+ } catch (err) {
+ console.error('mediaLibrary fail, err: ' + err);
+ }
+}
+```
+
+**FileAsset.commitModify接口获取相册兼容性影响:**
+
+在API version 10的SDK上去掉了针对audio无意义的orientation属性,在使用commitModify接口时将无法对audio资源的orientation属性进行修改。
diff --git a/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-miscdevice.md b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-miscdevice.md
new file mode 100644
index 0000000000000000000000000000000000000000..662494b06f6741bb78058cc2a8216af3ff83220e
--- /dev/null
+++ b/zh-cn/release-notes/changelogs/v4.0-beta2/changelogs-miscdevice.md
@@ -0,0 +1,80 @@
+# 泛Sensor Changelog
+
+
+## cl.vibrator.1 新增自定义振动相关属性
+
+新增自定义振动效果属性VibrateFromFile,自定义振动配置文件描述符属性HapticFileDescriptor;振动下发接口startVibration支持的振动效果由VibrateEffect = VibrateTime | VibratePreset扩展为VibrateEffect = VibrateTime | VibratePreset | VibrateFromFile。
+
+**变更影响**
+
+基于OpenHarmony4.0.8.2及之后的SDK版本开发的应用,可使用VibrateFromFile属性在支持自定义振动的设备上播放自定义振动文件中配置的振动序列。
+
+**关键接口/组件变更**
+
+\@ohos.vibrator.d.ts中新增属性VibrateFromFile,HapticFileDescriptor。
+
+| 模块名 | 类名 | 方法/属性/枚举/常量 | 变更类型 |
+| -------- | -------- | -------- | -------- |
+| \@ohos.vibrator.d.ts | vibrator | HapticFileDescriptor | 新增 |
+| \@ohos.vibrator.d.ts | vibrator | VibrateFromFile | 新增 |
+
+**适配指导**
+
+通过资源管理接口获取振动配置文件资源,启动自定义振动并停止。
+
+```ts
+import vibrator from '@ohos.vibrator';
+import resourceManager from '@ohos.resourceManager';
+
+const FILE_NAME = "xxx.json";
+
+async function openResource(fileName) {
+ let fileDescriptor = undefined;
+ let mgr = await resourceManager.getResourceManager();
+ await mgr.getRawFd(fileName).then(value => {
+ fileDescriptor = {fd: value.fd, offset: value.offset, length: value.length};
+ console.log('openResource success fileName: ' + fileName);
+ }).catch(error => {
+ console.log('openResource err: ' + error);
+ });
+ return fileDescriptor;
+}
+
+async function closeResource(fileName) {
+ let mgr = await resourceManager.getResourceManager();
+ await mgr.closeRawFd(fileName).then(()=> {
+ console.log('closeResource success fileName: ' + fileName);
+ }).catch(error => {
+ console.log('closeResource err: ' + error);
+ });
+}
+
+// 获取振动文件资源描述符
+let rawFd = openResource(FILE_NAME);
+// 使用startVibration、stopVibration需要添加ohos.permission.VIBRATE权限
+try {
+ // 启动自定义振动
+ vibrator.startVibration({
+ type: "file",
+ hapticFd: { fd: rawFd.fd, offset: rawFd.offset, length: rawFd.length }
+ }, {
+ usage: "alarm"
+ }).then(() => {
+ console.info('startVibration success');
+ }, (error) => {
+ console.info('startVibration error');
+ });
+ // 停止所有类型的马达振动
+ vibrator.stopVibration(function (error) {
+ if (error) {
+ console.log('error.code' + error.code + 'error.message' + error.message);
+ return;
+ }
+ console.log('Callback returned to indicate successful.');
+ })
+} catch (error) {
+ console.info('errCode: ' + error.code + ' ,msg: ' + error.message);
+}
+// 关闭振动文件资源
+closeResource(FILE_NAME);
+```