未验证 提交 8c8364a5 编写于 作者: 时睿 提交者: Gitee

同步changelog整合到发布分支

Signed-off-by: N时睿 <shirui721@huawei.com>
上级 b28f7cd5
# 总览
| 子系统 | 变更类型 | 变更描述 |
| -------- | -------- | -------- |
| ArkUI | 参数变更 | [通用事件参数支持undefined。](changelogs-arkui.md#clarkui1-通用事件参数支持undefined) |
| ArkUI | 状态变量变更 | [1.Prop/BuilderParam状态变量需要初始化或从父组件传值。](changelogs-arkui.md#clarkui2-propbuilderparam-状态变量需要初始化或从父组件传值)<br/>[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&nbsp;api9浅拷贝,api10变更为深拷贝。](changelogs-arkui.md#clarkui7-prop在api-9支持object浅拷贝api-10变更为深拷贝) |
| ArkUI | 参数变更 | [1.编译拦截@Extend/@AnimatableExtend参数个数不符合预期。](changelogs-arkui.md#clarkui8-编译拦截extendanimatableextend参数个数不符合预期)<br/>[2.编译拦截@Link/@ObjectLink成员变量未从父组件传值。](changelogs-arkui.md#clarkui9-编译拦截linkobjectlink成员变量未从父组件传值) |
| ArkUI | 行为变更 | [canvas组件onReady事件行为变更,onReady事件在组件创建完成后或组件大小发生变化时触发,并清空画布。](changelogs-arkui.md#clarkui10-canvas组件onready事件行为变更) |
| 包管理 | 接口底层实现变更 | [1.ohos.bundle.d.ts中getAllBundleInfo接口底层实现变更。](changelogs-bundlemanager.md#clbundlemanager1-包管理ohosbundledts中getallbundleinfo接口底层实现变更)<br/>[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接口权限变更)<br/>[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中)<br/>[2.ohos.bundle.installer.d.ts中getAdditionalInfo接口移动到@ohos.bundle.bundleManager.d.ts中。](changelogs-bundlemanager.md#clbundlemanager6-包管理ohosbundleinstallerdts中getadditionalinfo接口移动到ohosbundlebundlemanagerdts中) |
| 包管理 | 接口/组件变更 | [包管理Schema中proxyDatas更名为proxyData。](changelogs-bundlemanager.md#clbundlemanager7-应用配置文件modulejson5中proxydatas更名为proxydata) |
| 包管理 | 配置文件变更 | [module.json配置文件schema变更。](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/changelogs/OpenHarmony_4.0.9.3/changelogs-bundlemanager.md) |
| OS媒体 | 枚举声明变更 | [音频输出流类型由AUDIOSTREAM_TYPE_RERNDERER更名为AUDIOSTREAM_TYPE_RENDERER](changelogs-multimedia.md#clmultimedia1-音频c接口流类型枚举声明变更) |
| OS媒体 | 枚举值变更 | [1.&nbsp;OH_AudioStream_Usage变更,删除了AUDIOSTREAM_USAGE_MEDIA枚举值,将AUDIOSTREAM_USAGE_COMMUNICATION枚举值变更为AUDIOSTREAM_USAGE_VOICE_COMMUNICATION和AUDIOSTREAM_USAGE_VOICE_ASSISTANT。](changelogs-multimedia.md#clmultimedia2-oh_audiostream_usage变更)<br/>[2.&nbsp;OH_AudioStream_SampleFormat变更,OH_AudioStream_SampleFormat枚举中删除了AUDIOSTREAM_SAMPLE_F32LE枚举值。](changelogs-multimedia.md#clmultimedia3-oh_audiostream_sampleformat变更删除audiostream_sample_f32le) |
| OS媒体 | 接口入参变更 | [getAudioEffectInfoArray接口入参变更,删除Content&nbsp;type入参。](changelogs-multimedia.md#clmultimedia4-getaudioeffectinfoarray接口入参变更删除content-type入参) |
| 程序访问控制 | 权限调整 | [“电话”、“信息”、“通话记录”权限组的权限仅对系统应用开放。](changelogs-accesstoken.md#claccesstoken2-电话信息通话记录权限组的权限申请方式调整) |
| 程序访问控制 | 权限组拆分 | [原“媒体和文件”权限组内权限组进行调整,MEDIA_LOCATION&nbsp;划分为图片和视频权限组,READ_MEDIA&nbsp;和WRITE_MEDIA&nbsp;划分为文件权限组。](changelogs-accesstoken.md#claccesstoken1-媒体和文件权限组拆分) |
| 输入法框架 | 返回错误码变更 | [1.ohos.InputMethod中on('imeShow')系统接口权限校验失败返回错误码变更。](changelogs-imf.md#climf1-ohosinputmethod中onimeshow系统接口权限校验失败返回错误码变更)<br/>[2.ohos.InputMethod中on('imeHide')系统接口权限校验失败返回错误码变更。](changelogs-imf.md#climf2-ohosinputmethod中onimehide系统接口权限校验失败返回错误码变更) |
| 主题框架 | 接口实例名称变更 | [锁屏管理的包名为'@ohos.screenLock',在导入时,使用的代码实例由screenlock变更为screenLock。](changelogs-screenlock.md#clscreenlock1-代码实例名称变更) |
| 分布式数据管理 | 变量变更(Narive接口) | [1.OH_Cursor结构体的函数指针成员变量int&nbsp;(*close)(OH_Cursor&nbsp;*cursor)变更为int&nbsp;(*destroy)(OH_Cursor&nbsp;*cursor)。](changelogs-distributeddatamgr.md#cldistributeddatamgr1-oh_cursor结构体的函数指针成员变量int-closeoh_cursor-cursor变更为int-destroyoh_cursor-cursor)<br/>[2.OH_Predicates结构体的函数指针成员变量int&nbsp;(*destroyPredicates)(OH_Predicates&nbsp;*predicates)变更为&nbsp;int&nbsp;(*destroy)(OH_Predicates&nbsp;*predicates)。](changelogs-distributeddatamgr.md#cldistributeddatamgr2-oh_predicates结构体的函数指针成员变量int-destroypredicatesoh_predicates-predicates变更为-int-destroyoh_predicates-predicates)<br/>[3.OH_VObject结构体的函数指针成员变量int&nbsp;(*destroyValueObject)(OH_VObject&nbsp;*valueObject)变更为&nbsp;int&nbsp;(*destroy)(OH_VObject&nbsp;*valueObject)。](changelogs-distributeddatamgr.md#cldistributeddatamgr3-oh_vobject结构体的函数指针成员变量int-destroyvalueobjectoh_vobject-valueobject变更为-int-destroyoh_vobject-valueobject)<br/>[4.OH_VBucket结构体的函数指针成员变量int&nbsp;(*destroyValuesBucket)(OH_VBucket&nbsp;*bucket)变更为&nbsp;int&nbsp;(*destroy)(OH_VBucket&nbsp;*bucket)](changelogs-distributeddatamgr.md#cldistributeddatamgr4-oh_vbucket结构体的函数指针成员变量int-destroyvaluesbucketoh_vbucket-bucket变更为-int-destroyoh_vbucket-bucket) |
| 分布式数据管理 | 变量变更(Narive) | [OH_Rdb_Config结构体成员变量变更,将成员变量securityLevel的类型由enum&nbsp;OH_Rdb_SecurityLevel改为in;删除成员变量path;并新增成员变量selfSize、dataBaseDir、storeName、bundleName、moduleName。](changelogs-distributeddatamgr.md#cldistributeddatamgr5-oh_rdb_config结构体成员变量变更) |
| 分布式数据管理 | 接口入参变更(Narive) | [OH_Rdb_DeleteStore接口入参const&nbsp;char&nbsp;*pat变更为const&nbsp;OH_Rdb_Config&nbsp;*config](changelogs-distributeddatamgr.md#cldistributeddatamgr6-oh_rdb_deletestore接口入参constchar-pat变更为const-oh_rdb_config-config) |
| 媒体 | 接口入参变更 | [getAudioEffectInfoArray接口入参变更,删除Content&nbsp;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&nbsp;废弃API8接口。](changelogs-image.md#climage2-ndk接口变更)<br/>[2.image_pixel_map_napi.h&nbsp;移动除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参数顺序调整) |
> **说明:**
> 以上变更如未明确说明变更类型为Native接口,则均为ArkTS接口的变更。
\ No newline at end of file
# 程序访问控制Changelog
## cl.accessToken.1 "媒体和文件"权限组拆分
原"媒体和文件"权限组内包含以下权限:
- ohos.permission.MEDIA_LOCATION
- ohos.permission.READ_MEDIA
- ohos.permission.WRITE_MEDIA
对这三个权限所属的权限组进行调整:
- ohos.permission.MEDIA_LOCATION 划分到 "图片和视频" 权限组
- ohos.permission.READ_MEDIA 和 ohos.permission.WRITE_MEDIA 划分到 "文件" 权限组。
**变更影响**
权限弹窗是以权限组为单位进行展示的。
- 在变更前,如果开发者同时申请以上三个权限,应用仅会弹一次申请"媒体和文件"权限的弹窗;
- 在变更后,如果开发者同时申请以上三个权限,应用会分别弹一次申请"图片和视频"权限的弹窗和申请"文件"权限的弹窗;
**关键的接口/组件变更**
修改前的权限组归属:
| 权限 | 所属权限组 |
| -------- | -------- |
| ohos.permission.MEDIA_LOCATION | 媒体和文件 |
| ohos.permission.READ_MEDIA | 媒体和文件 |
| ohos.permission.WRITE_MEDIA | 媒体和文件 |
修改后的权限组归属:
| 权限 | 所属权限组 |
| -------- | -------- |
| ohos.permission.MEDIA_LOCATION | 图片和视频 |
| ohos.permission.READ_MEDIA | 文件 |
| ohos.permission.WRITE_MEDIA | 文件 |
**适配指导**
应用开发者无需适配。
## cl.accessToken.2 “电话”、“信息”、“通话记录”权限组的权限申请方式调整
“电话”、“信息”、“通话记录”权限组的共包含以下权限:
- ohos.permission.ANSWER_CALL
- ohos.permission.MANAGE_VOICEMAIL
- ohos.permission.READ_CELL_MESSAGES
- ohos.permission.READ_MESSAGES
- ohos.permission.RECEIVE_MMS
- ohos.permission.RECEIVE_SMS
- ohos.permission.RECEIVE_WAP_MESSAGES
- ohos.permission.SEND_MESSAGES
- ohos.permission.READ_CALL_LOG
- ohos.permission.WRITE_CALL_LOG
- ohos.permission.MEDIA_LOCATION
当前调整这些权限的申请方式:这些权限仅能通过预授权方式进行授权。
**变更影响**
当前申请这些权限的系统应用无法通过权限弹窗进行权限请求,仅能通过预授权方式获取权限。
**关键的接口/组件变更**
不涉及。
**适配指导**
申请上述权限时,需要调整权限请求方式,申请权限预授权。
# arkui子系统ChangeLog # ArkUI Changelog
## cl.arkui.1 Navigation menus属性显示变更
## cl.arkui.1 通用事件参数支持undefined
通用事件(点击事件、触摸事件、挂载卸载事件、按键事件、焦点事件、鼠标事件、组件区域变化事件)参数支持undefined。
**示例:**
```ts
// xxx.ets
@Entry
@Component
struct Example {
build() {
Button("test")
.onClick(()=>{
console.log("click");
})
.onClick(undefined)
}
}
```
**变更影响**
如果事件回调参数为undefined,那么将不再响应已经设置的事件回调。
**关键的接口/组件变更**
不涉及。
**适配指导**
当事件参数设置为undefined,将会禁用该事件,依据实际应用开发场景进行参数设置即可。
## cl.arkui.2 \@Prop/\@BuilderParam 状态变量需要初始化或从父组件传值
**示例:**
```ts
// xxx.ets
@Entry
@Component
struct Parent {
@State message: string = 'Parent'
build() {
Column() {
Child() // 编译报错
}
}
}
@Component
struct Child {
@Prop message: string
build() {
Column() {
}
}
}
```
**变更影响**
\@Prop/\@BuilderParam 状态变量未初始化且未从父组件传值时,编译无法通过。
**关键的接口/组件变更**
不涉及。
**适配指导**
\@Prop/\@BuilderParam 状态变量做初始化赋值或从父组件调用子组件时传入。
## cl.arkui.3 \@BuilderParam 状态变量初始化赋值必须为\@Builder函数/方法
**示例:**
```ts
// xxx.ets
@Builder
function builderFunction() {
Text('Hello Builder')
}
function normal () {
}
@Component
struct Index {
@BuilderParam builderParam: ()=>void = builderFunction
@BuilderParam builderParam2: ()=>void = normal // 编译报错
build() {
Column() {
}
}
}
```
**变更影响**
\@BuilderParam 状态变量初始化赋值非\@Builder方法时,编译无法通过。
**关键的接口/组件变更**
不涉及。
**适配指导**
\@BuilderParam 状态变量初始化赋值传入\@Builder方法。
## cl.arkui.4 Search组件的searchButton属性中SearchButtonOption修改为SearchButtonOptions
**变更影响**
如果显式地使用了SearchButtonOption类型,编译无法通过。
**关键的接口/组件变更**
searchButton属性中类型SearchButtonOption修改为SearchButtonOptions。
**适配指导**
SearchButtonOption修改为SearchButtonOptions。
## cl.arkui.5 滚动事件上报滚动状态枚举值规则变更
ScrollState枚举值在API version 9及以下上报规则:
| 名称 | 描述 |
| -------- | -------- |
| Idle | 空闲状态。使用控制器提供的方法滚动、拖动滚动条滚动时触发。 |
| Scroll | 手指拖动状态。使用手指拖动List滚动时触发。 |
| Fling | 惯性滚动状态。快速划动松手后惯性滚动和划动到边缘回弹时触发。 |
从API version 10开始,ScrollState上报规则变更为:
| 名称 | 描述 |
| -------- | -------- |
| Idle | 空闲状态。滚动状态回归空闲的时候触发,一个滚动流程的最后一帧回调。控制器提供的无动画的方法控制的滚动也会触发。 |
| Scroll | 滚动状态。手指拖动List滚动时触发,拖动滚动条滚动时触发,滚动鼠标滚轮触发。 |
| Fling | 惯性滚动状态。由动画触发的滚动,包括快速划动松手后的惯性滚动,划动到边缘回弹的滚动,快速拖动内置滚动条松手后的惯性滚动,使用滚动控制器提供的带动画的方法控制的滚动。 |
ScrollState枚举变更如下。
| 场景 | API&nbsp;version&nbsp;9及以下 | API&nbsp;version&nbsp;10开始 |
| -------- | -------- | -------- |
| 手指拖动滑动 | Scroll | Scroll |
| 惯性滚动 | Fling | Fling |
| 过界回弹 | Fling | Fling |
| 鼠标滚轮滚动 | Idle | Scroll |
| 拖动滚动条 | Idle | Scroll |
| 滚动控制器滚动(带动画) | Idle | Fling |
| 滚动控制器滚动(不带动画) | Idle | Idle |
**变更影响**
1、ScrollState枚举值从API version 7开始提供,在API version 10变更,不影响API version 9及以下版本使用。
2、API version 9及以下使用到这个枚举值的接口有List组件的onScroll事件、onScrollFrameBegin事件、Scroll组件的onScrollFrameBegin事件,API version 9及以下滚动状态上报规则不变,不会产生影响;从API version 10开始,List组件的onScroll事件在文章起始列出的部分场景中上报的枚举值会有变化。
**关键接口/组件变更**
List组件接口文档:
- [List组件事件](https://harmonyosdevelopertest.devccsrnd.hwcloudtest.cn:3087/cn/docs/documentation/doc-references/ts-container-list-0000001580185770#ZH-CN_TOPIC_0000001656797053__%E4%BA%8B%E4%BB%B6)
- [List组件ScrollState枚举说明](https://harmonyosdevelopertest.devccsrnd.hwcloudtest.cn:3087/cn/docs/documentation/doc-references/ts-container-list-0000001580185770#ZH-CN_TOPIC_0000001656797053__scrollstate%E6%9E%9A%E4%B8%BE%E8%AF%B4%E6%98%8E)
**适配指导**
List组件绑定onScroll事件,通过onScroll事件上报当前滚动状态。API version 9及以下上报的滚动状态仍遵循变更前规则,从API version 10开始,上报的滚动状态遵循变更后规则。
参考代码如下:
```ts
// xxx.ets
@Entry
@Component
struct ListExample {
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
build() {
Column() {
List({ space: 20, initialIndex: 0 }) {
ForEach(this.arr, (item) => {
ListItem() {
Text('' + item)
.width('100%').height(100).fontSize(16)
.textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
}
}, item => item)
}
.listDirection(Axis.Vertical) // 排列方向
.edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring
.onScroll((scrollOffset: number, scrollState: ScrollState) => {
console.log(`onScroll scrollState = ${ScrollState[scrollState]}, scrollOffset = ${[scrollOffset]}`)
})
.width('90%')
}
.width('100%')
.height('100%')
.backgroundColor(0xDCDCDC)
.padding({ top: 5 })
}
}
```
## cl.arkui.6 ArkUI系统组件使用限制
对ArkUI系统组件的使用场景进行限制,仅允许在struct的build方法内、pageTransition方法内或\@Builder修饰的函数内使用。
**示例:**
```
@Entry
@Component
struct Index {
build() {
Row() {
}
}
}
// ERROR:UI component 'Text' cannot be used in this place.
Text('Hello World')
```
**变更影响**
如果ArkUI系统组件在限制(struct的build方法内,pageTransition方法内,\@Builder修饰的函数内)以外的地方使用,会导致编译报错。
**关键的接口/组件变更**
不涉及。
**适配指导**
将ArkUI系统组件的调用修改到struct的build方法内、pageTransition方法内或\@Builder修饰的函数内。
## cl.ArkUI.7 \@Prop在API 9支持Object浅拷贝,API 10变更为深拷贝
**变更影响**
\@Prop支持Object在API 9为浅拷贝,具体行为表现为:
- Object类型:浅拷贝Object.keys(propObj) 返回的所有属性。即只拷贝最外层的Object,Object中property还是指向原来的父组件的数据源。
- 数组类型:浅拷贝所有的数组项,即只拷贝最外层的array,其他行为和Object一致。
- 拷贝Object和数组的prototype。
\@Prop支持Object在API 10变更为深拷贝,具体行为表现为:
- Object类型:完全拷贝Object.keys(propObj) 返回的所有属性。
- 数组类型:完全拷贝所有的数组项;
- 拷贝Object和数组的prototype。
**适配指导**
\@Prop深浅拷贝的变更在UI渲染上的影响主要在\@ObjectLink相关的场景,因为\@ObjectLink会代理其修饰对象属性。
例子如下:
api9:PropClassAArray组件中\@Prop objArray改变ClassA的属性,或者设置新的数组项,都会引起父组件StateClassAArray创建的ObjectLinkClassA中的\@ObjectLink obj的改变。
这个更新是因为父组件StateClassAArray中\@State stateClassAArray到子组件PropClassAArray中\@Prop objArray是浅拷贝引起的,因为浅拷贝只拷贝了数组项的引用,所以数据源也被改变,而\@ObjectLink代理了数据源的属性,所以引发了ObjectLinkClassA组件中的\@ObjectLink obj的更新(从StateClassAArray组件中构造的)。
api10:在上述场景中,因为父组件StateClassAArray中\@State stateClassAArray到子组件PropClassAArray中\@Prop objArray是深拷贝,完整拷贝了ClassA的对象,所以不会改变数据源,从而不会引发ObjectLinkClassA组件中的\@ObjectLink obj的更新(从StateClassAArray组件中构造的)。
![zh-cn_image_0000001621772152](figures/zh-cn_image_0000001621772152.png)
```ts
let nextId = 0;
@Observed
class ClassA {
id : number;
a : number;
constructor(a : number = 0) {
this.id = nextId++;
this.a = a;
}
}
@Component
struct ObjectLinkClassA {
@ObjectLink obj : ClassA;
build() {
Row() {
Text(`ObjectLink: obj: ${this.obj.a}`)
.height(100)
.onClick(() => {
this.obj.a += 1;
console.info(`ObjectLink onClick ClassA property changed to ${this.obj.a}`)
})
}.border({width: 3, color: Color.Red})
}
}
@Component
struct PropClassAArray {
@Prop objArray : Array<ClassA> = [];
build() {
Column() {
Text(`green box: @Prop : Array<ObjectClassA> item [0] + [1]`)
Row() {
ObjectLinkClassA({ obj: this.objArray[0] })
Text("[0] Assign new ClassA")
.height(100)
.onClick(() => {
this.objArray[0] = new ClassA();
console.info(`PropClassAArray[0] onClick ClassA object assign ${this.objArray[0].a}`)
})
Text("Change ClassA property")
.height(100)
.onClick(() => {
this.objArray[0].a += 1;
console.info(`PropClassAArray[1] onClick ClassA property change ${this.objArray[1].a}`)
})
}
}.border({width: 3, color: Color.Green})
}
}
@Entry
@Component
struct StateClassAArray {
@State stateClassAArray : Array<ClassA> = [ new ClassA(), new ClassA() ];
build() {
Column() {
Column() {
Text("Red box: @ObjectLink from @State array item[0]")
Row() {
ObjectLinkClassA({obj : this.stateClassAArray[0] })
Text("Assign new ClassA")
.height(100)
.onClick(() => {
this.stateClassAArray[0] = new ClassA();
console.info(`StateClassAArray[0] onClick ClassA object assign ${this.stateClassAArray[0].a}`)
})
Text("Change ClassA property")
.height(100)
.onClick(() => {
this.stateClassAArray[0].a += 1;
console.info(`StateClassAArray onClick stateClassAArray[0] changed to ${this.stateClassAArray[0].a}`)
})
}
}.border({width: 3, color: Color.Blue})
Divider().height(5)
// api9浅拷贝:只拷贝指向源数组项的引用,不拷贝数组项ClassA实例自身
// api10深拷贝:完整拷贝this.stateClassAArray,包括其数组项。
PropClassAArray({ objArray: this.stateClassAArray })
}
}
}
```
## cl.arkui.8 编译拦截\@Extend/\@AnimatableExtend参数个数不符合预期
\@Extend/\@AnimatableExtend装饰器参数有且仅能有一个。
**变更影响**
\@Extend/\@AnimatableExtend装饰器参数有多个时,编译报错。
**错误示例:**
```ts
// xxx.ets
@Extend(Text, Button) // 编译报错: @Extend should have one and only one parameter
function fancy() {
.width(100)
}
@AnimatableExtend(Text, Polyline) // 编译报错: @AnimatableExtend should have one and only one parameter
function fancy2() {
.height(100)
}
@Entry
@Component
struct Example {
build() {
Column() {
Text('text')
.fancy()
.fancy2()
}
}
}
```
**关键接口/组件变更**
不涉及
**适配指导**
\@Extend和AnimatableExtend装饰器仅能传一个参数。
参考代码如下:
```ts
// xxx.ets
@Extend(Text)
function fancy() {
.width(100)
}
@AnimatableExtend(Text)
function fancy2() {
.height(100)
}
@Entry
@Component
struct Example {
build() {
Column() {
Text('text')
.fancy()
.fancy2()
}
}
}
```
## cl.arkui.9 编译拦截\@Link/\@ObjectLink成员变量未从父组件传值
子组件的\@Link/\@ObjectLink成员变量需要从父组件传值。
**变更影响**
子组件的\@Link/\@ObjectLink当没有从父组件传值时,编译报错。
**错误示例:**
```ts
// xxx.ets
@Observed
class Count {
message: string = 'count'
}
@Entry
@Component
struct Parent {
@State state1: string = 'state1';
@State state2: Count = new Count();
build() {
Column() {
Child() // 编译报错:Property 'link' in the custom component 'Child' is missing (mandatory to specify).
// 编译报错:Property 'objectLink' in the custom component 'Child' is missing (mandatory to specify).
}
}
}
@Component
struct Child {
@Link link: string;
@ObjectLink objectLink: Count;
build() {
Column() {
Text(this.link)
.fontSize(50)
Text(this.objectLink.message)
.fontSize(50)
}
}
}
```
**关键接口/组件变更**
不涉及
**适配指导**
子组件的\@Link/\@ObjectLink成员变量需要从父组件传值。
参考代码如下:
```ts
// xxx.ets
@Observed
class Count {
message: string = 'count'
}
@Entry
@Component
struct Parent {
@State state1: string = 'state1';
@State state2: Count = new Count();
build() {
Column() {
Child({link: $state1, objectLink: this.state2})
}
}
}
@Component
struct Child {
@Link link: string;
@ObjectLink objectLink: Count;
build() {
Column() {
Text(this.link)
.fontSize(50)
Text(this.objectLink.message)
.fontSize(50)
}
}
}
```
## cl.arkui.10 canvas组件onReady事件行为变更
**说明**
onReady事件在组件创建完成后或组件大小发生变化时触发,并清空画布。
**示例:**
```ts
@Entry
@Component
struct OnReadyDiff {
@State message: string = 'init '
@State isShow: boolean = false
@State myHeight: number = 300
private settings: RenderingContextSettings = new RenderingContextSettings(true);
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings);
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('ChangePosition')
.onClick(()=>{
this.isShow = !this.isShow
})
if (this.isShow) {
Button('new button')
.height(200)
}
Button('ChangeHeight')
.onClick(()=>{
this.myHeight = this.myHeight==300?500:300
})
Canvas(this.context)
.width(300)
.height(this.myHeight)
.backgroundColor('#ffff00')
.onReady(() =>{
this.context.fillRect(0, 0, 100, 100)
this.message += 'a '
})
Button('draw another')
.onClick(()=>{
this.context.fillRect(100, 100, 100, 100)
})
}
.width('100%')
}
.height('100%')
}
}
```
API version 9:onReady在组件创建完成时触发,位置变化时会触发,组件大小变化时也会触发。
![zh-cn_image_0000001669812181](figures/zh-cn_image_0000001669812181.gif)
API version 10及以后:onReady在组件创建完成时触发,在组件位置变化时不会触发,组件大小变化时会触发。
![zh-cn_image_0000001621452400](figures/zh-cn_image_0000001621452400.gif)
**变更影响**
onReady事件在组件位置发生变化时行为变更,API version 9及以前会触发,API version 10及以后不会触发。
## cl.arkui.11 Navigation menus属性显示变更
**变更影响** **变更影响**
menus的value属性值不做显示,如果需要显示,可以使用自定义Builder显示。 menus的value属性值不做显示,如果需要显示,可以使用自定义Builder显示。
**示例:** **示例:**
```ts ```ts
@Entry @Entry
@Component @Component
...@@ -25,20 +636,26 @@ struct Index { ...@@ -25,20 +636,26 @@ struct Index {
} }
} }
``` ```
API Version 9:menus的value属性会显示 API Version 9:menus的value属性会显示
![Navigation](figures/navigation_menu_api9.png) ![zh-cn_image_0000001670132021](figures/zh-cn_image_0000001670132021.png)
API Version 10: menus中的value属性不显示 API Version 10: menus中的value属性不显示
![Navigation](figures/navigation_menu_api10.png)
## cl.arkui.2 Navigation的titleMode属性Free模式默认显示位置变更 ![zh-cn_image_0000001621612228](figures/zh-cn_image_0000001621612228.png)
## cl.arkui.12 Navigation的titleMode属性Free模式默认显示位置变更
**变更影响** **变更影响**
1. Navigation组件自定义标题并titleMode设置为Full模式或Free模式显示位置相同 1. Navigation组件自定义标题并titleMode设置为Full模式或Free模式显示位置相同
2. 使用自定义title结合Free模式的标签会出现标签位置向右偏移 2. 使用自定义title结合Free模式的标签会出现标签位置向右偏移
**示例:** **示例:**
```ts ```ts
@Entry @Entry
@Component @Component
...@@ -66,8 +683,8 @@ struct Index { ...@@ -66,8 +683,8 @@ struct Index {
API Version 9: Free模式显示位置 API Version 9: Free模式显示位置
![Navigation](figures/navigation_title_mode_free_sdk9.png) ![zh-cn_image_0000001621932120](figures/zh-cn_image_0000001621932120.png)
API Version 10: Free模式显示位置与Full模式显示位置相同 API Version 10: Free模式显示位置与Full模式显示位置相同
![Navigation](figures/navigation_title_mode_free_sdk10.png) ![zh-cn_image_0000001670212013](figures/zh-cn_image_0000001670212013.png)
\ No newline at end of file
# 包管理Changelog
## cl.bundlemanager.1 包管理\@ohos.bundle.d.ts中getAllBundleInfo接口底层实现变更。
\@ohos.bundle.d.ts中getAllBundleInfo接口已标记废弃,在targetAPILevel为API9及之后的版本镜像上,返回数据列表为空。
**变更影响**
升级新版本镜像后,使用\@ohos.bundle.d.ts中的getAllBundleInfo的接口调用成功后返回数据列表为空。需要应用调用新的接口\@ohos.bundle.bundleManager.d.ts中的getAllBundleInfo。
**关键的接口/组件变更**
底层实现变更,使用\@ohos.bundle.d.ts中的getAllBundleInfo的接口调用成功后返回数据列表为空。
**适配指导**
应用在使用\@ohos.bundle.d.ts中getAllBundleInfo接口的地方可以修改为使用\@ohos.bundle.bundleManager.d.ts中getAllBundleInfo,新接口使用方法可参考接口说明。
```ets
import bundleManager from '@ohos.bundle.bundleManager';
```
## cl.bundlemanager.2 包管理\@ohos.bundle.d.ts中getAllApplicationInfo接口底层实现变更。
\@ohos.bundle.d.ts中getAllApplicationInfo接口已标记废弃,在targetAPILevel为API9及之后的版本镜像上,返回数据列表为空。
**变更影响**
升级新版本镜像后,使用\@ohos.bundle.d.ts中的getAllApplicationInfo的接口调用成功后返回数据列表为空。需要应用调用新的接口\@ohos.bundle.bundleManager.d.ts中的getAllApplicationInfo。
**关键的接口/组件变更**
底层实现变更,使用\@ohos.bundle.d.ts中的getAllApplicationInfo的接口调用成功后返回数据列表为空。
**适配指导**
应用在使用\@ohos.bundle.d.ts中getAllApplicationInfo接口的地方可以修改为使用\@ohos.bundle.bundleManager.d.ts中getAllApplicationInfo,新接口使用方法可参考接口说明。
```ets
import bundleManager from '@ohos.bundle.bundleManager';
```
## cl.bundlemanager.3 包管理\@ohos.bundle.bundleManager.d.ts中getAllBundleInfo接口权限变更。
获取应用列表接口需要由用户选择是否同意授权,因此将
\@ohos.bundle.bundleManager.d.ts中getAllBundleInfo接口权限变更为ohos.permission.GET_INSTALLED_BUNDLE_LIST。
**变更影响**
升级新版本镜像后,使用getAllBundleInfo的接口需要申请新的权限ohos.permission.GET_INSTALLED_BUNDLE_LIST,否则接口会调用失败。
**关键的接口/组件变更**
\@ohos.bundle.bundleManager.d.ts中getAllBundleInfo接口权限变更为ohos.permission.GET_INSTALLED_BUNDLE_LIST。
**适配指导**
1. 应用可以在配置文件中新增申请权限ohos.permission.GET_INSTALLED_BUNDLE_LIST。
2. 该权限为user_grant类型的,安装时默认不会授权,需要应用调用弹框接口由用户选择是否授权或者使用预授权进行授权。
3. 使用弹框授权方式可以参考[向用户申请授权](https://harmonyosdevelopertest.devccsrnd.hwcloudtest.cn:3087/cn/docs/documentation/doc-guides/accesstoken-guidelines-0000001630265341#ZH-CN_TOPIC_0000001607716650__%E5%90%91%E7%94%A8%E6%88%B7%E7%94%B3%E8%AF%B7%E6%8E%88%E6%9D%83)
4. 使用预授权方式可以参考[权限预授权](https://harmonyosdevelopertest.devccsrnd.hwcloudtest.cn:3087/cn/docs/documentation/doc-guides/accesstoken-guidelines-0000001630265341#ZH-CN_TOPIC_0000001607716650__user_grant%E6%9D%83%E9%99%90%E9%A2%84%E6%8E%88%E6%9D%83)
## cl.bundlemanager.4 包管理\@ohos.bundle.bundleManager.d.ts中getAllApplicationInfo接口权限变更。
获取应用列表接口需要由用户选择是否同意授权,因此将
\@ohos.bundle.bundleManager.d.ts中getAllApplicationInfo接口权限变更为ohos.permission.GET_INSTALLED_BUNDLE_LIST。
**变更影响**
升级新版本镜像后,使用getAllApplicationInfo的接口需要申请新的权限ohos.permission.GET_INSTALLED_BUNDLE_LIST,否则接口会调用失败。
**关键的接口/组件变更**
\@ohos.bundle.bundleManager.d.ts中getAllApplicationInfo接口权限变更为ohos.permission.GET_INSTALLED_BUNDLE_LIST。
**适配指导**
1. 应用可以在配置文件中新增申请权限ohos.permission.GET_INSTALLED_BUNDLE_LIST。
2. 该权限为user_grant类型的,安装时默认不会授权,需要应用调用弹框接口由用户选择是否授权或者使用预授权进行授权。
3. 使用弹框授权方式可以参考[向用户申请授权](https://harmonyosdevelopertest.devccsrnd.hwcloudtest.cn:3087/cn/docs/documentation/doc-guides/accesstoken-guidelines-0000001630265341#ZH-CN_TOPIC_0000001607716650__%E5%90%91%E7%94%A8%E6%88%B7%E7%94%B3%E8%AF%B7%E6%8E%88%E6%9D%83)
4. 使用预授权方式可以参考[权限预授权](https://harmonyosdevelopertest.devccsrnd.hwcloudtest.cn:3087/cn/docs/documentation/doc-guides/accesstoken-guidelines-0000001630265341#ZH-CN_TOPIC_0000001607716650__user_grant%E6%9D%83%E9%99%90%E9%A2%84%E6%8E%88%E6%9D%83)
## cl.bundlemanager.5 包管理\@ohos.bundle.installer.d.ts中getSpecifiedDistributionType接口移动到\@ohos.bundle.bundleManager.d.ts中。
包管理\@ohos.bundle.installer.d.ts中getSpecifiedDistributionType接口移动到\@ohos.bundle.bundleManager.d.ts中。
**变更影响**
升级新版本SDK后,包管理\@ohos.bundle.installer.d.ts中getSpecifiedDistributionType接口移动到\@ohos.bundle.bundleManager.d.ts中。
**关键的接口/组件变更**
包管理\@ohos.bundle.installer.d.ts中getSpecifiedDistributionType接口移动到\@ohos.bundle.bundleManager.d.ts中。
**适配指导**
修改导入模块,使用bundleManager中的getSpecifiedDistributionType
```ets
import bundleManager form '@ohos.bundle.bundleManager'
```
## cl.bundlemanager.6 包管理\@ohos.bundle.installer.d.ts中getAdditionalInfo接口移动到\@ohos.bundle.bundleManager.d.ts中。
包管理\@ohos.bundle.installer.d.ts中getAdditionalInfo接口移动到\@ohos.bundle.bundleManager.d.ts中。
**变更影响**
升级新版本SDK后,包管理\@ohos.bundle.installer.d.ts中getAdditionalInfo接口移动到\@ohos.bundle.bundleManager.d.ts中。
**关键的接口/组件变更**
包管理\@ohos.bundle.installer.d.ts中getAdditionalInfo接口移动到\@ohos.bundle.bundleManager.d.ts中。
**适配指导**
修改导入模块,使用bundleManager中的getAdditionalInfo
```ets
import bundleManager form '@ohos.bundle.bundleManager'
```
## cl.bundlemanager.7 应用配置文件module.json5中proxyDatas更名为proxyData。
由于命名规范问题,proxyDatas更名为proxyData。
**变更影响**
升级新版本SDK后,proxyDatas更名为proxyData,应用如果不进行适配,将会编译失败。
**关键的接口/组件变更**
proxyDatas更名为proxyData。
**适配指导**
请使用proxyData替换proxyDatas,其内容不需要变更。
# 分布式数据管理Changelog
## cl.distributeddatamgr.1 OH_Cursor结构体的函数指针成员变量**int** (close)(OH_Cursor cursor)变更为\*\*int (\*destroy)(OH_Cursor \*cursor)
**变更影响**
该变更为不兼容变更,函数指针名称由close更改为destroy,入参及返回值均未更改。
**关键接口/组件变更**
修改前的OH_Cursor该成员变量原型:
```ts
int (*close)(OH_Cursor *cursor);
```
修改后的OH_Predicates成员变量原型:
```ts
int (*destroy)(OH_Cursor *cursor);
```
**适配指导**
示例代码如下:
变更前代码示例:
```
cursor->close(cursor);
```
变更后代码示例:
```
cursor->destroy(cursor);
```
## cl.distributeddatamgr.2 OH_Predicates结构体的函数指针成员变量**int** (\*destroyPredicates)(OH_Predicates \*predicates)变更为 **int** (\*destroy)(OH_Predicates \*predicates)
**变更影响**
该变更为不兼容变更,函数指针名称由destroyPredicates更改为destroy,入参及返回值均未更改。
**关键接口/组件变更**
修改前的OH_Predicates该成员变量原型:
```ts
int (*destroyPredicates)(OH_Predicates *predicates);
```
修改后的OH_Predicates成员变量原型:
```ts
int (*destroy)(OH_Predicates *predicates);
```
**适配指导**
示例代码如下:
变更前代码示例:
```
predicates->destroyPredicates(predicates);
```
变更后代码示例:
```
predicates->destroy(predicates);
```
## cl.distributeddatamgr.3 OH_VObject结构体的函数指针成员变量**int** (\*destroyValueObject)(OH_VObject \*valueObject)变更为 **int** (\*destroy)(OH_VObject \*valueObject)
**变更影响**
该变更为不兼容变更,函数指针名称由destroyValueObject更改为destroy,入参及返回值均未更改。
**关键接口/组件变更**
修改前的OH_VObject该成员变量原型:
```ts
int (*destroyValueObject)(OH_VObject *valueObject);
```
修改后的OH_Predicates成员变量原型:
```ts
int (*destroy)(OH_VObject *valueObject);
```
**适配指导**
示例代码如下:
变更前代码示例:
```
valueObject->destroyValueObject(valueObject);
```
变更后代码示例:
```
valueObject->destroy(valueObject);
```
## cl.distributeddatamgr.4 OH_VBucket结构体的函数指针成员变量**int** (\*destroyValuesBucket)(OH_VBucket \*bucket)变更为 int (\*destroy)(OH_VBucket \*bucket)
**变更影响**
该变更为不兼容变更,函数指针名称由destroyValuesBucket更改为destroy,入参及返回值均未更改。
**关键接口/组件变更**
修改前的OH_VBucket该成员变量原型:
```ts
int (*destroyValuesBucket)(OH_VBucket *bucket);
```
修改后的OH_Predicates成员变量原型:
```ts
int (*destroy)(OH_VBucket *bucket);
```
**适配指导**
示例代码如下:
变更前代码示例:
```
valueBucket->destroyValuesBucket(valueBucket);
```
变更后代码示例:
```
valueBucket->destroy(valueBucket);
```
## cl.distributeddatamgr.5 OH_Rdb_Config结构体成员变量变更
**变更影响**
该变更为不兼容变更,将成员变量securityLevel的类型由enum OH_Rdb_SecurityLevel改为in;删除成员变量path;并新增成员变量selfSize、dataBaseDir、storeName、bundleName、moduleName。
**关键接口/组件变更**
修改前的OH_Rdb_Config:
```ts
typedef struct {
const char *path;
bool isEncrypt;
enum OH_Rdb_SecurityLevel securityLevel;
} OH_Rdb_Config;
```
修改后的OH_Rdb_Config:
```ts
typedef struct {
int selfSize;
const char *dataBaseDir;
const char *storeName;
const char *bundleName;
const char *moduleName;
bool isEncrypt;
int securityLevel;
} OH_Rdb_Config;
```
**适配指导**
用户在利用OH_Rdb_Config创建数据库时,需要传入包名以及模块名等信息。
## cl.distributeddatamgr.6 **OH_Rdb_DeleteStore**接口入参**constchar** pat变更为\*const OH_Rdb_Config \*config
**变更影响**
该变更为不兼容变更,函数入参由const char \*path变更为const OH_Rdb_Config \*config。
**关键接口/组件变更**
修改前OH_Rdb_DeleteStore接口:
```ts
int OH_Rdb_DeleteStore(const char *path);
```
修改后OH_Rdb_DeleteStore接口:
```ts
int OH_Rdb_DeleteStore(const OH_Rdb_Config *config);
```
**适配指导**
示例代码如下:
变更前代码示例:
```
OH_Rdb_DeleteStore(“”)
```
变更后代码示例:
```
OH_Rdb_DeleteStore(config)
```
# 元能力-卡片框架Changelog
## cl.formfwk.1 \@ohos.app.form.formHost.d.ts部分接口移出,接口权限变动
1. \@ohos.app.form.formHost.d.ts中涉及监听和获取卡片动态信息的接口移至\@ohos.app.form.formObserver.d.ts;
2. 涉及接口需申请权限由ohos.permission.REQUIRE_FORM修改为ohos.permission.OBSERVE_FORM_RUNNING。
**变更影响**
对于已发布的js接口,可能影响三方应用的兼容性。
**关键的接口/组件变更**
| 接口 | 修改前所属d.ts | 修改后所属d.ts | 修改前所需权限 | 修改后所需权限 |
| -------- | -------- | -------- | -------- | -------- |
| on('formAdd') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| off('formAdd') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| on('formRemove') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| off('formRemove') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| on('notifyVisible') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| off('notifyVisible') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| on('notifyInvisible') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| off('notifyInvisible') | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| getRunningFormInfos | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| getRunningFormInfosByFilter | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
| getRunningFormInfoById | \@ohos.app.form.formHost.d.ts | \@ohos.app.form.formObserver.d.ts | ohos.permission.REQUIRE_FORM | ohos.permission.OBSERVE_FORM_RUNNING |
**适配指导**
已使用相关接口开发的应用工程,需要对接口进行适配。从OpenHarmony 4.0.9.5版本起,相关接口使用应导入\@ohos.app.form.formObserver.d.ts,并申请ohos.permission.OBSERVE_FORM_RUNNING权限。
**示例:**
```js
import formObserver from @ohos.app.form.formObserver.d.ts;
try {
formObserver.getRunningFormInfos((error, data) => {
if (error) {
console.error(`error, code: ${error.code}, message: ${error.message}`);
} else {
console.log('formHost getRunningFormInfos, data: ${JSON.stringify(data)}');
}
}, 'com.example.ohos.formjsdemo');
} catch(error) {
console.error(`catch error, code: ${error.code}, message: ${error.message}`);
}
```
## cl.formfwk.2 事件订阅,取消订阅相关接口(on/off)参数顺序调整
事件订阅,取消订阅相关接口(on/off)中的callback调整为接口最后一个参数。
**变更影响**
对于已发布的js接口,可能影响三方应用的兼容性。
**关键的接口/组件变更**
修改前的接口原型:
```js
function on(type: 'formAdd', observerCallback: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
function off(type: 'formAdd', observerCallback?: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
function on(type: 'formRemove', observerCallback: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
function off(type: 'formRemove', observerCallback?: Callback<formInfo.RunningFormInfo>, bundleName?: string): void;
function on(
type: 'notifyVisible',
observerCallback: Callback<Array<formInfo.RunningFormInfo>>,
hostBundleName?: string
): void;
function off(
type: 'notifyVisible',
observerCallback?: Callback<Array<formInfo.RunningFormInfo>>,
hostBundleName?: string
): void;
function on(
type: 'notifyInvisible',
observerCallback: Callback<Array<formInfo.RunningFormInfo>>,
hostBundleName?: string
): void;
function off(
type: 'notifyInvisible',
observerCallback?: Callback<Array<formInfo.RunningFormInfo>>,
hostBundleName?: string
): void;
```
修改后的接口原型:
```js
function on(type: 'formAdd', observerCallback: Callback<formInfo.RunningFormInfo>): void;
function on(type: 'formAdd', hostBundleName: string, observerCallback: Callback<formInfo.RunningFormInfo>): void;
function off(type: 'formAdd', hostBundleName?: string, observerCallback?: Callback<formInfo.RunningFormInfo>): void;
function on(type: 'formRemove', observerCallback: Callback<formInfo.RunningFormInfo>): void;
function on(type: 'formRemove', hostBundleName: string, observerCallback: Callback<formInfo.RunningFormInfo>): void;
function off(type: 'formRemove', hostBundleName?: string, observerCallback?: Callback<formInfo.RunningFormInfo>): void;
function on(type: 'notifyVisible', observerCallback: Callback<Array<formInfo.RunningFormInfo>>): void;
function on(
type: 'notifyVisible',
hostBundleName: string,
observerCallback: Callback<Array<formInfo.RunningFormInfo>>
): void;
function off(
type: 'notifyVisible',
hostBundleName?: string,
observerCallback?: Callback<Array<formInfo.RunningFormInfo>>
): void;
function on(type: 'notifyInvisible', observerCallback: Callback<Array<formInfo.RunningFormInfo>>): void;
function on(
type: 'notifyInvisible',
hostBundleName: string,
observerCallback: Callback<Array<formInfo.RunningFormInfo>>,
): void;
function off(
type: 'notifyInvisible',
hostBundleName?: string,
observerCallback?: Callback<Array<formInfo.RunningFormInfo>>
): void;
```
**适配指导**
已使用相关接口开发的应用工程,需要对接口进行适配。从OpenHarmony 4.0.9.5版本起,相关接口使用应注意入参顺序的调整,将callback作为最后一个参数进行接口调用。
**示例:**
```js
import formObserver from @ohos.app.form.formObserver.d.ts;
let bundleName = 'ohos.samples.FormApplication';
let callback = function(data) {
console.log('a new form added, data: ${JSON.stringify(data)');
}
formHost.on('formAdd', callback);
formHost.on('formAdd', bundleName, callback);
```
# 图形Changelog
## cl.image.1 \@ohos.multimedia.image中getDelayTime更名为getDelayTimeList
**变更影响**
对于已发布的JS接口,可能影响应用的兼容性。
**适配指导**
针对已使用该接口开发的应用工程,需要对接口进行适配,将接口修改为getDelayTimeList。
**示例:**
```js
import image from '@ohos.multimedia.image';
let testJpg = new Uint8Array([255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 1, 0, 96, 0, 96, 0, 0, 255, 219, 0, 67, 0, 2, 1, 1, 2, 1, 1, 2,
2, 2, 2, 2, 2, 2, 2, 3, 5, 3, 3, 3, 3, 3, 6, 4, 4, 3, 5, 7, 6, 7, 7, 7, 6, 7, 7, 8, 9, 11, 9, 8,
8, 10, 8, 7, 7, 10, 13, 10, 10, 11, 12, 12, 12, 12, 7, 9, 14, 15, 13, 12, 14, 11, 12, 12, 12, 255, 219, 0, 67, 1, 2, 2,
2, 3, 3, 3, 6, 3, 3, 6, 12, 8, 7, 8, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 255, 192,
0, 17, 8, 0, 226, 1, 216, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 196, 0, 31, 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 16, 0, 2, 1, 3, 3, 2, 4, 3, 5,
5, 4, 4, 0, 0, 1, 125, 1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, 113, 20, 50, 129, 145, 161, 8, 35,
66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58,
67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122,
131, 132, 133, 134, 135, 136, 137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183,
184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241,
242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 196, 0, 31, 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 17, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119, 0,
1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21,
98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73,
74, 83, 84, 85, 86, 87, 88, 89, 90, 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136,
137, 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, 182, 183, 184, 185, 186, 194, 195, 196,
197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249,
250, 255, 218, 0, 12, 3, 1, 0, 2, 17, 3, 17, 0, 63, 0, 253, 16, 162, 138, 43, 252, 99, 63, 170, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160,
2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 2, 138, 40, 160, 15, 255, 217])
const imageSourceApi = image.createImageSource(testJpg.buffer);
if (imageSourceApi == undefined) {
console.log('renhw ============== imageSourceApi == undefined');
} else {
imageSourceApi.getDelayTimeList((err, delayTimes) => {
if (err != undefined) {
console.info(`getDelayTimeCallBack getDelayTime failed err` + err);
} else {
console.info(`getDelayTimeCallBack getDelayTime success`);
}
});
}
```
## cl.image.2 NDK接口变更
1. image_pixel_map_napi.h 废弃API8接口
2. image_pixel_map_napi.h 移动除API8以外的接口到image_pixel_map_mdk.h,并去除命名空间
**变更影响**
对于已发布的JS接口,可能影响应用的兼容性。
**适配指导**
1. 添加头文件image_pixel_map_mdk.h。
2. 去除image_pixel_map_mdk.h中接口调用中的命名空间。
**示例:**
```
#include "napi/native_api.h"
#include "image_pixel_map_mdk.h"
#include "image_pixel_map_napi.h"
...
static NativePixelMap* getNativePixelMap(napi_env env, napi_callback_info info)
{
napi_value thisVar = nullptr;
napi_value argValue[NUM_1] = {0};
size_t argCount = NUM_1;
if (napi_get_cb_info(env, info, &argCount, argValue, &thisVar, nullptr) != napi_ok ||
argCount < NUM_1 || argValue[NUM_0] == nullptr) {
return nullptr;
}
return OH_PixelMap_InitNativePixelMap(env, argValue[NUM_0]);
}
...
```
# 输入法框架Changelog
## cl.imf.1 \@ohos.InputMethod中on('imeShow')系统接口权限校验失败返回错误码变更
**变更影响**
使用on('imeShow')接口,系统权限校验失败的返回码从201变更为202。
## cl.imf.2 \@ohos.InputMethod中on('imeHide')系统接口权限校验失败返回错误码变更
**变更影响**
使用on('imeHide')接口,系统权限校验失败的返回码从201变更为202。
# 媒体Changelog
## cl.multimedia.1 音频C接口流类型枚举声明变更
对于在API10中已经新增的音频C接口,音频输出流类型名称为AUDIOSTREAM_TYPE_RERNDERER,在最新版本修正为AUDIOSTREAM_TYPE_RENDERER。
**变更影响**
对于已发布的C接口,可能影响三方应用的兼容性。
**关键的接口/组件变更**
修改前的接口原型:
```C
enum OH_AudioStream_Type {
/**
* The type for audio stream is renderer.
*/
AUDIOSTREAM_TYPE_RERNDERER = 1,
/**
* The type for audio stream is capturer.
*/
AUDIOSTREAM_TYPE_CAPTURER = 2
};
```
修改后的接口原型:
```C
enum OH_AudioStream_Type {
/**
* The type for audio stream is renderer.
*/
AUDIOSTREAM_TYPE_RENDERER = 1,
/**
* The type for audio stream is capturer.
*/
AUDIOSTREAM_TYPE_CAPTURER = 2
};
```
**适配指导**
开发人员需要在使用音频输出流类型AUDIOSTREAM_TYPE_RERNDERER时,修改为AUDIOSTREAM_TYPE_RENDERER。例如:
修改前
```C
OH_AudioStreamBuilder* builder;
OH_AudioStreamBuilder_Create(&builder, AUDIOSTREAM_TYPE_RERNDERER);
```
修改后
```C
OH_AudioStreamBuilder* builder;
OH_AudioStreamBuilder_Create(&builder, AUDIOSTREAM_TYPE_RENDERER);
```
## cl.multimedia.2 OH_AudioStream_Usage变更
API10的音频C接口native_audiostream_base.h 文件中,在OH_AudioStream_Usage枚举中删除了AUDIOSTREAM_USAGE_MEDIA枚举值,将AUDIOSTREAM_USAGE_COMMUNICATION枚举值变更为AUDIOSTREAM_USAGE_VOICE_COMMUNICATION和AUDIOSTREAM_USAGE_VOICE_ASSISTANT。
**变更影响**
对于已发布的C接口,可能影响三方应用的兼容性。如果开发者使用AUDIOSTREAM_USAGE_MEDIA和AUDIOSTREAM_USAGE_COMMUNICATION枚举值,会有兼容性问题。
**关键的接口/组件变更**
修改前
```C
typedef enum {
AUDIOSTREAM_USAGE_UNKNOWN = 0,
AUDIOSTREAM_USAGE_MEDIA = 1,
AUDIOSTREAM_USAGE_COMMUNICATION = 2,
} OH_AudioStream_Usage;
```
修改后
```C
typedef enum {
/**
* Unknown usage.
*/
AUDIOSTREAM_USAGE_UNKNOWN = 0,
/**
* Music usage.
*/
AUDIOSTREAM_USAGE_MUSIC = 1,
/**
* Voice communication usage.
*/
AUDIOSTREAM_USAGE_VOICE_COMMUNICATION = 2,
/**
* Voice assistant usage.
*/
AUDIOSTREAM_USAGE_VOICE_ASSISTANT = 3,
/**
* Movie or video usage.
*/
AUDIOSTREAM_USAGE_MOVIE = 10,
} OH_AudioStream_Usage;
```
**适配指导**
用户通过OH_AudioStreamBuilder_SetRendererInfo接口不能再设置OH_AudioStream_Usage值为AUDIOSTREAM_USAGE_MEDIA,改为使用AUDIOSTREAM_USAGE_MUSIC或者AUDIOSTREAM_USAGE_MOVIE。
修改前
```C
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_MEDIA);
```
修改后
```C
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_MUSIC); // 音乐场景
```
或者
```C
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_MOVIE); // 视频场景
```
用户通过OH_AudioStreamBuilder_SetRendererInfo接口不能再设置OH_AudioStream_Usage值为AUDIOSTREAM_USAGE_COMMUNICATION,改为使用AUDIOSTREAM_USAGE_VOICE_COMMUNICATION或者AUDIOSTREAM_USAGE_VOICE_ASSISTANT。
修改前
```C
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_COMMUNICATION);
```
修改后
```C
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_VOICE_COMMUNICATION); // 通话场景
```
或者
```C
OH_AudioStreamBuilder_SetRendererInfo(builder, AUDIOSTREAM_USAGE_VOICE_ASSISTANT); // 语音场景
```
## cl.multimedia.3 OH_AudioStream_SampleFormat变更,删除AUDIOSTREAM_SAMPLE_F32LE
API10的音频C接口native_audiostream_base.h 文件中,在OH_AudioStream_SampleFormat枚举中删除了AUDIOSTREAM_SAMPLE_F32LE枚举值。
**变更影响**
对于已发布的C接口,可能影响三方应用的兼容性。如果开发者使用AUDIOSTREAM_SAMPLE_F32LE会有兼容性问题。
**关键的接口/组件变更**
修改前
```C
typedef enum {
AUDIOSTREAM_SAMPLE_U8 = 0,
AUDIOSTREAM_SAMPLE_S16LE = 1,
AUDIOSTREAM_SAMPLE_S24LE = 2,
AUDIOSTREAM_SAMPLE_S32LE = 3,
AUDIOSTREAM_SAMPLE_F32LE = 4,
} OH_AudioStream_SampleFormat;
```
修改后
```C
typedef enum {
/**
* Unsigned 8 format.
*/
AUDIOSTREAM_SAMPLE_U8 = 0,
/**
* Signed 16 bit integer, little endian.
*/
AUDIOSTREAM_SAMPLE_S16LE = 1,
/**
* Signed 24 bit integer, little endian.
*/
AUDIOSTREAM_SAMPLE_S24LE = 2,
/**
* Signed 32 bit integer, little endian.
*/
AUDIOSTREAM_SAMPLE_S32LE = 3,
} OH_AudioStream_SampleFormat;
```
**适配指导**
修改后用户不能再设置采样格式为AUDIOSTREAM_SAMPLE_F32LE枚举值。
## cl.multimedia.4 getAudioEffectInfoArray接口入参变更,删除Content type入参
对于getAudioEffectInfoArray,适配4.0.9.2修改,删除Content type入参。
**变更影响**
对于已发布的js接口,可能影响三方应用的兼容性。
**关键的接口/组件变更**
修改前的接口原型:
```js
getAudioEffectInfoArray(content: ContentType, usage: StreamUsage, callback: AsyncCallback<AudioEffectInfoArray>): void;
getAudioEffectInfoArray(content: ContentType, usage: StreamUsage): Promise<AudioEffectInfoArray>;
```
修改后的接口原型:
```js
getAudioEffectInfoArray(usage: StreamUsage, callback: AsyncCallback<AudioEffectInfoArray>): void;
getAudioEffectInfoArray(usage: StreamUsage): Promise<AudioEffectInfoArray>;
```
**适配指导**
修改后用户调用该接口时,只需要传入StreamUsage入参,对于已经适配的用户,直接删去ContentType type入参即可。
## cl.multimedia.5 播放功能接口变更
删除音轨切换相关接口。
**变更影响**
删除音轨切换相关接口,相关接口不可使用。
**关键的接口/组件变更**
删除接口如下:
| 类名 | 删除接口声明 |
| -------- | -------- |
| Media.Core | MD_KEY_LANGUAGE |
| Media.AVPlayer | selectTrack(index:&nbsp;number):&nbsp;void |
| Media.AVPlayer | deselectTrack(index:&nbsp;number):&nbsp;void |
| Media.AVPlayer | getCurrentTrack(trackType:&nbsp;MediaType,&nbsp;callback:&nbsp;AsyncCallback&lt;number&gt;):&nbsp;void |
| Media.AVPlayer | getCurrentTrack(trackType:&nbsp;MediaType):&nbsp;Promise&lt;number&gt; |
| Media.AVPlayer | on(type:&nbsp;'trackChange',&nbsp;callback:&nbsp;(index:&nbsp;number,&nbsp;isSelect:&nbsp;boolean)&nbsp;=&gt;&nbsp;void):&nbsp;void; |
| Media.AVPlayer | off(type:&nbsp;'trackChange'):&nbsp;void |
# 主题框架-锁屏管理Changelog
## cl.screenlock.1 代码实例名称变更
锁屏管理的包名为'\@ohos.screenLock',在导入时,使用的代码实例应为screenLock,而不是screenlock。
**变更影响**
无。
**关键的接口/组件变更**
修改前的接口调用:
```js
screenlock.isLocked();
screenlock.unlock();
screenlock.lock();
screenlock.onSystemEvent(event=>{});
screenlock.sendScreenLockEvent('unlockScreenResult', 0);
screenlock.isScreenLocked()
screenlock.isSecureMode();
screenlock.unlockScreen();
```
修改后的接口调用:
```js
screenLock.isLocked();
screenLock.unlock();
screenLock.lock();
screenLock.onSystemEvent(event=>{});
screenLock.sendScreenLockEvent('unlockScreenResult', 0);
screenLock.isScreenLocked()
screenLock.isSecureMode();
screenLock.unlockScreen();
```
**适配指导**
导入时使用screenLock,例如::
修改前
```js
import screenlock from '@ohos.screenLock';
```
修改后
```js
import screenLock from '@ohos.screenLock';
```
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册