diff --git a/zh-cn/application-dev/faqs/Readme-CN.md b/zh-cn/application-dev/faqs/Readme-CN.md index 549b7bc2a8f3880a58b91e6e81bb5fa3ced80c50..8e60a76b28e1270a53e044fbddc5b403499e03e8 100644 --- a/zh-cn/application-dev/faqs/Readme-CN.md +++ b/zh-cn/application-dev/faqs/Readme-CN.md @@ -1,13 +1,20 @@ # 常见问题 +- [开发语言常见问题](faqs-language.md) - [Ability框架开发常见问题](faqs-ability.md) +- [应用程序包管理开发常见问题](faqs-bundle.md) +- [ArkUI组件(ArkTS)开发常见问题](faqs-ui-ets.md) +- [ArkUI Web组件(ArkTS)开发常见问题](faqs-web-arkts.md) - [UI框架(JS)开发常见问题](faqs-ui-js.md) -- [UI框架(ArkTS)开发常见问题](faqs-ui-ets.md) +- [公共事件与通知开发常见问题](faqs-event-notification.md) - [图形图像开发常见问题](faqs-graphics.md) - [文件管理开发常见问题](faqs-file-management.md) +- [媒体开发常见问题](faqs-media.md) - [网络与连接开发常见问题](faqs-connectivity.md) - [数据管理开发常见问题](faqs-data-management.md) - [设备管理开发常见问题](faqs-device-management.md) +- [DFX开发常见问题](faqs-dfx.md) +- [国际化开发常见问题](faqs-international.md) - [Native API使用常见问题](faqs-native.md) - [三四方库使用常见问题](faqs-third-party-library.md) - [IDE使用常见问题](faqs-ide.md) diff --git a/zh-cn/application-dev/faqs/faqs-ability.md b/zh-cn/application-dev/faqs/faqs-ability.md index ffc4e0123da0ff228305bee962807bd279193acd..de4a7106e7f80f5ea921ae7263bbb7ddcfd6eba7 100644 --- a/zh-cn/application-dev/faqs/faqs-ability.md +++ b/zh-cn/application-dev/faqs/faqs-ability.md @@ -1,16 +1,14 @@ # Ability框架开发常见问题 - - ## Stage模型中是否有类似FA模型的DataAbility的开发指导文档 适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 Stage模型中DataShareExtensionAbility提供了向其他应用共享以及管理其数据的方法。 -参考文档:[数据共享开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/database-datashare-guidelines.md) +参考文档:[数据共享开发指导](../database/database-datashare-guidelines.md) -## 拉起Ability为什么在界面上没反应? +## 拉起Ability在界面上没反应 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 @@ -22,11 +20,37 @@ Stage模型中DataShareExtensionAbility提供了向其他应用共享以及管 参考文档:[OpenHarmony版本转测试信息](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md) -## 调用方法的时候,如何解决方法内部的this变成undefined? +## 如何将Ability的UI界面设置成透明 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +将最上层容器组件背景色设置为透明,然后通过设置XComponent组件的opacity属性值为0.01来实现。 + + 示例: + +``` +build() { + Stack() { + XComponent({ + id: 'componentId', + type: 'surface', + }) + .width('100%') + .height('100%') + .opacity(0.01) + // 页面内容 + } + .width('100%') + .height('100%') + .backgroundColor('rgba(255,255,255, 0)') +} +``` + +## 调用方法的时候,如何解决方法内部的this变成undefined 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 -方式一:在调用方法的时候加上.bind(this); +方式一:在调用方法的时候加上.bind(this)。 方式二:使用箭头函数。 @@ -36,10 +60,10 @@ Stage模型中DataShareExtensionAbility提供了向其他应用共享以及管 Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。 -参考文档:[Stage模型配置文件](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/stage-structure.md) +参考文档:[Stage模型配置文件](../quick-start/stage-structure.md) + +示例: - 示例: - ``` { "module": { @@ -59,4 +83,138 @@ Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abil 使用Ability的onConfigurationUpdated回调实现,系统语言、颜色模式以及Display相关的参数,比如方向、Density,发生变化时触发该回调。 -参考文档:[Ability开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/stage-ability.md) +参考文档:[Ability开发指导](../ability/stage-ability.md) + +## Stage模型是否推荐用globalThis去获取Context + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +不推荐,Stage模型使用globalThis去获取Context是错误的使用方式。在Stage模型中,整个应用进程共用一个js虚拟机实例,其中可以运行多个Ability实例,共用一个global对象。在同一个js虚拟机内的不同的Ability中使用globalThis获取Context,存在被覆盖从而发生错误的风险。 + +推荐使用方式参考:[Stage模型和Context详细介绍](../ability/context-userguide.md#stage%E6%A8%A1%E5%9E%8B%E5%92%8Ccontext%E8%AF%A6%E7%BB%86%E4%BB%8B%E7%BB%8D)。 + +## 如何在应用A中去获取应用B的Hap包的安装路径 + +适用于:OpenHarmony SDK 3..0以上版本, API9 Stage模型 + +首先需要申请系统权限,具体参看文档:[自动化签名](https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-auto-configuring-signature-information-0000001271659465)。导入bundle模块,通过调用bundle.getApplicationInfo()接口,通过包名获取应用信息。然后通过application.moduleSourceDirs获取应用存储路径。 + +## 调用方使用startAbilityForResult,被调用方如何返回数据 + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +被调用方使用AbilityContext.terminateSelfWithResult方法,销毁被调用方ability,传递参数给startAbilityForResult回调函数,具体用法请参考[AbilityContext](../reference/apis/js-apis-ability-context.md#abilitycontextterminateselfwithresult) + +## FA卡片上架后在用户的服务中心展示时可否触发生命周期,从而实现用户没有打开过FA应用的情况下获取到用户的登录信息? + +适用于:OpenHarmony SDK 3.2.5.5版本, API8 FA模型 + +服务卡片在添加卡片后就触发了oncreat()生命周期,在不启用app的情况下也可以显示相关的用户信息-静默登录,但服务卡片目前要在app安装之后手动添加。 + +## 如何获取context + +适用于:OpenHarmony SDK 3.2.7.5版本, API9 Stage模型 + +在MainAbility.ts文件中可以直接使用this.context获取context,在组件页面中可以使用getContext(this)获取context。 + +## 访问控制管理模块abilityAccessCtrl中grantUserGrantedPermission方法在API8语法校验提示未定义 + +适用于:OpenHarmony SDK 3.0版本, API8 FA模型 + +当前SDK有fullSDK和publicSDK两个版本,IDE默认下载的是publicSDK。其中,publicSDK版本不会包含系统API,如果要用系统API,需要使用fullSDK。具体参考[full-SDK替换指南](../quick-start/full-sdk-switch-guide.md)。 + +## public sdk支持哪几种ExtensionAbility(ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility) + +适用于:OpenHarmony SDK 3.2.5.6版本, API9 Stage模型 + +上述ExtensionAbility 中,public sdk 仅可以使用FormExtensionAbility。ServiceExtensionAbility和DataShareExtensionAbility 为系统接口,需要使用full sdk。 + +Public SDK : 面向应用开发者提供,不包含需要使用系统权限的系统接口。 + +Full SDK : 面向OEM厂商提供,包含了需要使用系统权限的系统接口。 + +## 服务卡片无法循环播放gif图 + +适用于:OpenHarmony SDK 3.2.5.6版本, API9 Stage模型 + +目前暂不支持播放GIF图片。 + +## 如何通过卡片点击实现业务登录场景 + +适用于:OpenHarmony SDK 3.2.5.5版本, API9 Stage模型 + +可以通过点击卡片拉起响应的Ability后,通过Ability来实现业务登录场景。 + +## 如何跳转到设置中应用详情页面。 + +使用于:OpenHarmony SDK 3.2.6.5版本 + +参考如下代码实现,示例: + + +``` +this.context.startAbility( +{ + action: "action.settings.app.info", + parameters: { "settingsParamBundleName": "your app bundlename" } +}) +``` + +## 如何监听屏幕旋转 + +使用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +参考如下代码实现,示例: + + +``` +let listener = mediaquery.matchMediaSync('(orientation: landscape)') +onPortrait(mediaQueryResult) { +if (mediaQueryResult.matches) { +// do something here + } else { +// do something here + } +} +listener.on('change', onPortrait) +``` + +## 如何控制checkbox选中切换过程中阴影背景的大小 + +使用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +设置checkbox组件padding属性,可控制阴影大小 + +## 如何设置卡片背景为透明 + +适用:OpenHarmony SDK 3.2.5.5版本 + +1. 在卡片根目录widget新建widget/resources/styles/default.json文件 + +2. 在default.json中书写如下代码: + +``` +{ + "style": { + "app_background": "#00000000" + } +} +``` + +## FA卡片如何的传参和接参 + +适用:OpenHarmony SDK 3.2.5.5版本 + +使用featureAbility.getWant()和featureAbility.getContext()在json文件中router跳转发送数据,在js文件中用featureAblity方法接收 + +## router.disableAlertBeforeBackPage和router.enableAlertBeforeBackPage怎么触发 + +适用:OpenHarmony SDK 3.2.5.5版本 + +需要满足两个条件 + +1. router.disableAlertBeforeBackPage和router.enableAlertBeforeBackPage类似一个开关,disableAlertBeforeBackPage是返回上一级页面时关闭弹窗提示,enableAlertBeforeBackPage是打开弹窗提示,默认是关闭的,当你需要使用时,首先要在一个函数里面开启功能,然后再执行跳转 + +2. 必须要使用系统的返回按键才能触发效果。 + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-bundle.md b/zh-cn/application-dev/faqs/faqs-bundle.md new file mode 100644 index 0000000000000000000000000000000000000000..1a6dd935511aa94a8ce19e937584ce0cd9ac3eb2 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-bundle.md @@ -0,0 +1,33 @@ +# 应用程序包管理开发常见问题 + +## 如何获取应用配置的versionCode和versionName + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +通过\@ohos.bundle模块buniple.getBundleInfo()接口获取包信息bundleInfo,然后分别通过bundleInfo.versionCode、bundleInfo.versionName + +参考文档:[Bundle模块](../reference/apis/js-apis-Bundle.md#bundlegetbundleinfo) + +## 如何获取应用自身的bundleName + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +通过可以context.abilityInfo.bundleName获取。 + +参考文档:[AbilityContext](../reference/apis/js-apis-ability-context.md#%E5%B1%9E%E6%80%A7)、[AbilityInfo](../reference/apis/js-apis-bundle-AbilityInfo.md) + +## 如何获取应用图标 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +通过\@ohos.bundle模块 getAbilityIcon 接口获取,需要配置权限:ohos.permission.GET_BUNDLE_INFO。 + +参考文档:[Bundle模块](../reference/apis/js-apis-Bundle.md#bundlegetbundleinfo) + +## 如何判断某个应用是否为系统应用 + +使用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +使用bundle模块的getApplicationInfo接口获取待检验的应用的ApplicaitonInfo,根据ApplicaitonInfo中systemApp字段判断,若为true,则是系统应用,否则为非系统应用。 + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-connectivity.md b/zh-cn/application-dev/faqs/faqs-connectivity.md index baa3514733cb5f61627b7b90362bafac9fa9f16d..70ae807faed016ac0758f9d847d1763469295a2f 100644 --- a/zh-cn/application-dev/faqs/faqs-connectivity.md +++ b/zh-cn/application-dev/faqs/faqs-connectivity.md @@ -1,8 +1,6 @@ # 网络与连接开发常见问题 - - -## Post请求时,extraData支持哪几种的数据格式? +## 网络请求中extraData支持哪几种的数据格式 适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型 @@ -14,13 +12,13 @@ extraData代表发送请求的额外数据,支持如下数据: 3. 开发者传入string对象,开发者需要自行编码,将编码后的string传入。 -## 如何理解http请求的错误码28? +## 如何理解http请求的错误码28 适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 错误码28代表CURLE_OPERATION_TIMEDOUT,操作超时。网络请求底层使用libcurl库,更多错误码可以查看相应文档。 -参考文档:[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)和[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) +参考文档:[开发指南](../reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)和[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) ## \@ohos.net.http.d.ts的response错误码返回6是什么意思? @@ -28,4 +26,81 @@ extraData代表发送请求的额外数据,支持如下数据: 6表示地址无法解析主机,可以尝试ping一下request中的url,确认是否可以ping通。 -更多错误码参考[Response常用错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)或者[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) +更多错误码参考[Response常用错误码](../reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)或者[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) + +## 调用camera拍摄的照片怎么上传到服务器 + +适用于:所有版本 + +具体开发参考文档:[上传下载](https://gitee.com/openharmony/app_samples/tree/master/Network/UploadDownload) + +## OpenHarmony的http接口如何设置cookie + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +HttpRequestOptions中的header是一个Object类型,可以直接在header里设置cookie,具体开发参考文档:[数据请求](../reference/apis/js-apis-http.md#request)。 + +## http请求的官方示例代码里的extra data部分怎么写 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +1. 鼠标移到extraData, ctrl+鼠标左键,跳转到sdk中,里面有关于extraData的传参说明。可以发现文档中对extraData的定义是这样的 extraData?: string | Object,也就是extraData支持string 和 Object两种类型。 + +2. 这两种写法都可以实现: + a.extraData:"data to send"; + b. extraData:{ data:"data to send", }, + +## 设备连接wifi后,如何获取当前设备的IP地址 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +使用wifi模块获取ipInfo,然后转换为IP常用格式,注意wifi.getIpInfo()接口需要权限 ohos.permission.GET_WIFI_INFO。 + +示例: + + +``` +import wifi from '@ohos.wifi' +@Entry +@Component +struct Page { + @State ip: string = '点击获取ip' + + resolveIP(ip) { + if (ip < 0 || ip > 0xFFFFFFFF) { + throw ("The number is not normal!"); + } + return (ip >>> 24) + "." + (ip >> 16 & 0xFF) + "." + (ip >> 8 & 0xFF) + "." + (ip & 0xFF); + } + + build() { + Row() { + Column() { + Text(this.ip) + .fontSize(50) + .fontWeight(FontWeight.Bold) + .onClick(()=>{ + this.ip = this.resolveIP(wifi.getIpInfo().ipAddress) + }) + } + .width('100%') + } + .height('100%') + } +} +``` + +## 如何判断当前是否有网络 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +通过如下hasDefaultNet接口判断是否有网络,注意需要申请 ohos.permission.GET_NETWORK_INFO 权限 + + +``` +connection.hasDefaultNet().then((has)=> { + console.log("hasDefaultNet " + JSON.stringify(has)) +}) +``` + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-data-management.md b/zh-cn/application-dev/faqs/faqs-data-management.md index 99893fe1a8388fe32310b17dea4561e162b3e754..34cbf014a6c03b27112f004bfb62a76fbb08f74f 100644 --- a/zh-cn/application-dev/faqs/faqs-data-management.md +++ b/zh-cn/application-dev/faqs/faqs-data-management.md @@ -16,6 +16,60 @@ PixelMap应该被转换成相应的ArrayBuffer再放进数据库。 示例: -```shell + +``` hdc_std file recv /data/app/el2/100/database/com.xxxx.xxxx/entry/db/test.db ./test.db ``` + +## 数据库在系统层面是否有锁机制,开发过程中是否需要关系数据库加锁问题 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +系统提供的分布式数据服务、关系型数据库和首选项均有锁机制,开发者无需关注。 + +## 数据库中加事务与不加事务的区别? + +适用于:所有版本 + +在rdb中进行数据操作时,有可能会导致操作失败,出现意料之外的情况。当对数据库进行大量操作时,此种情况会导致部分数据操作失败,部分操作成功,导致部分数据丢失,可能会导致应用程序发生异常甚至崩溃。加事务后,则会将某一批操作组合成一个整体,要么同时成功,要么同时失败,则不会导致强关联的数据部分缺失的情况出现。 + +## 关系型数据库rdb支持哪些数据类型? + +适用于:OpenHarmony SDK 3.0版本以上,API9 Stage模型 + +关系型数据库rdb支持的数据类型有:number、string、boolean。其中number为数组类型,支持Double,Long,Float,Int,Int64,最大精度为十进制17位数字。 + +## 如何查看数据库db文件 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +1. 执行 hdc_std shell 命令进入系统 + +2. 找到绝对路径:/data/app/el2/<userId默认是100>/database/<bundleName> + 或找到沙箱路径: + + a. 执行 ps -ef | grep hapName 命令找到对应应用的进程ID, + + b. 数据库沙箱路径为:/proc/<应用进程ID>/root/data/storage/el2/database/。 + +3. 在数据库的绝对路径或者沙箱路径下执行 find ./ -name "\*.db" 即可找到数据库文件。 + +## 如何存储长文本数据 + +适用于:OpenHarmony SDK 3.2.5.5版本,API 9 + +- 首选项Preferences数据中的Value为string类型时最大支持8192字节。 + +- 分布式数据管理KV数据模型Value最大支持4M。 + +参考文档:[首选项概述](../database/database-preference-overview.md)、[分布式数据服务概述](../database/database-mdds-overview.md) + +## Stage模型数据共享DataShare开发 + +适用于:OpenHarmony SDK 3.2.5.5版本,API 9 + +Stage模型DataShare不可与FA模型DataAbility混用,连接的服务端应用需使用DataShareExtensionAbility实现。 + +参考文档:[数据共享开发指导](../database/database-datashare-guidelines.md) + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-development-board.md b/zh-cn/application-dev/faqs/faqs-development-board.md index 3ab491c0dc6b42b0ca2e91e7a55965f51f9d34ad..9cb08327acb47e58f2c5172b4c7abc9fddc92da1 100644 --- a/zh-cn/application-dev/faqs/faqs-development-board.md +++ b/zh-cn/application-dev/faqs/faqs-development-board.md @@ -27,6 +27,7 @@ 适用于:IDE 3.0.0.991 1. 给预览器新建Profile + ![zh-cn_image_0000001361254285](figures/zh-cn_image_0000001361254285.png) 2. 新建Profile的具体参数可参考如下配置: @@ -49,3 +50,4 @@ 连接需要认证的网络后,用浏览器打开任意网址就可以进入认证页面。 如果开发板上没有浏览器,可以安装[浏览器Sample应用](https://gitee.com/openharmony/app_samples/tree/master/device/Browser)。 + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-device-management.md b/zh-cn/application-dev/faqs/faqs-device-management.md index 7a1ca35602e3be567b3afeceb91054f86cf9f0cb..bf7e0c554ff06ce77f78ccde357af7a589266e62 100644 --- a/zh-cn/application-dev/faqs/faqs-device-management.md +++ b/zh-cn/application-dev/faqs/faqs-device-management.md @@ -1,16 +1,14 @@ # 设备管理开发常见问题 - - ## 如何获取设备的dpi值 适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 -导入@ohos.display包,通过getDefaultDisplay方法获取。 +导入\@ohos.display包,通过getDefaultDisplay方法获取。 示例: - + ``` import display from '@ohos.display'; display.getDefaultDisplay((err, data) => { @@ -22,3 +20,32 @@ display.getDefaultDisplay((err, data) => { console.info('Test densityDPI:' + JSON.stringify(data.densityDPI)); }); ``` + +## 如何获取当前运行设备类型(穿戴、平板等) + +适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 + +导入\@ohos.deviceInfo包,然后通过deviceInfo.deviceType获取设备类型。 + +参考文档:[设备信息](../reference/apis/js-apis-device-info.md) + +## 如何获取设备系统版本 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过[deviceInfo](../reference/apis/js-apis-device-info.md)对象的osFullName属性获取设备系统版本。 + +## OpenHarmony设备如何获取UDID? + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +1、如果想获取连接设备的udid,可使用 hdc shell bm get --udid命令; + +2、如果想在代码中获得,参考文档 [udid](../reference/apis/js-apis-device-info.md) 。 + +## 开发快捷键功能 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +快捷键功能开发请使用组合按键api,具体可参考[组合按键(InputConsumer)](../reference/apis/js-apis-inputconsumer.md) + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-dfx.md b/zh-cn/application-dev/faqs/faqs-dfx.md new file mode 100644 index 0000000000000000000000000000000000000000..7a61473320168cb5b17a6c2854ff6c1e907a1b2f --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-dfx.md @@ -0,0 +1,55 @@ +# DFX开发常见问题 + +## 程序打开直接崩溃了,如何定位问题 + +使用于:OpenHarmony SDK 3.2.5.5版本 + +1.通过业务日志打印,定位崩溃的代码位置。 + +2.通过Crash文件查看报错信息,Crash文件路径是:/data/log/faultlog/faultlogger/。 + +## UiTest测试框架无法获取控件问题 + +使用于:OpenHarmony SDK 3.2.5.5版本 + +检查系统配置项 persist.ace.testmode.enabled 是开启。 + +通过hdc_std shell param get persist.ace.testmode.enabled 查看,若配置项为0, + +可通过命令hdc_std shell param set persist.ace.testmode.enabled 1 开启配置。 + + +## C++代码中hilog的格式参数类型为%d或者%s时,日志打印为何显示private + +直接使用%d、%s等格式化参数时,标准系统默认使用private替换真实数据进行打印,防止数据泄露。如果需要打印出真实数据,需要使用%{public}d替换%d或者%{public}s替换%s。 + +## 如何解决hilog.debug日志无法打印 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过hdc_std命令 hdc_std shell hilog -b D开启调试开关 + +## 应用如何打印日志是使用hilog还是console,hilog接口参数domain的设置范围是什么 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +推荐使用[hilog日志系统](../reference/apis/js-apis-hilog.md)进行日志打印,接口参数domain的设置范围可以参考[开发指南](../reference/apis/js-apis-hilog.md#hilogisloggable)。 + +## hilog日志打印长度限制是多少,是否可以配置 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +日志打印的长度限制为1024个字符,该长度不能配置。 + +## hilog接口的tag参数是否支持用空格隔开的多个字符串 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +不支持。 + +## hilog中没有使用{public}标识的数据,如何打印真实数据 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +使用命令:hdc_std shell hilog -p off + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-event-notification.md b/zh-cn/application-dev/faqs/faqs-event-notification.md new file mode 100644 index 0000000000000000000000000000000000000000..3a24c9932f390125c1f72fad4841485da0ffc1cc --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-event-notification.md @@ -0,0 +1,49 @@ +# 公共事件与通知开发常见问题 + +## emitter数据大小限制 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +emitter数据大小限制不超过10240。 + +## 如何实现点击Notification通知打开对应App + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过配置Notification.publish发布通知接口的参数NotificationRequest中wantAgent属性实现 + +参考文档:[Notification](../reference/apis/js-apis-notification.md#notificationpublish)、[WantAgent](../reference/apis/js-apis-wantAgent.md) + +示例: + +``` +import WantAgent from '@ohos.wantAgent'; + +async function publishNotification() { + let wantAgentInfo = { + wants: [ + { + bundleName: "com.example.notification", + abilityName: "MainAbility", + } + ], + operationType: WantAgent.OperationType.START_ABILITIES, + requestCode: 0, + } + const wantAgent = await WantAgent.getWantAgent(wantAgentInfo) + let contentType = Notification.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT; + await Notification.publish({ + content: { + contentType: contentType, + normal: { + title: "测试标题", + text: "测试内容", + } + }, + id: 1, + wantAgent: wantAgent + }) + prompt.showToast({ message: "发送成功" }) +} +``` + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-file-management.md b/zh-cn/application-dev/faqs/faqs-file-management.md index a6caa4a7064430e4b0c2a2fb49523a8a433ec564..3f96dd3a98da89cf07518a831e4d6bc6184c49ef 100644 --- a/zh-cn/application-dev/faqs/faqs-file-management.md +++ b/zh-cn/application-dev/faqs/faqs-file-management.md @@ -1,6 +1,63 @@ # 文件管理开发常见问题 +## fileio.rmdir是递归删除吗? +适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型 + +是递归删除。 + + +## 如何实现如果文件不存在则创建文件 + +适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型 + +可以通过调用函数fileio.open(filePath, 0o100, 0o666)来实现,第二个参数0o100表示若文件不存在,则创建文件。使用该选项时必须指定第三个参数 mode。 + +## 使用fileio进行文件复制,传入沙箱路径报错call fail callback fail, code: 202, data: json arguments illegal) + +适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型 + +使用fileio模块进行文件复制时,文件路径前缀中不能以“file:///”开头。 + +## fileIo将数据写入流文件writeSync接口,length传参问题 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +一个中文字符length为3,英文字符为1,当前buffer为string类型时,length项需要开发者手动换算;如果要写入全部内容,可直接忽略length项,length长度超长时会导致接口报错。 + +## 如何读取应用沙箱之外的文件 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +fileio中接口入参为path时只能是从context获取到的本应用沙箱路径,若要访问其他路径的数据,如公共数据图片视频等,需要通过数据所有者打开文件返回fd进行操作。 + +比如向mediaLibrary请求读取/写入某文件,然后通过打开代表特定文件的URI后返回的fd进行操作,操作步骤如下: + +1. 通过媒体查询获取文件fileAsset对象; + +2. 通过fileAsset.open方法返回的fd; + +3. 将fd作为fileIo接口参数进行文件读写操作; + +## 如何解决文件的中文内容乱码 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +读取文件内容的buffer数据后,通过util.TextDecoder对文件内容进行解码。 + +示例: + +``` +import util from '@ohos.util' +async function readFile(path) { + let stream = fileio.createStreamSync(path, "r+"); + let readOut = await stream.read(new ArrayBuffer(4096)); + let textDecoder = new util.TextDecoder("utf-8", { ignoreBOM: true }); + let buffer = new Uint8Array(readOut.buffer) + let readString = textDecoder.decode(buffer, { stream: false }); + console.log("[Demo] 读取的文件内容:" + readString); +} +``` ## 调用媒体库getAlbums方法,没有收到返回,也没有捕获到异常是为什么 @@ -34,3 +91,23 @@ getAlbums方法需要权限:ohos.permission.READ_MEDIA,从[OpenHarmony权限 }) } ``` + +## 如何解决多次通过媒体库FetchFileResult获取文件应用崩溃 + +适用于:OpenHarmonySDK 3.2.5.5版本,API9 Stage模型 + +通过FetchFileResult.close()方法,在FetchFileResult对象每次调用完,释放并使其失效。 + +## 在Stage模型下调用mediaLibrary.getMediaLibrary()接口,IDE报错 + +适用于:OpenHarmonySDK 3.25.5版本,API9 Stage模型 + +Stage模型下,获取媒体库实例应该调用mediaLibrary.getMediaLibrary(context: Context)。 + +## 调用mediaLibrary.getFileAssets()接口返回的内容如何排序 + +适用于:OpenHarmonySDK 3.2.5.5版本,API9 Stage模型 + +通过[MediaFetchOptions](../reference/apis/js-apis-medialibrary.md#mediafetchoptions7)对象参数里面的order属性进行排序。 + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-graphics.md b/zh-cn/application-dev/faqs/faqs-graphics.md index f72711aefb13db79150b749d9a3e6ed470597d0c..e477c759a33339ba7c66c4602a135247e16fe679 100644 --- a/zh-cn/application-dev/faqs/faqs-graphics.md +++ b/zh-cn/application-dev/faqs/faqs-graphics.md @@ -1,7 +1,5 @@ # 图形图像开发常见问题 - - ## 调用window实例的setSystemBarProperties接口时,设置isStatusBarLightIcon和isNavigationBarLightIcon属性不生效 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 @@ -13,3 +11,81 @@ 适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 导入\@ohos.window模块,开发者可以使用window.setSystemBarProperties()接口设置状态栏样式属性,达到自定义样式的效果。 + +## 如何隐藏状态栏,实现沉浸式效果。 + +适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型 + +1. 可以在onWindowStageCreate方法获取windowClass对象。 + + ``` + onWindowStageCreate(windowStage) { + // Main window is created, set main page for this ability + console.log("[Demo] MainAbility onWindowStageCreate") + windowStage.getMainWindow((err, data) => { + if (err.code) { + console.error('Failed to obtain the main window.') + return; + } + // 获取到窗口对象 + globalThis.windowClass = data; + }) + } + ``` + +2. 设置窗口全屏,隐藏状态栏。 + + ``` + globalThis.windowClass.setFullScreen(isFullScreen, (err, data) => { + if (err.code) { + console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err)); + return; + } + console.info('Succeeded in enabling the full-screen mode. Data: ' + JSON.stringify(data)); + }); + ``` + +## 如何获取窗口的宽高信息 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +通过\@ohos.window模块,可以使用getProperties()接口获取窗口属性,然后通过窗口属性的windowRect获取窗口宽高信息 + +示例: + + +``` +let promise = windowClass.getProperties(); +promise.then((data)=> { + console.info('Succeeded in obtaining the window properties. Data: ' + JSON.stringify(data.windowRect)); +}).catch((err)=>{ + console.error('Failed to obtain the window properties. Cause: ' + JSON.stringify(err)); +}); +``` + +## 如何设置系统状态栏颜色 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +参考如下方式实现,示例: + + +``` +window.getTopWindow(globalThis.mainContext).then(win => { + var systemBarProperties = { + statusBarColor: '#19B6FF', // 状态栏背景颜色 + navigationBarColor: '#19B6FF', // 导航栏背景颜色 + isStatusBarLightIcon: false, // 状态栏图标是否为高亮状态。 + isNavigationBarLightIcon: true, // 导航栏图标是否为高亮状态。 + statusBarContentColor: '#0D0500', // 状态栏文字颜色 + navigationBarContentColor: '#FFA500' // 导航栏文字颜色 + }; + win.setSystemBarProperties(systemBarProperties).catch(err => { + INDEX_LOGGER.info(`set System Bar Properties failed:${err}`) + }) +}) +.catch(err => { + INDEX_LOGGER.info(`get top window failed:${err}`) +}) +``` + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-hdc-std.md b/zh-cn/application-dev/faqs/faqs-hdc-std.md index 5caf5db008a993bca4cbeb8e49f0e0495d716f05..cc59cedda4c59675291082d4bf347907d19a5442 100644 --- a/zh-cn/application-dev/faqs/faqs-hdc-std.md +++ b/zh-cn/application-dev/faqs/faqs-hdc-std.md @@ -1,7 +1,5 @@ # hdc_std命令使用常见问题 - - ## 日志的常用命令 适用于:OpenHarmony SDK 3.2.2.5版本 @@ -26,19 +24,7 @@ 执行完命令后重启DevEco Studio。 -## 应用如何打印日志是使用hilog还是console,hilog接口参数domain的设置范围是什么? - -适用于:OpenHarmony SDK 3.2.2.5版本 - -推荐使用[hilog日志系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hilog.md)进行日志打印,接口参数domain的设置范围可以参考[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hilog.md#hilogisloggable)。 - -## hilog日志打印长度限制是多少,是否可以配置 - -适用于:OpenHarmony SDK 3.2.2.5版本 - -日志打印的长度限制为1024个字符,该长度不能配置。 - -## 为什么有时候直接用IDE安装HAP包到开发板上无法打开? +## 用IDE安装HAP包到开发板上无法打开 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 @@ -50,14 +36,53 @@ 可以使用hdc_std file send上传文件。 -## 如何让RK3568开发板不熄屏? +## 如何让RK3568开发板不熄屏 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 输入命令hdc_std shell "power-shell setmode 602" -## 如何通过命令启动Ability? +## 如何通过命令启动Ability 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 输入命令hdc_std shell aa start -a AbilityName -b bundleName -m moduleName + +## 如何修改开发板中文件目录为可读写权限 + +适用于:OpenHarmony SDK 3.2.5.6版本,API9 Stage模型 + +输入命令 hdc_std shell mount -o remount,rw / + +## 如何解决hdc_std file recv 使用报错:Unkonw file option -r + +适用于:OpenHarmony SDK 3.2.5.6版本,API9 Stage模型 + +1. 使用设备镜像或者同版本SDK中配套的hdc工具进行使用。 + +2. hdc工具指定的路径不要包含中文和空格。 + +## 如何使用命令卸载应用 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +输入命令hdc_std uninstall [-k] [package_name] + +## 如何查看系统是32位还是64位 + +适用于:OpenHarmony SDK 3.2.5.5版本 + +使用命令:hdc_std shell getconf LONG_BIT + +若返回64则为64位系统,否则为32位系统。 + +## 如何查看组件树结构 + +适用于:OpenHarmony SDK 3.2.5.5版本 + +1. 使用命令hdc_std shell 进入命令行界面。 + +2. 输入 aa dump -a 找到abilityID。 + +3. aa dump -i [abilityID] -c -render 查看组件树。 + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-ide.md b/zh-cn/application-dev/faqs/faqs-ide.md index c9b32df07511cccbb9c1607d5bb121b635372457..ae44f51ed4cc29b12acac31e812683678ef8be52 100644 --- a/zh-cn/application-dev/faqs/faqs-ide.md +++ b/zh-cn/application-dev/faqs/faqs-ide.md @@ -1,8 +1,6 @@ # IDE使用常见问题 - - -## 如何解决报错“npm ERR! code SELF_SIGNED_CERT_IN_CHAIN”? +## 如何解决报错“npm ERR! code SELF_SIGNED_CERT_IN_CHAIN” 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 @@ -10,10 +8,74 @@ 2. 在Dev Eco Studio terminal中执行npm install。 -## 手工更新DevEco的SDK后,编译HAP报错“Cannot find module 'xxx\ets\x.x.x.x\build-tools\ets-loader\node_modules\webpack\bin\webpack.js'” +## 手工更新DevEco的SDK后,编译HAP报错“Cannot find module 'xxx\ets\x.x.x.x\build-tools\ArkTS-loader\node_modules\webpack\bin\webpack.js'” 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 1. 到SDK的ets\x.x.x.x\build-tools\ets-loader目录下执行npm install; -2. 到SDK的js\x.x.x.x\build-tools\ace-loader目录下执行npm install。 完成步骤后重新编辑既可。 +2. 到SDK的js\x.x.x.x\build-tools\ace-loader目录下执行npm install。 完成步骤后重新编辑。 + +## 如何通过命令行打包HAP + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +方式一:运行hvigor assembleHap。 + +方式二:在工程的package.json的scripts中,定义构建任务脚本后,运行npm buildOhosHaps。“buildOhosHaps”字段可以自定义。 + + +``` +"scripts": { + "buildOhosHaps": "hvigor assembleHap" +}, +``` + +## DevEco创建新工程为什么选不到API9 + +适用于:DevEco Studio 3.0 Beta4 3.0.0.993(B06)版本 + +创建新工程的时候,首先要选择OpenHarmony页签再创建工程就可以选到API9。 + +## 下载时收不到回调且无法返回错误码 + +适用于:OpenHarmony所有版本 + +1. 重装hdc命令: hdc_std重裝 拉起 设备连接 + +2. 关闭日志限流 :hdc_std shell hilog -Q pidoff 打开" + +## IDE点击run按钮后,报错:error: unknow option. usage: aa start <options> + +适用于:OpenHarmony SDK 3.2.5.6版本,API9 Stage模型 + +报错原因:aa命令参数错误,执行打开应用操作报错。 + +有2种处理方法: + +1. 检查SDK版本和OS版本,确保SDK版本和OS版本一致。 + +2. 点击设备上app图标,手动启动app进行使用。 + +## IDE运行app报错:The hdc_std version of the SDK does not match the hdcd version of the device. + +适用于:OpenHarmony SDK 3.2.5.6版本,API9 Stage模型 + +hdc 和 hdcd版本不匹配 ,请更新IDE至Dev Eco 3.0.1.993及以上版本。 + +旧版本IDE检测不匹配会拦截安装,新版本IDE仅提醒不影响正常使用。 + +## 如何在OpenHarmony 的SDK中加入自定义的\*.d.ts文件 + +适用于:OpenHarmony SDK 3.1.7.7版本 , API8 FA模型 + +将dts文件命名为\@ohos.xxxx.d.ts , 放入SDK的路径中,重启IDE。 + +引入时会有代码提醒。 + +## 如何替换full-SDK + +适用于:OpenHarmony SDK 3.2.7.5版本 + +参考文档[full-SDK替换指南](../quick-start/full-sdk-switch-guide.md) + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-international.md b/zh-cn/application-dev/faqs/faqs-international.md new file mode 100644 index 0000000000000000000000000000000000000000..7b7cb4d62b7119e5bf998c85d30485543164b9c6 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-international.md @@ -0,0 +1,20 @@ +# 国际化开发常见问题 + +## AppScope中的资源如图片,文字等的引用方式是什么 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过$r('app.type.name')的形式来引用,type代表资源类型,如color,string,media等,name代表资源命名 + +## Resource类型转为string + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +Resource为string支持限定词目录使用this.context.resourceManager.getStringSync(\\$r('app.string.test').id),可以同步转换,不支持\$r('app.string.test', 2)方式。更多用法请参考[ResourceManager(资源管理)](../reference/apis/js-apis-resource-manager.md#getstringsync9) + +## form_config.json文件中使用$引用常量为什么不生效 + +适用于:OpenHarmony SDK 3.2.6.5, API9 Stage模型 + +form_config.json文件中不支持使用$引用常量。 + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-language.md b/zh-cn/application-dev/faqs/faqs-language.md new file mode 100644 index 0000000000000000000000000000000000000000..80ebc349c6d1cbf5e93bad3d130332fa5e31fc7f --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-language.md @@ -0,0 +1,288 @@ +# 开发语言常见问题 + +## TS语言在生成器函数中编译失败,有哪些使用限制 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +TS语言的使用在生成器函数中存在以下限制: + +- 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用; + +- 这些表达式中的任何一个都不能导致任何应用程序状态变量(\@State、\@Link、\@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为; + +- 生成器函数内部不能有局部变量。 + +上述限制都不适用于事件处理函数(例如onClick)的匿名函数实现。 + +错误示例: + + +``` +build() { + let a: number = 1 // invalid: variable declaration not allowed + Column() { + Text('Hello ${this.myName.toUpperCase()}') // ok. + ForEach(this.arr.reverse(), ..., ...) // invalid: Array.reverse modifies the @State array variable in place + } + buildSpecial() // invalid: no function calls + Text(this.calcTextValue()) // this function call is ok. +} +``` + +## 如何动态替换掉资源文件中的“%s”占位符 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +在应用中,通过"$r('app.string.xx')"的形式引用应用资源,$r的第二个参数可用于替换%s占位符。 + + 示例: + +``` +build() { + //do something + //引用的string资源,$r的第二个参数用于替换%s + Text($r('app.string.entry_desc','aaa')) + .fontSize(100) + .fontColor(Color.Black) + //do something +} +``` + +## 如何读取Resource中的xml文件并转化为String类型 + +适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型 + +1. 通过resourceManager的RawFile接口获取Uint8Array格式数据。 + +2. 通过String.fromCharCode将Uint8Array格式数据转化为String类型。快快快 + +参考文档:[资源管理](../reference/apis/js-apis-resource-manager.md) + +示例: + + +``` +resourceManager.getRawFile(path, (error, value) => { + if (error != null) { + console.log("error is " + error); + } else { + let rawFile = value; + let xml = String.fromCharCode.apply(null, rawFile) + } +}); +``` + +## 如何将Resource资源对象转成string类型 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +通过\@ohos.resourceManager模块 resourceManager.getString()方法获取字符串。 + +参考文档:[资源管理](../reference/apis/js-apis-resource-manager.md#getstring) + +## class全局静态变量无法使用的问题 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +Page和Ability打包后会对import的对象分别形成两个不同的闭包,即打包出两个Global对象。因此,所引用的静态变量并不是同一对象,所以无法通过class静态变量方式定义全局变量。建议使用AppStorage进行全局变量管理。 + +参考文档:[应用程序的数据存储](../ui/ts-application-states-appstorage.md) + +## Stage模型下如何获取资源 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +Stage模型支持了通过context获取resourceManager对象的方式,再调用其内部获取资源的接口,无需再导入包,此方式FA模型不适用。 + +示例: + + +``` +const context = getContext(this) as any +context + .resourceManager + .getString($r('app.string.entry_desc').id) + .then(value => { + this.message = value.toString() +}) +``` + +## 如何实现页面加载前从接口获取数据 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +aboutToAppear函数中使用异步接口获取页面数据,使用\@State修饰变量,数据获取完成后根据变量自动刷新页面。 + + +``` +@Entry +@Component +struct Test6Page { + // 数据获取成功,会自动刷新页面 + @State message: string = 'loading.....' + aboutToAppear(){ + // 模拟异步接口获取数据 + setTimeout(()=>{ + this.message = 'new msg' + },3000) + } + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} +``` + +## worker线程与主线程是否运行在相同的全局上下文中 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +worker线程与主线程不在同一个上下文中,它们使用数据通信的方式交互。 + +## OpenHarmony上url编码使用哪个接口 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +使用全局函数encodeURI进行编码,使用decodeURI进行解码。例如空格字符,编码后为%20。 + +## OpenHarmony有解析xml的接口吗 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +使用ConvertXML的convert接口可以将xml文本解析为JavaScript对象。参考文档:[convertxml API文档](../reference/apis/js-apis-convertxml.md) + +## 应用图标一多设置 + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +借助资源限定词能力,实现应用图标的一多配置,具体使用参考[资源使用](../key-features/multi-device-app-dev/resource-usage.md) + +## Stage模型资源配置文件string.json文件中支持配置占位符吗 + +适用于:OpenHarmony SDK3.2.6.3, API9 Stage模型 + +资源配置文件string.json文件本身不支持配置占位符,可以在对应的页面中通过定义变量,在实际组件使用Resources和变量拼接的方式达到实现占位符的同等效果。 + +## OpenHarmony的systemTime.getCurrentTime()接口和JS的new Date().getTime()有区别吗 + +适用于:OpenHarmony SDK3.2.6.3, API9 Stage模型 + +systemTime.getCurrentTime(false)和new Date().getTime()一样,都是返回1970年1月1日至今的毫秒数;systemTime.getCurrentTime(true)返回1970年1月1日至今的纳秒数。两种方式都是系统时间。 + +## \@BuilderParam装饰器,组件传参问题 + +适用于:OpenHarmony SDK3.2.6.5, API9 Stage模型 + +对\@BuilderParam修饰的属性进行赋值时不带参数(如:content: this.specificParam),则此属性的类型需定义成无返回值的函数(如:\@BuilderParam content: () => void);若带参数(如:callContent: this.specificParam1("111")),则此属性的类型需定义成any(如:\@BuilderParam callContent: any;),具体用法请参考[BuilderParam](../ui/ts-component-based-builder.md)。 + +## ArkTS如何把string转成byte数组 + +适用于:所有版本 + +参考如下代码实现,示例: + + +``` +function stringToByte(str) { + var bytes = new Array(); + var len,c; + len = str.length; + for(var i = 0;i= 0x010000 && c<= 0x10FFFF) { + bytes.push(((c>>18) & 0x07) | 0xf0); + bytes.push(((c>>12) & 0x3F) | 0x80); + bytes.push(((c>>6) & 0x3f) | 0x80); + bytes.push((c & 0x3F) | 0x80); + } else if(c >= 0x000800 && c<= 0x00FFF){ + bytes.push(((c>>12) & 0x07) | 0xf0); + bytes.push(((c>>6) & 0x3F) | 0x80); + bytes.push((c & 0x3F) | 0x80); + } else if(c >= 0x000800 && c<= 0x0007FF) { + bytes.push(((c>>6) & 0x3F) | 0x80); + bytes.push((c & 0x3F) | 0x80); + } else { + bytes.push(c & 0xFF) + } + } + return bytes; +} +``` + +## 创建woker时报错“Too many wokers,the number of worker exceeds the maximum”如何处理 + +使用于:OpenHarmony SDK 3.2.6.5版本 + +这是因为每个应用的worker上限为7个,因此在worker使用完成后需要通过termiate方法释放worker。参考[worker开发指南](../reference/apis/js-apis-worker.md#terminate)。 + +## OpenHarmony推荐的多线程解决方案是什么 + +使用于:OpenHarmony SDK 3.2.6.5版本 API9 Stage模型 + +OpenHarmony推荐使用worker来处理多线程场景。 + +参考文档:[启动一个worker](../reference/apis/js-apis-worker.md) + +## 使用\@Builder装饰包含自定义组件的方法与普通方法的区别是什么 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +\@Builder装饰的方法中使用了自定义组件,那么该方法每次被调用时,对应的自定义组件均会重新创建。 + +## 状态管理中\@Watch监听,数组内对象属性变化无法触发watch回调函数 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +使用\@Watch监听的对象,只能监听一层数据变化,多层次数据变更无法监听,同\@State状态管理机制一致 + +## 如何监听\@State深层数据变化 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过\@Observed配合\@ObjectLink装饰符实现。 + +参考文档:[Observed和ObjectLink数据管理](../ui/ts-other-states-observed-objectlink.md) + +## 如何实现字符串编解码 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过util工具函数模块中的TextEncoder和TextDecoder进行解码。 + +参考文档:[TextEncoder](../reference/apis/js-apis-util.md#textencoder)、[TextDecoder](../reference/apis/js-apis-util.md#textdecoder) + +## 如何导入和导出namespace命名空间 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +- namespace导出 + + ``` + namespace Util{ + export function getTime(){ + return Date.now() + } + } + export default Util + ``` + +- namespace导入 + + ``` + import Util from './util' + Util.getTime() + ``` + +## worker线程中能进行关系型数据库的操作吗 + +适用于:OpenHarmony SDK 3.2.5.5版本, API9 Stage模型 + +不支持。 + diff --git a/zh-cn/application-dev/faqs/faqs-media.md b/zh-cn/application-dev/faqs/faqs-media.md new file mode 100644 index 0000000000000000000000000000000000000000..7067465b3a6806fe302aa743985cf548df415e4a --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-media.md @@ -0,0 +1,130 @@ +# 媒体开发常见问题 + +## 如何设置前置拍照 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +1. 设置相机位置camera.CameraPosition.CAMERA_POSITION_FRONT + +2. 根据相机位置和类型创建CameraInput实例 + +参考文档:[相机管理](../reference/apis/js-apis-camera.md#%E7%9B%B8%E6%9C%BA%E7%AE%A1%E7%90%86) + +示例: + +``` +//默认设置后置相机,通过设置isFrontCamera来切换相机 +let cameraId +let cameraInput +for(let cameraIndex = 0; cameraIndex < this.cameraArray.length; cameraIndex++) { + let faceType = this.cameraArray[cameraIndex].cameraPosition + switch(faceType) { + case camera.CameraPosition.CAMERA_POSITION_FRONT://前置相机 + if(this.isFrontCamera){ + cameraId = this.cameraArray[cameraIndex].cameraId + } + break + case camera.CameraPosition.CAMERA_POSITION_BACK://后置相机 + if(!this.isFrontCamera){ + cameraId = this.cameraArray[cameraIndex].cameraId + } + break + case camera.CameraPosition.CAMERA_POSITION_UNSPECIFIED: + default: + break + } +} +cameraInput = await this.cameraManager.createCameraInput(cameraId)熊文帅 +``` + +## 如何进行图片剪切 + +适用于:OpenHarmony 3.2.5.6版本,API9 Stage模型 + +1. **通过传入的uri创建图片源实例ImageSource对象。** + + ``` + let path = this.context.getApplicationContext().fileDirs + "test.jpg"; + const imageSourceApi = image.createImageSource(path); + ``` + +2. **设置解码参数,通过图片解码获取PixelMap图像对象,解码过程中同时支持图像处理操作。** + - 设置desiredSize支持按尺寸缩放,如果设置为全0,则不进行缩放。 + - 设置desiredRegion支持按矩形区域裁剪,如果设置为全0,则不进行裁剪。 + - 设置rotateDegrees支持旋转角度,以图像中心点顺时针旋转。 + + ``` + const decodingOptions = { + desiredSize: { + height:0, + width:0 + }, + //按矩形区域裁剪 + desiredRegion: { + size: { + height:100, + width:100 + }, + x:0, + y:0 + }, + //旋转90度 + rotate:90 + } + imageSourceApi.createPixelMap(decodingOptions).then(pixelMap => { + this.handlePixelMap(pixelMap) + }) + ``` + +3. 解码完成获取到PixelMap对象后,可以进行后续处理,比如渲染显示等。 + +## 如何申请设备上的媒体读写权限 + +适用于:OpenHarmonySDK 3.2.5.5版本,API9 Stage模型 + +1. 在module.json5配置文件中配置媒体读写权限ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA。 + 示例: + + + ``` + { + "module" : { + "requestPermissions":[ + { + "name" : "ohos.permission.READ_MEDIA", + "reason": "$string:reason" + }, + { + "name" : "ohos.permission.WRITE_MEDIA", + "reason": "$string:reason" + } + ] + } + } + ``` + +2. 这两个权限的授权方式均为user_grant,因此需要调用requestPermissionsFromUser接口,以动态弹窗的方式向用户申请授权。 + + ``` + let permissions: Array = ['ohos.permission.READ_MEDIA','ohos.permission.WRITE_MEDIA'] + context.requestPermissionsFromUser(permissions).then((data) => { + console.log("Succeed to request permission from user with data: " + JSON.stringify(data)) + }).catch((error) => { + console.log("Failed to request permission from user with error: " + JSON.stringify(error)) + }) + ``` + +## MP4格式的视频为什么播放不了 + +适用于:OpenHarmonySDK 3.2.7.5版本,API9 Stage模型 + +暂不支持h.265编码格式的MP4视频播放。 + + +## 为什么视频创建至十几个时新创建的视频无法播放甚至崩溃 + +适用于:OpenHarmonySDK 3.2.7.5版本,API9 Stage模型 + +当前限制最多创建13个媒体播放实例。 + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-native.md b/zh-cn/application-dev/faqs/faqs-native.md index c71a09dc54f5d04d2bae295c17fe5e1e9af62dba..dd433fa987244614294652e0ed41f4fc68f877ae 100644 --- a/zh-cn/application-dev/faqs/faqs-native.md +++ b/zh-cn/application-dev/faqs/faqs-native.md @@ -1,6 +1,10 @@ # Native API使用常见问题 +## Native API是否有类似Canvas绘制接口 +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +Native API中的[Drawing](../reference/native-apis/_drawing.md)接口可以提供2D绘制功能。 ## 运行Native HAP的时候,导入的命名空间报错Obj is not a valid object @@ -8,7 +12,19 @@ 检查模块根目录(注意不是工程根目录)下的build-profile.json5文件,如果设备是32位,需要在abiFilters参数中配置armeabi-v7a,如果设备是64位,需要在abiFilters参数中配置arm64-v8a。 -## NAPI开发的C++代码中,如何获取到模块 package.json 文件中的 “version” 值? +## 运行Native HAP的时候,报错install parse profile prop check error + +适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型 + +检查模块根目录(注意不是工程根目录)下的build-profile.json5文件,如果设备是32位,需要在abiFilters参数中配置armeabi-v7a,如果设备是64位,需要在abiFilters参数中配置arm64-v8a。 + +## 在Native代码中使用OH_LOG_Print打印日志,报错undefined symbol: OH_LOG_Print + +适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型 + +需要修改CMakeLists.txt文件,在target_link_libraries最后追加libhilog_ndk.z.so。 + +## 如何获取到模块 package.json 文件中的 “version” 值 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 @@ -55,3 +71,11 @@ static napi_value Add(napi_env env, napi_callback_info info) return fixed_version_value; } ``` + +## 如何遍历rawfiles中的文件 + +适用于:OpenHarmony SDK 3.2版本以上,API9 Stage模型 + +使用Native API中的OH_ResourceManager_OpenRawDir()方法获取到rawfile的根目录,然后对其进行遍历。可参考文档:[Native开发指导](../reference/native-apis/rawfile.md) + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-third-party-library.md b/zh-cn/application-dev/faqs/faqs-third-party-library.md index 758305d4aca128e8d39001b2176c3f820f2302e2..5397dc2a81320f16c23a95050855832d6aed7eb3 100644 --- a/zh-cn/application-dev/faqs/faqs-third-party-library.md +++ b/zh-cn/application-dev/faqs/faqs-third-party-library.md @@ -1,9 +1,75 @@ # 三四方库使用常见问题 +## 报错“Stage model module … does not support including OpenHarmony npm packages or modules in FA model. OpenHarmony build tasks will not be executed, and OpenHarmony resources will not be packed. ”如何解决 +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +三四方件未适配API9 Stage模型,无法使用。 -## 报错“Stage model module … does not support including OpenHarmony npm packages or modules in FA model. OpenHarmony build tasks will not be executed, and OpenHarmony resources will not be packed. ”是什么意思? +## 项目是否支持传递依赖 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 -三四方件未适配API9 Stage模型,无法使用。 +比如项目A依赖项目B,项目B依赖项目C,那项目A是否能直接使用项目C提供的接口? + +不支持。由于项目打包使用npm工具,npm不支持传递依赖。可以在项目A增加项目C的依赖来解决问题。 + +## 如何获取可用的三方库 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +参见:[OpenHarmony上可直接使用的三方组件汇总](https://gitee.com/openharmony-sig/third_party_app_libs)。 + +## 网络相关的三方库有哪些 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +网络相关的三方库有[Axios](https://gitee.com/openharmony-sig/axios)。 + +## 如何使用npm引入三四方库 + + 适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 +- 方法一: + 1. 打开Terminal窗口,通过如下指令进入到entry目录。 + + ``` + cd entry + ``` + 2. 以引入“dayjs”为例,执行以下指令进行安装。 + + ``` + npm install dayjs --save + ``` + 3. 在对应的js文件中直接引用。 + + ``` + import dayjs from 'dayjs'; + ``` + +- 方法二: + 1. 打开工程目录下的entry目录,找到该目录下的package.json文件。 + 2. 在package.json文件中写入想要安装的三方npm,以“dayjs”为例,示例如下: + + ``` + { + "dependencies": { + "dayjs": "^1.10.4", + } + } + ``` + 3. 打开Terminal窗口,通过如下指令进入到entry目录。 + + ``` + cd entry + ``` + 4. 执行指令进行安装。 + + ``` + npm install + ``` + 5. 在对应的js文件中直接引用。 + + ``` + import dayjs from 'dayjs'; + ``` + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-ui-ets.md b/zh-cn/application-dev/faqs/faqs-ui-ets.md index 46cbe5907ec7734d20b6a37719ca49e7bbd014a3..14ed099e0a8f705ab2c574bddd8f10d283e5c108 100644 --- a/zh-cn/application-dev/faqs/faqs-ui-ets.md +++ b/zh-cn/application-dev/faqs/faqs-ui-ets.md @@ -1,35 +1,4 @@ -# UI框架(ArkTS)开发常见问题 - - - -## ArkTS语言在生成器函数中编译失败,有哪些使用限制? - -适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 - -ArkTS语言的使用在生成器函数中存在以下限制: - -- 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用; - -- 这些表达式中的任何一个都不能导致任何应用程序状态变量(\@State、\@Link、\@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为; - -- 生成器函数内部不能有局部变量。 - -上述限制都不适用于事件处理函数(例如onClick)的匿名函数实现。 - -错误示例: - - -``` -build() { - let a: number = 1 // invalid: variable declaration not allowed - Column() { - Text('Hello ${this.myName.toUpperCase()}') // ok. - ForEach(this.arr.reverse(), ..., ...) // invalid: Array.reverse modifies the @State array variable in place - } - buildSpecial() // invalid: no function calls - Text(this.calcTextValue()) // this function call is ok. -} -``` +# ArkUI组件(ArkTS)开发常见问题 ## 在Stage模型下,如何通过router实现页面跳转 @@ -39,90 +8,14 @@ build() { 2. 页面路由需要在页面渲染完成之后才能调用,在onInit和onReady生命周期中页面还处于渲染阶段,禁止调用页面路由方法。 +参考文档:[页面路由](../reference/apis/js-apis-router.md) + ## router通过调用push方法进堆栈的page是否会被回收 适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 调用push进入堆栈的page不回收,调用back方法出栈后可以被回收。 -## 如何动态替换掉资源文件中的“%s”占位符 - -适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 - -在应用中,通过"$r('app.string.xx')"的形式引用应用资源,$r的第二个参数可用于替换%s占位符。 - - 示例: - -``` -build() { - //do something - //引用的string资源,$r的第二个参数用于替换%s - Text($r('app.string.entry_desc','aaa')) - .fontSize(100) - .fontColor(Color.Black) - //do something -} -``` - -## 如何读取Resource中的xml文件并转化为String类型 - -适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型 - -1. 通过resourceManager的RawFile接口获取Uint8Array格式数据。 - -2. 通过String.fromCharCode将Uint8Array格式数据转化为String类型。 - -参考文档:[资源管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-resource-manager.md) - -示例: - - -``` -resourceManager.getRawFile(path, (error, value) => { - if (error != null) { - console.log("error is " + error); - } else { - let rawFile = value; - let xml = String.fromCharCode.apply(null, rawFile) - } -}); -``` - -## 如何将Resource资源对象转成string类型 - -适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 - -通过\@ohos.resourceManager模块 resourceManager.getString()方法获取字符串。 - -参考文档:[资源管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-resource-manager.md#getstring) - -## class全局静态变量无法使用的问题 - -适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 - -Page和Ability打包后会对import的对象分别形成两个不同的闭包,即打包出两个Global对象。因此,所引用的静态变量并不是同一对象,所以无法通过class静态变量方式定义全局变量。建议使用AppStorage进行全局变量管理。 - -参考文档:[应用程序的数据存储](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/ui/ts-application-states-appstorage.md/) - -## Stage模型下如何获取资源 - -适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 - -Stage模型支持了通过context获取resourceManager对象的方式,再调用其内部获取资源的接口,无需再导入包,此方式FA模型不适用。 - -示例: - - -``` -const context = getContext(this) as any -context - .resourceManager - .getString($r('app.string.entry_desc').id) - .then(value => { - this.message = value.toString() -}) -``` - ## 如何将容器定位到屏幕的最底部? 适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 @@ -130,7 +23,7 @@ context 可以使用Stack堆叠容器,设置子组件在容器内的最底部。 示例: - + ``` build() { Stack({alignContent : Alignment.Bottom}) { @@ -150,15 +43,15 @@ build() { } ``` -## CustomDialog是否支持在TS文件中使用? +## CustomDialog是否支持在TS文件中使用 适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 -不支持,CustomDialog当前只支持在eTS的Page中使用。 +不支持,CustomDialog当前只支持在ArkTS的Page中使用。 -参考文档:[自定义弹窗](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md) +参考文档:[自定义弹窗](../reference/arkui-ts/ts-methods-custom-dialog-box.md) -## 如何将CustomDialog中的变量传递给Page页面中的变量? +## 如何将CustomDialog中的变量传递给Page页面中的变量 适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 @@ -166,34 +59,72 @@ build() { 示例: - + ``` -// CustomDialog 组件 +// 弹窗组件 @CustomDialog struct MyDialog { controller: CustomDialogController title: string - data: string - cancel: () => void confirm: (data: string) => void - Button('confirm') - .onClick(() => { - this.controller.close() - this.data = 'test' - this.confirm(this.data) - }).backgroundColor(0xffffff).fontColor(Color.Red) -// Page页面 + data: string = '' + + build() { + Row() { + Column({ space: 10 }) { + Text(this.title) + .fontSize(30) + .fontColor(Color.Blue) + TextInput({ placeholder: "输入内容", text: this.data }) + .onChange((data) => { + this.data = data // 获取输入框数据 + }) + Button('confirm') + .onClick(() => { + this.confirm(this.data) // 将输入框数据通过回调函数传给主页面 + this.controller.close() + }).backgroundColor(0xffffff).fontColor(Color.Red) + }.width("50%") + }.height("50%") + } +} + +// main页面 @Entry @Component struct DialogTest { + @State dialogTitle: string = '' + @State dialogData: string = '' dialogController: CustomDialogController = new CustomDialogController({ - builder: MyDialog({ title:'标题自定义',cancel: this.onCancel, - confirm: this.onAccept.bind(this) }), // 绑定自定义的回调函数 - cancel: this.existApp, - autoCancel: true + builder: MyDialog({ + title: this.dialogTitle, // 绑定数据 + data: this.dialogData, + confirm: this.confirm.bind(this) // 绑定自定义的回调函数,这里要修改this的指向 + }) }) - onAccept(data:string) { - console.info('Callback when the second button is clicked ' + data) + + confirm(data: string) { + this.dialogData = data + console.info(`recv dialog data: ${data}`) // 获取弹窗输入的信息 + } + + build() { + Row() { + Column({ space: 10 }) { + Button('点击打开弹窗') + .onClick(() => { + this.dialogTitle = '弹窗' + this.dialogController.open() + }) + Text(`接受弹窗的数据:`) + .fontSize(20) + TextInput({ placeholder: "输入内容", text: this.dialogData }) + .width("50%") + .onChange((data) => { + this.dialogData = data // 获取输入框数据 + }) + }.width("100%") + }.height("100%") } } ``` @@ -210,10 +141,10 @@ struct DialogTest { GridContainer内子组件默认水平左对齐,居中显示可以参考以下处理方式: -内部嵌套布局组件Row,设置Row属性justifyContent(FlexAlign.Center),内部嵌套子组件可保持居中显示,参考[栅格布局](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/ui-ts-layout-grid-container.md)文档。 +内部嵌套布局组件Row,设置Row属性justifyContent(FlexAlign.Center),内部嵌套子组件可保持居中显示,参考[栅格布局](../ui/ui-ts-layout-grid-container.md)文档。 示例: - + ``` GridContainer({ sizeType: SizeType.SM, columns: 12 }) { Row() { @@ -233,7 +164,7 @@ GridContainer({ sizeType: SizeType.SM, columns: 12 }) { 在加载窗口内容之前,采用systemAvoidAreaChange事件监听。 示例: - + ``` // MainAbility.ts import window from '@ohos.window'; @@ -249,7 +180,7 @@ async function enterImmersion(mainWindow: window.Window) { }) await mainWindow.setFullScreen(true) await mainWindow.setSystemBarEnable(["status", "navigation"]) - await mainWindow.setSystemBarProperties({ + await mainWindow.sArkTSystemBarProperties({ navigationBarColor: "#00000000", statusBarColor: "#00000000", navigationBarContentColor: "#FF0000", @@ -267,16 +198,432 @@ export default class MainAbility extends Ability { } ``` -## 如何在eTS代码中执行Web组件内的JS函数? +## 在容器组件嵌套的场景下,如何解决手势拖拽事件出现错乱的问题 -适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +gesture的属性distance默认值是5,把gesture的属性distance设成1就可以解决。 -通过WebController中runJavaScript方法异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。注意:runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 +## 如何获取组件的高度 -参考文档:[Web](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-web.md) +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 -## 在容器组件嵌套的场景下,如何解决手势拖拽事件出现错乱的问题? +组件宽高变化可通过onAreaChange组件区域变化事件获取。 -适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 +示例: -gesture的属性distance默认值是5,把gesture的属性distance设成1就可以解决。 + +``` +Column() { + Text(this.value) + .backgroundColor(Color.Green).margin(30).fontSize(20) + .onClick(() => { + this.value = this.value + 'Text' + }) + .onAreaChange((oldValue: Area, newValue: Area) => { + console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`) + this.size = JSON.stringify(newValue) + }) +``` + +## 如何获取List组件的偏移量 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +List组件绑定Scoller控制器,通过currentOffset方式获取当前的滚动偏移量。 + +示例: + + +``` +Column() { + List({ space: 20, initialIndex: 0,scroller: this.scroller}) { + ForEach(this.arr, (item) => { + ListItem() { + Text('' + item) + .width('100%').height(100).fontSize(16) + .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF) + }.editable(true) + }, item => item) + } + .listDirection(Axis.Vertical) // 排列方向 + .editMode(this.editFlag) + .onScroll((xOffset: number, yOffset: number) => { + console.info("yOffset======="+this.scroller.currentOffset().yOffset) + }) +}.width('100%') +``` + +## 页面使用router携带param跳转后,下一个页面如何获取param + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + + +``` +// 3.1.5.5版本之前,取值方式为:router.getParams().key +private value: string = router.getParams().value; +// 从3.1.6.5版本起,取值方式为:router.getParams()['key'] +private value: string = router.getParams()['value']; +``` + +## RichText组件是否支持跳转到本地page页面 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +不支持。 + +## 使用router或Navigator实现页面跳转时,如何关闭页面间转场动效 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +1. 参考[页面间转场示例](../reference/arkui-ts/ts-page-transition-animation.md/#%E7%A4%BA%E4%BE%8B)在当前页面和目标页面中定义pageTransition方法。 + +2. 将页面入场组件PageTransitionEnter和页面退场组件PageTransitionExit的动效参数duration都设置为0。 + +## UI开发中,像素单位如何选择 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +Vp保证了不同分辨率下 视觉效果的等价性,比如一个图标,在不同分辨率下都是视觉效果是等价。 + +lpx相当于百分比视图,按比例扩大或者缩小。 + +如果关注Item等效性的,比如按钮、文字、列表基本上都是VP;比如关注布局,比如1/2之类的网格,lpx更好。 + +## ArkTS中颜色的格式说明 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +颜色可以使用两种格式,例如 0x7F000000 或者 '\#7F000000' ,其中前两位是透明度,后六位是RGB。 + + +``` +fontColor(0x7F000000) +fontColor( '#7F000000' ) +``` + +## 如何在Page页面中监听返回操作 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +在Page页面返回时,系统会调用\@Entry修饰的自定义组件的onBackPress()回调,可以在回调函数中实现相关业务诉求。参考[自定义组件生命周期回调函数](../ui/ts-custom-component-lifecycle-callbacks.md) + +## TextInput组件密码模式下,右边的眼睛图标是否支持自定义? + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +TextInput组件设置type为InputType.Password时,右侧出现眼睛图标,showPasswordIcon控制图标显示隐藏,不支持自定义。更多信息可参考文档:[TextInput组件](../reference/arkui-ts/ts-basic-components-textinput.md) + +## Image图片加载目前只能加载https的 不能加载http的 + +适用于:OpenHarmony SDK3.2.5.5, API9 Stage模型 + +htpp是不安全的,会被白名单过滤掉,建议使用https。 + +## TextView布局设置间距与显示界面不符合 + +适用于:OpenHarmony SDK3.2.5.5, API9 Stage模型 + +TextView默认设置align属性为居中,文本从左到右显示,需要设置align属性为Start。 + +## constraintSize尺寸设置不生效 + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +constraintSize约束组件尺寸时,子组件内设置百分比宽度,例如width('100%')会采用constraintSize约束中的最大宽乘百分比,导致撑开组件,看起来constraintSize设置没生效 + +## 如何将背景颜色设置为透明 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +将backgroundColor设置为 '\#00000000' 。 + +## Scroll组件滚动到达不了最底部 + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +Scroll组件在未设置高度情况下,默认为窗口高度,当滚动区域外存在其他组件时,滚动底部区域会出现遮挡,需要设置Scroll高度,或者使用Flex布局限制Scroll高度 + +## backgroundImage设置CenterCrop + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +CenterCrop是android中imageView,scaletype的设置,主要保证图片等比缩放裁剪,位置保持居中,可以使用通用属性backgroundImageSize(ImageSize.cover)和backgroundImagePosition(Alignment.Center)达到使用效果 + +## 输入框组件TextInput回车事件onSubmit使用 + +适用于:OpenHarmony SDK3.0, API9 Stage模型 + +onSubmit事件在回车键或软键盘回车触发该回调,参数为当前软键盘回车键类型,通过enterKeyType属性可以设置输入法回车键类型,软键盘回车键样式需要输入法的支持,具体文档参考[Textinput组件](../reference/arkui-ts/ts-basic-components-textinput.md) + +## 页面路由时,页面栈内的数量限制是多少 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +页面路由栈支持的最大页面数量是32,当超出此限制时,使用router.push接口页面无法完成跳转 。 + +## ArkUI是否支持通过代码动态创建组件 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +支持使用[条件渲染](../ui/ts-rending-control-syntax-if-else.md)和[循环渲染](../ui/ts-rending-control-syntax-foreach.md)等方式进行动态创建组件。 + +## 页面路由携带PixelMap对象参数,跳转页面无法获取 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +页面路由只支持普通对象类型,普通JSON数据结构,可以采用localStorage存储PixelMap对象,在跳转页面获取 + +## TextInput组件在onEditChange激活的时候通过.caretPosition(0)让光标回到起点 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +onEditChange事件在输入框聚焦时触发,这时光标位置和手势触发位置有关,在使用caretPosition同步处理无法改变光标位置,需要使用异步处理,在setTimeout中执行可以进行 + +## TextInput是否有方法设置内容为全部选中 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +TextInput组件暂不支持设置内容全选。 + +## input的输入框的type属性是date,但无法选择时间 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +input 组件的 type 设置为 date,只是会有相关格式提示,本质上还是输入控件,如果需要实现日期选择效果,需要使用 picker 组件。 + +## ArkTS TextInput输入时,弹出的输入法框把页面布局挤压变形 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +用Flex布局就会有挤压变形情况,改成Column布局就不会产生挤压 + +## 子组件使用\@Link修饰成员变量时,父组件传值如何传值 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +子组件使用\@Link修饰时,父组件传值需要添加"$" + +示例: + + +``` +@Component +struct FoodImageDisplay { + @Link imageSrc: Resource + + build() { + Stack({ alignContent: Alignment.BottomStart }) { + Image(this.imageSrc) + .objectFit(ImageFit.Contain) + Text('Tomato') + .fontSize(26) + .fontWeight(500) + .margin({ left: 26, bottom: 17.4 }) + } + .backgroundColor('#FFedf2f5') + .height(357) + } +} + +@Entry +@Component +struct FoodDetail { + + @State imageSrc: Resource = $r('app.media.Tomato') + + build() { + Column() { + FoodImageDisplay({imageSrc:$imageSrc}) + } + .alignItems(HorizontalAlign.Center) + } +} +``` + +## 如何多个pageAbility之间共享变量 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +1. 可以使用轻量级数据库 + +2. 可以使用持久化数据管理 + +3. 可以使用emitter事件通信 + + +## 如何自定义Video组件控制栏样式 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +1. 通过设置属性controls为false关闭默认控制栏 + +2. 设置Video组件的controller + +3. 通过ArkTS实现自定义的控制栏,并通过VideoController控制视频播放 + +## 对ArkTS组件多次更新时如何优化性能 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过将需要更新的ArkTS组件抽离成自定义组件,并更新该自定义组件内\@State绑定的变量,以此实现组件的局部刷新。 + +## 如何优化Tab组件性能 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +Tab组件处于某一页签时。其他页签并不会被系统卸载,所以会占用部分内存。可以通过if渲染控制判断当前页签是否是需要显示的页签,若不是则不加载,以此来实现卸载其他不显示的页签并释放这部分内存。 + +## 如何设置组件不同状态下的样式 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过设置组件的多态样式,实现组件不同状态(无状态、按下、禁用、聚焦、点击)的样式 + +参考文档:[多态样式](../reference/arkui-ts/ts-universal-attributes-polymorphic-style.md) + +## 焦点事件onBlur/onFocus回调无法触发 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +焦点事件默认情况下需要外接键盘的Tab键,或方向键触发,点击触发焦点事件需要添加焦点控制属性focusOnTouch + +参考文档:[焦点控制](../reference/arkui-ts/ts-universal-attributes-focus.md) + +## Scroll内Flex加宽高与滑动冲突 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +Scroll支持单个子组件,子组件高度应由内容高度决定,当内容中存在异步加载的图片组件导致滚动布局异常时,可约束子组件最小高度constraintSize({ minHeight: '100%' }) + +## 页面路由跳转后如何阻止其返回原页面 + +适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型 + +通过router.clear()接口清空页面栈中的所有历史页面,保留当前页面作为栈顶页面。 + +参考文档:[页面路由](../reference/apis/js-apis-router.md) + +## 如何实现将TextInput组件内容进行一次性清空 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +可以参考如下实现: + + +``` +struct Index { +@State text: string = 'Hello World' +controller: TextInputController = new TextInputController() + build() { + Row() { + Column() { + TextInput({ placeholder: 'Please input your words.', text: this.text, + controller:this.controller}).onChange((value) => { + this.text = value + }) + Button("Clear TextInput").onClick(() => { + this.text = ""; + }) + } + .width('100%') + } + .height('100%') + } +} +``` + +## Tabs组件在点击Tab项时是否支持禁止切换 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +不支持。 + +## 使用 \@state修饰成员变量“id”会报错,报错原因:TypeError: cannot read property 'get' of undefined + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +id添加为唯一值,成为关键字。 + +## 基于OpenHarmony开发的应用,是否支持使用fontFamily属性设置不同的字体 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +基于OpenHarmony开发的应用,默认字体'HarmonyOS Sans',且当前只支持这种字体。 + +## Ability与UI页面推荐的数据交互方式是什么 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +推荐使用[LocalStorage](../quick-start/arkts-state-mgmt-application-level.md#localstorage)。 + +## 父组件如何与其孙子组件进行状态同步 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +- 方式一(推荐):使用\@Provide和\@Consume装饰器。在父组件使用\@Provide,在孙子组件使用\@Consume,可以实现父组件和孙子组件进行双向数据绑定。 + +- 方式二:使用\@State和\@Link装饰器。在父组件使用\@State,在每一层子组件(子组件和孙子组件)都使用\@Link。 + +## 字符超长中间显示省略号 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +代码示例 + + +``` +beautySub(str,len) { + var reg = /[\u4e00-\u9fa5]/g; + //减少字符,达到优化 + var slice = str.substring(0,len) + var charNum = (~~(slice.match(reg) && slice.match(reg).length)) + //减1是为了处理万一超过字符串,不显示多一个不是汉字的字符, + var realen = slice.length*2 - charNum-1 + return str.substr(0,realen) + (realen < str.length ? "..." : "") +str.substr(str.length-realen,str.length) +} +``` + +## richText 组件怎么加上滚动条 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +RichText底层是web,可以参考html的语法,在div上加上的overflow:auto的滚动样式。 + +## scroll里面套一个grid,怎么禁用grid的滑动事件? + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +可以通过onScrollBegin事件和scrollBy方法实现容器嵌套滚动。 + +参考:[容器嵌套滚动样例](../reference/arkui-ts/ts-container-scroll.md#%E7%A4%BA%E4%BE%8B2) + +## 鸿蒙的list组件怎么实现类似安卓sticky header的效果? + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +可以使用ListItemGroup组件来实现。 + +参考:[ListItemGroup](../reference/arkui-ts/ts-container-listitemgroup.md) + +## 能否去除自定义弹窗组件的白色背景 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +当前不支持。原因是当前的UI样式在框架后端写死了,无法更改。 + +## 组件背景图片设置backgroundImage方法是否支持svg图片格式 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +当前不支持。 + +## 自定义弹窗组件如何设置弹窗位置 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +自定义弹窗组件中参数alignment可以指定弹窗的位置。比如设置弹窗在底部:alignment : DialogAlignment.Bottom。 + +参考文档:[自定义弹窗](../arkui-ts/ts-methods-custom-dialog-box.md) + + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-ui-js.md b/zh-cn/application-dev/faqs/faqs-ui-js.md index 90ec607864c46ecfbeba21b7ac327ffe8c3e3ae1..afe4133d3825eeae618ef107457a11d36c60e948 100644 --- a/zh-cn/application-dev/faqs/faqs-ui-js.md +++ b/zh-cn/application-dev/faqs/faqs-ui-js.md @@ -1,7 +1,5 @@ # UI框架(JS)开发常见问题 - - ## 如何取出xml文件中对应的字段 适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 @@ -39,20 +37,11 @@ let options = { } let result: any = conv.convert(xml, options) // 将xml文本转为JS对象 console.log('Test: ' + JSON.stringify(result)) -console.log('Test: ' + result._declaration._attributes.version) // xml字符串中version字段信息console.log('Test: ' + result._elements[0]._elements[0]._elements[0]._text) // xml字符串中title字段内容 +console.log('Test: ' + result._declaration._attributes.version) // xml字符串中version字段信息 +console.log('Test: ' + result._elements[0]._elements[0]._elements[0]._text) // xml字符串中title字段内容 ``` -参考文档:[xml转换JavaScript](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-convertxml.md) - -## JS、TS和eTS的区别 - -适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 - -- JS:Web 的编程语言。具有轻量级,弱类型等特点。 - -- TS:TS是JS的超集,拓展了JS的语法。有明确的类型与更多面向对象的内容如接口,枚举等。 - -- eTS:OpenHarmony UI开发框架语言,是对TS的扩展,通过声明式开发范式实现UI界面。 +参考文档:[xml转换JavaScript](../reference/apis/js-apis-convertxml.md) ## 如何将时间转为时分秒格式 @@ -101,4 +90,41 @@ export default class DateTimeUtil{ return `${this.fill(hours)}${this.fill(minutes)}${this.fill(seconds)}` } } + +``` + +## scroller如何判断回弹动画的结束误差 + +适用于:OpenHarmony SDK 3.2.5.3版本,API8 FA模型 + +目前可以在触摸结束之后,计算同方向的变化,如果变化方向相反,说明出现回弹了,就规避不处理了。 + + +## 如何实现应用数据持久化存储 + +通过PersistentStorage类实现管理应用持久化数据,可以将特定标记的持久化数据链接到AppStorage中,并由AppStorage接口访问对应持久化数据。 + +参考文档:[持久化数据管理](../ui/ts-application-states-apis-persistentstorage.md) + +示例: + + +``` +AppStorage.Link('varA') +PersistentStorage.PersistProp("varA", "111"); +@Entry +@Componentstruct Index { + @StorageLink('varA') varA: string = '' + build() { + Column() { + Text('varA: ' + this.varA).fontSize(20) + Button('Set').width(100).height(100).onClick(() => { + this.varA += '333' + }) + } + .width('100%') + .height('100%') + } +} ``` + \ No newline at end of file diff --git a/zh-cn/application-dev/faqs/faqs-web-arkts.md b/zh-cn/application-dev/faqs/faqs-web-arkts.md new file mode 100644 index 0000000000000000000000000000000000000000..78a123e45d698948dfca66a0044123c3217a5721 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-web-arkts.md @@ -0,0 +1,82 @@ +# ArkUI Web组件(ArkTS)开发常见问题 + +## Web组件domStorageAccess属性设置 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启,控制web网页中localStorage的使用,对sessionStorage未做控制 + + +## Web组件加载的html页面内如何检测网络状态 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +1. 配置应用权限:ohos.permission.INTERNET 、 ohos.permission.GET_NETWORK_INFO + +2. html中通过window.navigator.onLine获取网络状态 + +## Web组件加载h5页面,首次加载无法设置拼接UserAgent参数 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +默认UserAgent通过WebController获取。一个WebController对象只能控制一个Web组件,且必须在Web组件和WebController绑定后,才能调用WebController上的方法,因此在初次加载前设置默认UserAgent + 自定义字符串拼接,可采用此方式: + +1. 使用\@State定义初始userAgent,绑定到Web组件; + +2. 在web组件的onUrlLoadIntercept回调中,通过WebController获取默认userAgent,修改Web组件绑定的userAgent。 + 参考代码如下: + + + ``` + @Entry + @Component + struct Index { + private controller: WebController = new WebController() + @State userAgentPa: string = '' + build() { + Row() { + Column() { + Web({ src: 'www.example.com', controller: this.controller }) + .width('100%') + .userAgent(this.userAgentPa) + .onUrlLoadIntercept((event) => { + let userAgent = this.controller.getDefaultUserAgent(); + this.userAgentPa = userAgent + ' 111111111' + console.log("userAgent onUrlLoadIntercept: " + userAgent); + return false; + }) + } + .width('100%').alignItems(HorizontalAlign.Start).backgroundColor(Color.Green) + } + .height('100%') + } + } + ``` + +## 加载Lottie动画的逻辑应该写在onAppear函数中还是应该写在onReady函数中 + +适用于:OpenHarmony SDK 3.2.6.5版本,API9 Stage模型 + +onAppear方法只是定位完Canvas的位置,onReady方法才是测量完成,加载动画的逻辑应该写在onReady函数中。 + +## 调用deleteJavaScriptRegister后是否需要调用refresh接口 + +适用于:所有版本 + +不需要。 + +## 页面如何传递数据给Web组件 + +适用于:OpenHarmony SDK 3.2.7.5版本,API9 Stage模型 + +1. 使用WebController创建两个消息端口。 + +2. 将消息端口1发送到HTML侧,由HTML侧保存并使用。 + +3. 将消息端口0在应用侧注册回调事件。 + +4. 使用应用侧的端口0给HTML侧消息端口1发送消息。 + +使用参考:[Web组件](../reference/arkui-ts/ts-basic-components-web.md#postmessage9) + + \ No newline at end of file