Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
2a962933
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2a962933
编写于
4月 23, 2023
作者:
Z
zengyawen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update docs
Signed-off-by:
N
zengyawen
<
zengyawen1@huawei.com
>
上级
c7170386
变更
35
展开全部
隐藏空白更改
内联
并排
Showing
35 changed file
with
3181 addition
and
2162 deletion
+3181
-2162
zh-cn/application-dev/faqs/Readme-CN.md
zh-cn/application-dev/faqs/Readme-CN.md
+17
-16
zh-cn/application-dev/faqs/faqs-ability-access-control.md
zh-cn/application-dev/faqs/faqs-ability-access-control.md
+7
-0
zh-cn/application-dev/faqs/faqs-ability.md
zh-cn/application-dev/faqs/faqs-ability.md
+277
-111
zh-cn/application-dev/faqs/faqs-arkui-web.md
zh-cn/application-dev/faqs/faqs-arkui-web.md
+174
-0
zh-cn/application-dev/faqs/faqs-arkui.md
zh-cn/application-dev/faqs/faqs-arkui.md
+1466
-0
zh-cn/application-dev/faqs/faqs-bundle-management.md
zh-cn/application-dev/faqs/faqs-bundle-management.md
+126
-0
zh-cn/application-dev/faqs/faqs-bundle.md
zh-cn/application-dev/faqs/faqs-bundle.md
+0
-31
zh-cn/application-dev/faqs/faqs-connectivity.md
zh-cn/application-dev/faqs/faqs-connectivity.md
+0
-104
zh-cn/application-dev/faqs/faqs-data-management.md
zh-cn/application-dev/faqs/faqs-data-management.md
+0
-68
zh-cn/application-dev/faqs/faqs-development-board.md
zh-cn/application-dev/faqs/faqs-development-board.md
+0
-49
zh-cn/application-dev/faqs/faqs-device-management.md
zh-cn/application-dev/faqs/faqs-device-management.md
+0
-54
zh-cn/application-dev/faqs/faqs-dfx.md
zh-cn/application-dev/faqs/faqs-dfx.md
+17
-43
zh-cn/application-dev/faqs/faqs-distributed-data-management.md
.../application-dev/faqs/faqs-distributed-data-management.md
+110
-0
zh-cn/application-dev/faqs/faqs-distributed-device-profile.md
...n/application-dev/faqs/faqs-distributed-device-profile.md
+10
-0
zh-cn/application-dev/faqs/faqs-event-notification.md
zh-cn/application-dev/faqs/faqs-event-notification.md
+137
-34
zh-cn/application-dev/faqs/faqs-file-management.md
zh-cn/application-dev/faqs/faqs-file-management.md
+10
-100
zh-cn/application-dev/faqs/faqs-globalization.md
zh-cn/application-dev/faqs/faqs-globalization.md
+118
-0
zh-cn/application-dev/faqs/faqs-graphics.md
zh-cn/application-dev/faqs/faqs-graphics.md
+82
-79
zh-cn/application-dev/faqs/faqs-ide.md
zh-cn/application-dev/faqs/faqs-ide.md
+0
-80
zh-cn/application-dev/faqs/faqs-international.md
zh-cn/application-dev/faqs/faqs-international.md
+0
-19
zh-cn/application-dev/faqs/faqs-language.md
zh-cn/application-dev/faqs/faqs-language.md
+0
-282
zh-cn/application-dev/faqs/faqs-media.md
zh-cn/application-dev/faqs/faqs-media.md
+0
-132
zh-cn/application-dev/faqs/faqs-multimedia.md
zh-cn/application-dev/faqs/faqs-multimedia.md
+136
-0
zh-cn/application-dev/faqs/faqs-native.md
zh-cn/application-dev/faqs/faqs-native.md
+0
-79
zh-cn/application-dev/faqs/faqs-network-management.md
zh-cn/application-dev/faqs/faqs-network-management.md
+222
-0
zh-cn/application-dev/faqs/faqs-sdk.md
zh-cn/application-dev/faqs/faqs-sdk.md
+41
-0
zh-cn/application-dev/faqs/faqs-security.md
zh-cn/application-dev/faqs/faqs-security.md
+42
-0
zh-cn/application-dev/faqs/faqs-sensor.md
zh-cn/application-dev/faqs/faqs-sensor.md
+8
-0
zh-cn/application-dev/faqs/faqs-startup.md
zh-cn/application-dev/faqs/faqs-startup.md
+44
-0
zh-cn/application-dev/faqs/faqs-third-fourth-party-library.md
...n/application-dev/faqs/faqs-third-fourth-party-library.md
+72
-0
zh-cn/application-dev/faqs/faqs-third-party-library.md
zh-cn/application-dev/faqs/faqs-third-party-library.md
+0
-74
zh-cn/application-dev/faqs/faqs-ui-ets.md
zh-cn/application-dev/faqs/faqs-ui-ets.md
+0
-634
zh-cn/application-dev/faqs/faqs-ui-js.md
zh-cn/application-dev/faqs/faqs-ui-js.md
+0
-94
zh-cn/application-dev/faqs/faqs-web-arkts.md
zh-cn/application-dev/faqs/faqs-web-arkts.md
+0
-79
zh-cn/application-dev/faqs/faqs-window-manager.md
zh-cn/application-dev/faqs/faqs-window-manager.md
+65
-0
未找到文件。
zh-cn/application-dev/faqs/Readme-CN.md
浏览文件 @
2a962933
# 常见问题
-
[
开发语言常见问题
](
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
)
-
[
公共事件与通知开发常见问题
](
faqs-event-notification.md
)
-
[
Ability开发常见问题
](
faqs-ability.md
)
-
[
ArkUI框架开发常见问题
](
faqs-arkui.md
)
-
[
Web开发常见问题
](
faqs-arkui-web.md
)
-
[
包管理开发常见问题
](
faqs-bundle-management.md
)
-
[
资源管理开发常见问题
](
faqs-globalization.md
)
-
[
事件通知开发常见问题
](
faqs-event-notification.md
)
-
[
图形图像开发常见问题
](
faqs-graphics.md
)
-
[
窗口管理开发常见问题
](
faqs-window-manager.md
)
-
[
媒体开发常见问题
](
faqs-multimedia.md
)
-
[
安全基础能力开发常见问题
](
faqs-security.md
)
-
[
程序访问控制开发常见问题
](
faqs-ability-access-control.md
)
-
[
数据管理开发常见问题
](
faqs-distributed-data-management.md
)
-
[
文件管理开发常见问题
](
faqs-file-management.md
)
-
[
媒体开发常见问题
](
faqs-media.md
)
-
[
网络与连接开发常见问题
](
faqs-connectivity.md
)
-
[
数据管理开发常见问题
](
faqs-data-management.md
)
-
[
设备管理开发常见问题
](
faqs-device-management.md
)
-
[
网络管理开发常见问题
](
faqs-network-management.md
)
-
[
DFX开发常见问题
](
faqs-dfx.md
)
-
[
国际化开发常见问题
](
faqs-international
.md
)
-
[
Native API使用常见问题
](
faqs-native
.md
)
-
[
三四方库使用常见问题
](
faqs-third-party-library
.md
)
-
[
IDE使用常见问题
](
faqs-ide
.md
)
-
[
开发板使用常见问题
](
faqs-development-board
.md
)
-
[
泛Sensor服务开发常见问题
](
faqs-sensor
.md
)
-
[
启动恢复开发常见问题
](
faqs-startup
.md
)
-
[
分布式DeviceProfrofile开发常见问题
](
faqs-distributed-device-profile
.md
)
-
[
SDK使用常见问题
](
faqs-sdk
.md
)
-
[
三四方库使用常见问题
](
faqs-third-fourth-party-library
.md
)
zh-cn/application-dev/faqs/faqs-ability-access-control.md
0 → 100644
浏览文件 @
2a962933
# 程序访问控制开发常见问题
## 在系统设置修改了应用权限,应用能否监听到权限变化
适用于:OpenHarmony 3.1 Beta5 API 9
在系统设置修改了应用权限,三方应用无法监听到权限变化的。
zh-cn/application-dev/faqs/faqs-ability.md
浏览文件 @
2a962933
# Ability
框架
开发常见问题
# Ability开发常见问题
##
拉起Ability在界面上没反应
##
如何获取设备横竖屏的状态变化通知
适用于:OpenHarmony
SDK 3.2.5.3版本,API9 Stage模型
适用于:OpenHarmony
3.2 Beta5 API 9
1.
如果是通过startAbility的方式拉起,检查want中abilityName字段是否携带了bundleName做前缀,如果有,请删除;
**问题现象**
2.
检查MainAbility.ts文件中onWindowStageCreate方法配置的Ability首页文件是否在main_pages.json中有定义,如果没有定义,请补齐;
当设备发生横竖屏变化时,开发者应如何获取到变化的事件通知?
3.
SDK和OpenHarmony SDK系统推荐同一天的版本。
**解决措施**
参考文档:
[
OpenHarmony版本转测试信息
](
https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md
)
使用UIAbility.onConfigurationUpdate
\(\)
回调方法订阅系统环境变量的变化(包括语言,颜色模式,屏幕方向等)。
## 如何将Ability的UI界面设置成透明
**参考文档**
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
[
订阅系统环境变量的变化
](
../application-models/subscribe-system-environment-variable-changes.md#在uiability组件中订阅回调
)
将最上层容器组件背景色设置为透明,然后通过设置XComponent组件的opacity属性值为0.01来实现。
## 点击服务卡片如何跳转至指定的页面
示例:
适用于:OpenHarmony 3.2 Beta5 API 9
```
build() {
Stack() {
XComponent({
id: 'componentId',
type: 'surface',
})
.width('100%')
.height('100%')
.opacity(0.01)
// 页面内容
}
.width('100%')
.height('100%')
.backgroundColor('rgba(255,255,255, 0)')
}
```
**解决措施**
参考文档,配置卡片事件,指定需要跳转的目标Ability,然后在目标UIAbility的onWindowStageCreate
\(\)
中调用loadContent跳转至指定的page页面。
**参考链接**
[
开发卡片事件
](
../application-models/arkts-ui-widget-configuration.md
)
## 如何在Stage模型中创建后台服务
适用于:Openharmony 3.2 Beta5
**问题现象**
Stage模型中的ServiceExtensionAbility是系统接口,第三方应用不支持调用,如何在Stage模型中如何创建后台服务?
**解决措施**
Stage模型可通过后台任务实现该功能。
**参考链接**
[
后台任务
](
../task-management/background-task-overview.md
)
## FA和Stage模型中,应用是否可以创建并指定UIAbility运行在哪个进程
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
FA和Stage模型中,应用可以创建进程并指定UIAbility运行在某个进程。
-
FA模型
FA模型支持多进程,默认情况下,同一应用的所有组件均在相同进程中运行,且大多数应用都不应该改变这一点。但是如果应用自身业务需要某个组件独立进程运行,可在config配置文件中配置;配置清单中,ability标签的process子标签可指定该组件在哪个进程中运行,应用可以设置通过该属性使每个组件均在各自的进程中运行,但process子标签仅支持系统应用配置,三方应用配置不生效。
-
Stage模型
Stage模型支持多进程:Stage模型的进程模型由系统定义,三方应用不能配置多进程;如果需要自定义配置独立进程,需要申请特殊权限;配置清单中,module标签的process子标签可指定该Hap下Ability在哪个进程中运行,应用可以设置通过该属性使每个Hap的Ability组件均在各自的进程中运行。如果不配置,进程名默认为包名。
## Stage模型与FA模型在进程内对象共享方面有哪些差异
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
-
Stage模型中,多个应用组件共享同一个ArkTS引擎实例,因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。
-
FA模型中,每个应用组件独享一个ArkTS引擎实例。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。
## 调用方法的时候,如何解决方法内部的this变成undefined
**参考链接**
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
[
UIAbility组件与UI的数据同步
](
../application-models/uiability-data-sync-with-ui.md
)
方式一:在调用方法的时候加上.bind(this)。
## 如何使用AbilityStage的生命周期函数
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
在module.json5里的module中加上srcEntry字段"srcEntry": "./ets/myabilitystage/MyAbilityStage.ts"。
**参考链接**
[
AbilityStage组件容器
](
../application-models/abilitystage.md
)
## 多实例场景下当前Ability调用terminateSelf后,桌面最近任务列表如何设置不保留快照
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
可在module.json5配置文件中配置removeMissionAfterTerminate为true。
## 通过startAbility\(\)方法无法启动UIAbility实例
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
-
如果是通过startAbility的方式拉起,检查want中abilityName字段是否携带了bundleName做前缀,如果有,请删除。
-
检查MainAbility.ts文件中onWindowStageCreate方法配置的Ability首页文件是否在main
\_
pages.json中有定义,如果没有定义,请补齐。SDK和OpenHarmony SDK系统推荐同一天的版本。
## 调用方法的时候,方法内部的this变成了undefined
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
方式一:在调用方法的时候加上.bind
\(
this
\)
;
方式二:使用箭头函数。
##
如何解决must have required property 'startWindowIcon'报错
##
启动UIAbility时报错:must have required property 'startWindowIcon'
适用于:Open
Harmony SDK 3.2.3.5版本,API9 Stage模型
适用于:Open
harmony 3.2 Beta5 API 9
Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。
**解决措施**
参考文档:
[
Stage模型应用程序包结构
](
../quick-start/module-configuration-file.md
)
UIAbility配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。
示例:
**代码示例**
```
{
...
...
@@ -69,132 +137,230 @@ Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abil
}
```
## 如何获取设备横竖屏的状态变化的通知
**参考链接**
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
[
Stage模型配置文件
](
../quick-start/module-configuration-file.md
)
使用Ability的onConfigurationUpdated回调实现,系统语言、颜色模式以及Display相关的参数,比如方向、Density,发生变化时触发该回调。
## Stage模型是否推荐使用globalThis获取Context
## Stage模型是否推荐用globalThis去获取Context
适用于:Openharmony 3.2 Beta5 API 9
适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型
不推荐,Stage模型使用globalThis去获取Context是错误的使用方式。
不推荐,Stage模型使用globalThis去获取Context是错误的使用方式。
在Stage模型中,整个应用进程共用一个js虚拟机实例,其中可以运行多个Ability实例,共用一个global对象。在同一个js虚拟机内的不同的Ability中使用globalThis获取Context,存在被覆盖从而发生错误的风险。
在Stage模型中,整个应用进程共用一个js虚拟机实例,其中可以运行多个Ability实例,共用一个global对象。在同一个js虚拟机内的不同的Ability中使用globalThis获取Context,存在被覆盖从而发生错误的风险。
推荐使用方式参考:
[
Stage模型的Context详细介绍
](
../application-models/application-context-stage.md
)
。
**参考链接**
## 如何在应用A中去获取应用B的HAP的安装路径
[
UIAbility组件与UI的数据同步
](
../application-models/uiability-data-sync-with-ui.md
)
适用于:OpenHarmony SDK 3.0以上版本, API9 Stage模型
## 部署HAP时上报安装内容过大错误
首先需要申请系统权限,具体参看文档:
[
自动化签名
](
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ohos-auto-configuring-signature-information-0000001271659465
)
。导入bundle模块,通过调用bundle.getApplicationInfo()接口,通过Bundle名称获取应用信息。然后通过application.moduleSourceDirs获取应用存储路径。
适用于:Openharmony 3.2 Beta5 API 9
## FA卡片上架后在用户的服务中心展示时可否触发生命周期,从而实现用户没有打开过FA应用的情况下获取到用户的登录信息?
**问题现象**
适用于:OpenHarmony SDK 3.2.5.5版本, API8 FA模型
部署hap时,上报如下错误:
服务卡片在添加卡片后就触发了oncreate()生命周期,在不启用app的情况下也可以显示相关的用户信息-静默登录,但服务卡片目前要在app安装之后手动添加。
Failure
\[
INSTALL
\_
FAILED
\_
SIZE
\_
TOO
\_
LARGE
\]
error while deploying hap?
## 如何获取context
**解决措施**
适用于:OpenHarmony SDK 3.2.7.5版本, API9 Stage模型
将其拆分为多个HAP即可解决。
在MainAbility.ts文件中可以直接使用this.context获取context,在组件页面中可以使用getContext(this)获取context。
## 调用方使用startAbilityForResult时,被调用方如何返回数据
## 访问控制管理模块abilityAccessCtrl中grantUserGrantedPermission方法在API8语法校验提示未定义
适用于:Openharmony 3.2 Beta5 API 9
适用于:OpenHarmony SDK 3.0版本, API8 FA模型
**解决措施**
当前SDK有fullSDK和publicSDK两个版本,IDE默认下载的是publicSDK。其中,publicSDK版本不会包含系统API,如果要用系统API,需要使用fullSDK。具体参考
[
full-SDK替换指南
](
../quick-start/full-sdk-switch-guide.md
)
。
被调用方使用AbilityContext.terminateSelfWithResult方法,销毁被调用方ability,传递参数给startAbilityForResult回调函数
。
## public sdk支持哪几种ExtensionAbility(ServiceExtensionAbility、FormExtensionAbility、DataShareExtensionAbility)
**参考链接**
适用于:OpenHarmony SDK 3.2.5.6版本, API9 Stage模型
[
启动应用内的UIAbility并获取返回结果
](
../application-models/uiability-intra-device-interaction.md
)
上述ExtensionAbility 中,public sdk 仅可以使用FormExtensionAbility。ServiceExtensionAbility和DataShareExtensionAbility 为系统接口,需要使用full sdk。
Public SDK : 面向应用开发者提供,不包含需要使用系统权限的系统接口。
## 如何获取系统时间戳
Full SDK : 面向OEM厂商提供,包含了需要使用系统权限的系统接口。
适用于:Openharmony 3.2 Beta5 API 9
## 服务卡片无法循环播放gif图
**解决措施**
适用于:OpenHarmony SDK 3.2.5.6版本, API9 Stage模型
在Openharmony中使用@ohos.systemDateTime的getCurrentTime来获取系统系统时间和时区。
目前暂不支持播放GIF图片。
**代码示例**
## 如何通过卡片点击实现业务登录场景
使用@ohos.systemDateTime接口:
适用于:OpenHarmony SDK 3.2.5.5版本, API9 Stage模型
```
try {
systemDateTime.getCurrentTime(true, (error, time) => {
if (error) {
console.info(`Failed to get currentTime. message: ${error.message}, code: ${error.code}`);
return;
}
console.info(`Succeeded in getting currentTime : ${time}`);
});
} catch(e) {
console.info(`Failed to get currentTime. message: ${e.message}, code: ${e.code}`);
}
```
可以通过点击卡片拉起响应的Ability后,通过Ability来实现业务登录场景。
## 如何跳转到设置中应用详情页面
**参考链接**
使用于:OpenHarmony SDK 3.2.6.5版本
[
系统时间、时区
](
../reference/apis/js-apis-system-date-time.md#systemdatetimegetcurrenttime
)
参考如下代码实现,示例:
## 如何获取当前应用程序缓存目录
```
this.context.startAbility(
{
action: "action.settings.app.info",
parameters: { "settingsParamBundleName": "your app bundlename" }
})
```
适用于:Openharmony 3.2 Beta5 API 9
## 如何监听屏幕旋转
**解决措施**
使用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型
在Openharmony中使用Context.cacheDir获取应用程序的缓存目录。
参考如下代码实现,示例:
**参考链接**
```
let listener = mediaquery.matchMediaSync('(orientation: landscape)')
onPortrait(mediaQueryResult) {
if (mediaQueryResult.matches) {
// do something here
} else {
// do something here
}
}
listener.on('change', onPortrait)
```
[
cacheDir
](
../application-models/application-context-stage.md#获取应用开发路径
)
## 服务卡片生命周期回调函数在哪个js文件中调用
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
新建卡片时会生成一个FormAblity.ts文件,其中包含卡片对应的生命周期。
参考链接
[
FormExtensionAbility
](
../reference/apis/js-apis-app-form-formExtensionAbility.md
)
## 使用ServiceExtensionAbility和DataShareExtensionAbility的相关接口后DevEco Studio无法编译
适用于:Openharmony 3.2 Beta5 API 9
**问题现象**
使用ServiceExtensionAbility和DataShareExtensionAbility的相关接口后,DevEco Studio报错无法编译。
**问题原因**
当前SDK类型有:
-
public-sdk : 面向应用开发者提供,不包含需要使用系统权限的系统接口。
-
full-sdk : 面向OEM厂商提供,包含了需要使用系统权限的系统接口。
DevEco Studio默认下载是public-sdk。
**解决措施**
三方应用不支持开发ServiceExtensionAbility和DataShareExtensionAbility。若开发系统应用,请
[
下载full-sdk
](
../quick-start/full-sdk-switch-guide.md
)
。
## 如何获取应用级别的temp路径和files路径
适用于:OpenHarmony 3.2 Beta5
**解决措施**
通过应用上下文context获取。如:this.context.getApplicationContext.tempDir来获取temp路径;this.context.getApplicationContext.filesDir来获取files路径。
**参考链接**
[
获取应用开发路径
](
../application-models/application-context-stage.md#获取应用开发路径
)
## FA卡片上架后在用户的服务中心展示时可否触发生命周期,从而实现用户没有打开过FA应用的情况下获取到用户的登录信息
适用于:OpenHarmony 3.2 Beta 5 API 9
## 如何控制checkbox选中切换过程中阴影背景的大小
**问题现象**
使用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型
FA卡片的生命周期以及信息显示
设置checkbox组件padding属性,可控制阴影大小
**解决措施**
## 如何设置卡片背景为透明
服务卡片在添加卡片后就触发了oncreat()生命周期,在不启用app的情况下也可以显示相关的用户信息-静默登录,但服务卡片目前要在app安装之后手动添加。
适用:OpenHarmony SDK 3.2.5.5版本
## 如何通过卡片点击实现业务登录场景
适用于: OpenHarmony 3.2 Beta5 API 9
**解决措施**
可以先创建FA模型的卡片,步骤如下:
1.
实现卡片生命周期接口
2.
配置卡片配置文件
3.
卡片信息的持久化
4.
卡片数据交互
1.
在卡片根目录widget新建widget/resources/styles/default.json文件
5.
开发卡片页面
2.
在default.json中书写如下代码:
6.
开发卡片事件:通过点击卡片拉起响应的Ability后,通过Ability来实现业务登录场景
**参考链接**
[
FA卡片开发指导
](
../application-models/widget-development-fa.md
)
## 如何跳转到设置中应用详情页面
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
参考如下代码实现,示例:
```
{
"style": {
"app_background": "#00000000"
}
}
this.context.startAbility(
{
action: "action.settings.app.info",
parameters: { "settingsParamBundleName": "your app bundlename" }
}
)
```
## FA卡片如何的传参和接参
适用:OpenHarmony SDK 3.2.5.5版本
## stage模型,@Component组件内如何获取UIAbilityContext
使用featureAbility.getWant()和featureAbility.getContext()在json文件中router跳转发送数据,在js文件中用featureAbility方法接收
适用于:OpenHarmony 3.2 Beta5 API9
## router.disableAlertBeforeBackPage和router.enableAlertBeforeBackPage怎么触发
**解决措施**
适用:OpenHarmony SDK 3.2.5.5版本
可以通过UIAbility. Context获取。
需要满足两个条件
**代码示例**
1.
router.disableAlertBeforeBackPage和router.enableAlertBeforeBackPage类似一个开关,disableAlertBeforeBackPage是返回上一级页面时关闭弹窗提示,enableAlertBeforeBackPage是打开弹窗提示,默认是关闭的,当你需要使用时,首先要在一个函数里面开启功能,然后再执行跳转
```
import UIAbility from '@ohos.app.ability.UIAbility';
let UIAbilityContext = UIAbility.context;
let ApplicationContext = UIAbility.context.getApplicationContext();
@Entry
@Component
struct AbilityContextTest {
// abilityContext
@State UIabilityInfo: string = '获取 abilityInfo'
UIabilityContext: UIAbilityContext
aboutToAppear() {
// getContext获取Context,转为abilityContext
this.UIabilityContext = getContext(this) as UIAbilityContext
}
2.
必须要使用系统的返回按键才能触发效果。
build() {
Row() {
Column({ space: 20 }) {
Text(this.abilityInfo)
.fontSize(20)
.onClick(()=>{
this.UIabilityInfo = JSON.stringify(this.UIabilityContext.UIabilityInfo)
console.log(`ContextDemo abilityInfo= ${this.UIabilityInfo}`)
})
}
.width('100%')
}
.height('100%')
}
}
```
zh-cn/application-dev/faqs/faqs-arkui-web.md
0 → 100644
浏览文件 @
2a962933
# Web开发常见问题
## Web组件的onUrlLoadIntercept返回结果是否影响onInterceptRequest
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
Web组件的onUrlLoadIntercept的不同返回结果对应不同的操作:
-
onUrlLoadIntercept返回true则直接拦截URL请求。
-
onUrlLoadIntercept返回false走onInterceptRequest回调。
**参考链接**
[
onUrlloadIntercept
](
../reference/arkui-ts/ts-basic-components-web.md#onurlloadintercept
)
## 为什么Web组件的onKeyEvent键盘事件不生效
适用于:Openharmony 3.2 Beta5 API 9
**问题现象**
Web组件设置onKeyEvent监听键盘事件,键盘按下或抬起该事件不触发。
**解决措施**
onKeyEvent为通用事件,当前Web组件不支持通用事件。Web组件监听键盘事件可以使用onInterceptKeyEvent回调函数。
**参考链接**
[
onInterceptKeyEvent
](
../reference/arkui-ts/ts-basic-components-web.md#oninterceptkeyevent9
)
## onInterceptRequest拦截URL并自定义HTML文件,页面加载失败
适用于:Openharmony 3.2 Beta5 API 9
**问题现象**
onInterceptRequest拦截页面Web的src的链接后返回自定义HTML,但是自定义HTML文件里面的script标签里的内容没有加载。
**解决措施**
设置拦截器时,如果只设置setResponseData,内核将无法识别到这是个HTML文件,需要同时设置setResponseEncoding、setResponseMimeType、setResponseHeader等参数。
**代码示例**
```
Web({ src: 'www.example.com', controller: this.controller })
.onInterceptRequest((event) => {
console.log('url:' + event.request.getRequestUrl())
this.responseweb = new WebResourceResponse();
var head1:Header = {
headerKey:"Connection",
headerValue:"keep-alive"
}
var length = this.heads.push(head1)
this.responseweb.setResponseHeader(this.heads)
this.responseweb.setResponseData(this.webdata)
this.responseweb.setResponseEncoding('utf-8')
this.responseweb.setResponseMimeType('text/html')
this.responseweb.setResponseCode(200)
this.responseweb.setReasonMessage('OK')
return this.responseweb
})
```
**参考链接**
[
WebResourceResponse
](
../reference/arkui-ts/ts-basic-components-web.md#webresourceresponse
)
## 如何在ArkTS代码中执行HTML内的JS函数
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
通过WebviewController中runJavaScript方法异步执行JavaScript脚本,并通过回调方式获取执行结果。
>**说明:**
>runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。
**参考链接**
[
runJavaScript
](
../reference/apis/js-apis-webview.md#runjavascript
)
## 使用Web组件加载本地网页时,如何在本地网页中调用ArkTS中的函数
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
1.
准备一个html文件,例如:
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>标题</h1>
<h5 id="h5"></h5>
<h5 id = "h6"></h5>
<button onclick="handleFromH5">调用Arkts的方法</button>
<script type="text/javascript">
function handleFromH5(){
let result = window.objName.test();
document.getElementById('h6').innerHTML = result;
}
</script>
</body>
</html>
```
2.
在ArkTs中使用JavaScriptProxy方法将ArkTs里的对象注册到H5的window对象中,然后在h5中使用window对象调用该方法。比如下面例子,在ArkTs中将testObj这个对象以别名objName注册到h5的window对象上,在上面的h5中就可以使用window.objName去访问这个对象。
```
// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
controller: web_webview.WebviewController = new web_webview.WebviewController()
testObj = {
test: (data1, data2, data3) => {
console.log("data1:" + data1);
console.log("data2:" + data2);
console.log("data3:" + data3);
return "AceString";
},
toString: () => {
console.log('toString' + "interface instead.");
}
}
build() {
Row() {
Column() {
Web({ src:$rawfile('index.html'), controller:this.controller })
.javaScriptAccess(true)
.javaScriptProxy({
object: this.testObj,
name: "objName",
methodList: ["test", "toString"],
controller: this.controller,
})
}
.width('100%')
}
.height('100%')
}
}
```
**参考链接**
[
javaScriptProxy
](
../reference/arkui-ts/ts-basic-components-web.md#javascriptproxy
)
## Web组件domStorageAccess属性设置
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启,控制web网页中localStorage的使用,对sessionStorage未做控制
**参考链接**
[
domStorageAccess
](
../reference/arkui-ts/ts-basic-components-web.md#domstorageaccess
)
zh-cn/application-dev/faqs/faqs-arkui.md
0 → 100644
浏览文件 @
2a962933
此差异已折叠。
点击以展开。
zh-cn/application-dev/faqs/faqs-bundle-management.md
0 → 100644
浏览文件 @
2a962933
# 包管理开发常见问题
## 如何判断某个应用是否为系统应用
适用于OpenHarmony 3.2 Beta5 API 9
**解决措施**
使用bundleManager模块的getApplicationInfo接口(仅系统应用可以使用)获取待检验应用的ApplicaitonInfo,根据ApplicaitonInfo中systemApp字段判断,若为true,则是系统应用,否则为非系统应用。
**参考链接**
[
bundleManager模块
](
../reference/apis/js-apis-bundleManager.md
)
## 如何获取应用配置的versionCode和versionName
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
首先通过@ohos.bundle.bundleManager模块bundleManager.getBundleInfoForSelf
\(\)
接口获取包信息BundleInfo,然后分别通过BundleInfo.versionCode、BundleInfo.versionName获取所需信息。
**代码示例**
```
import bundleManager from '@ohos.bundle.bundleManager';
import hilog from '@ohos.hilog';
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT;
try {
bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
const versionCode = data.versionCode;
const versionName = data.versionName;
hilog.info(0x0000, 'testTag', `successfully. versionCode: ${versionCode}, versionName: ${versionName}`);
}).catch(err => {
hilog.error(0x0000, 'testTag', 'failed. Cause: %{public}s', err.message);
});
} catch (err) {
hilog.error(0x0000, 'testTag', 'failed: %{public}s', err.message);
}
```
**参考链接**
[
getBundleInfoForSelf
](
../reference/apis/js-apis-bundleManager.md#bundlemanagergetbundleinfoforself
)
## 如何获取应用自身的bundleName
适用于:Openharmony 3.2 Beta5 API9
**解决措施**
可以通过UIAbilityContext.abilityInfo.bundleName获取。
**代码示例**
```
import common from '@ohos.app.ability.common';
const context = getContext(this) as common.UIAbilityContext
console.log(`bundleName: ${context.abilityInfo.bundleName}`)
```
**参考链接**
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontext
)
、
[
AbilityInfo
](
../reference/apis/js-apis-bundleManager-abilityInfo.md#abilityinfo
)
## 如何获取App版本号,版本名,屏幕分辨率等信息
适用于:OpenHarmony 3.2 Beta5
**解决措施**
1.
通过@ohos.bundle.bundleManager模块中的bundleManager查询bundleInfo。
在bundleInfo中包含App版本号、版本名信息。
```
import bundleManager from '@ohos.bundle.bundleManager';
...
bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{
let versionName = bundleInfo.versionName;//应用版本名
let versionNo = bundleInfo.versionCode;//应用版本号
}).catch((error)=>{
console.error("get bundleInfo failed,error is "+error)
})
```
2.
在模块@ohos.app.ability.Configuration中获取screenDensity,其中包含屏幕分辨率信息。
```
import common from '@ohos.app.ability.common';
...
let context = getContext(this) as common.UIAbilityContext;
let screenDensity = context.config.screenDensity;
```
## 如何获取应用自身的源文件路径
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
-
方式一:使用应用上下文context获取。
```
this.uiAbilityContext.abilityInfo.applicationInfo.codePath
```
-
方式二:使用@ohos.bundle.bundleManager获取。
1. 导入@ohos.bundle.bundleManager模块,使用bundleManager.getBundleInfoForSelf\(\)获取bundleInfo信息。
2. 使用bundleInfo.appInfo.codePath获取应用源文件路径。
```
import bundleManager from '@ohos.bundle.bundleManager';
bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION).then((bundleInfo)=>{
this.sourcePath = bundleInfo.appInfo.codePath;
})
```
## 能否在本应用中获取到其他应用的HAP包信息
适用于:OpenHarmony 3.2 Beta API 9
根据OpenHarmony的安全设计规范,SDK不提供接口能力给三方应用查询其他应用的包信息(包括但不限于应用名称、版本号等)。
zh-cn/application-dev/faqs/faqs-bundle.md
已删除
100644 → 0
浏览文件 @
c7170386
# 应用程序包管理开发常见问题
## 如何获取应用配置的versionCode和versionName
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
通过@ohos.bundle模块bundle.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获取。
参考文档:
[
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接口获取待检验的应用的ApplicationInfo,根据ApplicationInfo中systemApp字段判断,若为true,则是系统应用,否则为非系统应用。
zh-cn/application-dev/faqs/faqs-connectivity.md
已删除
100644 → 0
浏览文件 @
c7170386
# 网络与连接开发常见问题
## 网络请求中extraData支持哪几种的数据格式
适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型
extraData代表发送请求的额外数据,支持如下数据:
1.
当HTTP请求为POST、PUT方法时,此字段为HTTP请求的content。
2.
当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT方法时,此字段为HTTP请求的参数补充,参数内容会拼接到URL中进行发送。
3.
开发者传入string对象,开发者需要自行编码,将编码后的string传入。
## 如何理解http请求的错误码28
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
错误码28代表CURLE_OPERATION_TIMEDOUT,操作超时。网络请求底层使用libcurl库,更多错误码可以查看相应文档。
参考文档:
[
Curl错误码
](
https://curl.se/libcurl/c/libcurl-errors.html
)
## \@ohos.net.http.d.ts的response错误码返回6是什么意思?
适用于:OpenHarmony SDK 3.2.3.5版本
6表示地址无法解析主机,可以尝试ping一下request中的url,确认是否可以ping通。
更多错误码参考
[
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))
})
```
zh-cn/application-dev/faqs/faqs-data-management.md
已删除
100644 → 0
浏览文件 @
c7170386
# 数据管理开发常见问题
## 如何将PixelMap的数据存储到数据库中
适用于:OpenHarmony SDK 3.2.3.5版本
PixelMap应该被转换成相应的ArrayBuffer再放进数据库。
参考文档:
[
readPixelsToBuffer
](
../reference/apis/js-apis-image.md#readpixelstobuffer7-1
)
## 如何获取rdb关系型数据库文件
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
开发者可使用hdc_std命令拷贝文件,其中文件路径为: /data/app/el2/100/database/包名/entry/db/ ,然后拷贝该路径下后缀为 .db、.db-shm、.db-wal的文件,拷贝完成后,可以通过SQLite工具打开该数据库文件。
示例:
```
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。
## Stage模型数据共享DataShare开发
适用于:OpenHarmony SDK 3.2.5.5版本,API 9
Stage模型DataShare不可与FA模型DataAbility混用,连接的服务端应用需使用DataShareExtensionAbility实现。
zh-cn/application-dev/faqs/faqs-development-board.md
已删除
100644 → 0
浏览文件 @
c7170386
# 开发板使用常见问题
## 如何获取开发板上截屏图片?
适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型
-
方法一:点击开发板下拉控制中心的截屏按钮,截屏图片通过相册可以查看。
-
方法二:通过截屏脚本一键截屏,可以在电脑上查看。操作方法:Windows上连接开发板,然后电脑上新建文本文件,拷贝如下脚本内容,文件名后缀改为.bat文件(需要提前配置好hdc的环境变量),点击运行后,截屏图片与脚本在同一目录。
示例:
```
set filepath=/data/%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%.png
echo %filepath%
: pause
hdc_std shell snapshot_display -f %filepath%
: pause
hdc_std file recv %filepath% .
: pause
```
## RK3568板子和previewer上展示的效果差异较大,如何把previewer的尺寸调整成实际板子一样。
适用于:IDE 3.0.0.991
1.
给预览器新建Profile
!
[
zh-cn_image_0000001361254285
](
figures/zh-cn_image_0000001361254285.png
)
2.
新建Profile的具体参数可参考如下配置:
Device type : default
Resolution: 720
\*
1280
DPI: 240
## 开发板安装驱动后设备仍然无法识别,设备管理器错误识别为其他设备:FT232R USB UART ()
可能原因:开发版的USB串口驱动没有安装。
解决办法:搜索FT232R USB UART确定,下载安装驱动即可。
## 在开发板上登录需要认证网络如何进行认证
适用于:OpenHarmony SDK 3.2.2.5版本
连接需要认证的网络后,用浏览器打开任意网址就可以进入认证页面。
如果开发板上没有浏览器,可以安装
[
浏览器Sample应用
](
https://gitee.com/openharmony/app_samples/tree/master/device/Browser
)
。
zh-cn/application-dev/faqs/faqs-device-management.md
已删除
100644 → 0
浏览文件 @
c7170386
# 设备管理开发常见问题
## 如何获取设备的dpi值
适用于:OpenHarmony 3.2 Beta5,API9 Stage模型
**问题现象**
获取设备的dpi信息。
**解决措施**
导入@ohos.display包,通过getDefaultDisplaySync方法获取。
**示例代码**
```
import display from '@ohos.display';
let displayClass = null;
try {
displayClass = display.getDefaultDisplaySync();
console.info('Test densityDPI:' + JSON.stringify(data.densityDPI));
} catch (exception) {
console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
}
```
## 如何获取当前运行设备类型
适用于: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
)
zh-cn/application-dev/faqs/faqs-dfx.md
浏览文件 @
2a962933
# DFX开发常见问题
##
程序打开直接崩溃了,如何定位问题
##
hilog日志如何落盘存储
使用于:OpenHarmony SDK 3.2.5.5版本
适用于:OpenHarmony 3.2Beta API 9
1.
通过业务日志打印,定位崩溃的代码位置。
**问题现象**
2.
通过Crash文件查看报错信息,Crash文件路径是:/data/log/faultlog/faultlogger/。
hilog日志如何落盘存储
## UiTest测试框架无法获取控件问题
**解决措施**
使用
于:OpenHarmony SDK 3.2.5.5版本
使用
命令:hilog -w start -f ckTest -l 1M -n 5 -m zlib -j 11
检查系统配置项 persist.ace.testmode.enabled 是开启。
文件保存在目录:/data/log/hilog/
通过hdc_std shell param get persist.ace.testmode.enabled 查看,若配置项为0,
参数解释:
可通过命令hdc_std shell param set persist.ace.testmode.enabled 1 开启配置。
```
-w 开启日志落盘任务,start表示开始,stop表示停止。
-f 设置日志文件名
-l 设置单个日志文件大小,单位可以是:B/K/M/G
-n 设置最大日志文件编号,当文件计数超过此编号时,日志文件旋转。范围:【2,1000】
-m 设置日志文件压缩算法
-j 任务ID,范围:[10,0xffffffffff)
更多参数含义请使用hilog --help查看。
```
## 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
zh-cn/application-dev/faqs/faqs-distributed-data-management.md
0 → 100644
浏览文件 @
2a962933
# 数据管理开发常见问题
## 关系型数据库rdb中如何进行加密
适用于:Openharmony 3.1 Beta5 API 9
**解决措施**
创建关系型数据库,可通过StoreConfig管理关系型数据库配置,其中encrypt属性指定数据库是否加密。
**参考链接**
[
关系型数据库
](
../reference/apis/js-apis-data-relationalStore.md#storeconfig
)
## 关系型数据库rdb中使用TRUNCATE TABLE语句无法清空表数据
适用于:OpenHarmony SDK 3.2.9.2版本,API9
**问题现象**
通过TRUNCATE TABLE语句清空表数据时报错。
**解决措施**
关系型数据库rdb使用Sqlite数据库, 它不支持 TRUNCATE TABLE 语句,建议使用delete语句,如:DELETE FROM sqlite
\_
sequence WHERE name = 'table
\_
name' ,另外发生该错误会抛出空异常。
## 关系型数据库rdb支持哪些数据类型
适用于:OpenHarmony SDK 3.0版本以上,API 9 Stage模型
**解决措施**
关系型数据库rdb支持的数据类型有:number、string、boolean。其中number为数字类型,支持Double,Long,Float,Int,Int64,最大精度为十进制17位数字。
## 如何将PixelMap的数据存储到数据库中
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
存储PixelMap的数据
**解决措施**
PixelMap应该被转换成相应的ArrayBuffer再放进数据库。
**参考链接**
[
readPixelsToBuffer
](
../reference/apis/js-apis-image.md#readpixelstobuffer7-1
)
## 如何获取rdb关系型数据库文件
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
关系型数据库的获取问题
**解决措施**
开发者可使用hdc命令拷贝文件,其中文件路径为: /data/app/el2/100/database/包名/entry/rdb/ ,然后拷贝该路径下的文件,拷贝完成后,可以通过SQLite工具打开该数据库文件。
示例:
```
hdc file recv /data/app/el2/100/database/<bundleName>/entry/db/<tableName> ./<path>
```
## 数据库在系统层面是否有锁机制,开发过程中是否需要关系数据库加锁问题
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
关系型数据库的加锁疑问
**解决措施**
系统提供的分布式数据服务、关系型数据库和首选项均有锁机制,开发者无需关注。
## 在@ohos.data.storage轻量级存储中,调用put方法保存数据后,再重启应用后调用get方法为什么无法获取到保存的值
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
关系型数据库的保存以及重启时的调用
**解决措施**
在storage轻量级存储中,调用put方法,只是将数据保存在内存中,并不会持久化到硬盘中,在退出应用后会将内存中的数据清空。如果想持久化到硬盘中,则在调用put方法后需要再调用flush或flushSync接口才行。数据持久化后重启应用时就可以通过get方法获取到之前保存的数据。
## rdb关系型数据库中TEXT类型保存超长文本失败
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
API8版本rdb关系型数据库中TEXT类型保存超长文本失败
**解决措施**
API9版本之前对TEXT文本存储长度限制在1024字节,所以会存在超长文本保存失败的情况。
在API9的版本中已经放开了长度限制。
zh-cn/application-dev/faqs/faqs-distributed-device-profile.md
0 → 100644
浏览文件 @
2a962933
# 分布式设备开发常见问题
## OpenHarmony设备如何查看IMEI号
适用于:Openharmony 3.2 Beta5 API 9
**解决方案**
通过HuksTag接口的HUKS
\_
TAG
\_
ATTESTATION
\_
ID
\_
IMEI参数可以获取。
[
参考文档
](
../reference/apis/js-apis-huks.md
)
zh-cn/application-dev/faqs/faqs-event-notification.md
浏览文件 @
2a962933
#
公共事件与
通知开发常见问题
#
事件
通知开发常见问题
##
emitter数据大小限制
##
如何封装一个通用的commonEvent工具类
适用于
:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
适用于
OpenHarmony 3.1 Beta5 API 9
emitter数据大小限制不超过10240。
**问题现象**
## 如何实现点击Notification通知打开对应App
封装一个通用的commonEvent工具类:希望在创建订阅者的同时注册一个自定义的回调函数,然后在收到事件通知的同时能调用这个自定义的回调函数。
适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型
**解决措施**
通过配置Notification.publish发布通知接口的参数NotificationRequest中wantAgent属性实现
```
import commonEvent from '@ohos.commonEventManager';
参考文档:
[
Notification
](
../reference/apis/js-apis-notification.md#notificationpublish
)
、
[
WantAgent
](
../reference/apis/js-apis-app-ability-wantAgent.md
)
export class SubscribeEvent {
private static subscriber = null
// 自定义的回调函数变量
private static callback = null
/**
* 创建订阅者
* @param subscribeInfo 订阅事件
* @callback 用户自定义回调函数
*/
static createSubscriber(subscribeInfo, callback:(a,b)=>void) {
this.callback = callback
commonEvent.createSubscriber(subscribeInfo, (err, subscriber) => {
if (err) {
console.error('CreateSubscriberCallBack err = ' + JSON.stringify(err))
} else {
this.subscriber = subscriber;
this.subscribe(this.subscriber)
console.info('Create subscriber succeed')
}
})
}
示例:
/**
* 订阅公共事件
* @param subscriber 订阅者
*/
private static subscribe(subscriber) {
if (subscriber != null) {
commonEvent.subscribe(subscriber, (err, data) => {
if (err) {
console.error('subscribe err = ' + JSON.stringify(err))
} else {
console.info('SubscribeCallBack data= ' + JSON.stringify(data))
this.callback('hello callback', data)
}
})
} else {
console.info("Need create subscriber")
}
}
}
```
ts
import
WantAgent
from
'
@ohos.app.ability.wantAgent
'
;
@Entry
@Component
struct Faq10_1 {
@State message: string = ''
async
function
publishNotification
()
{
let
wantAgentInfo
=
{
wants
:
[
{
bundleName
:
"
com.example.myapplication
"
,
abilityName
:
"
EntryAbility
"
,
build() {
Row() {
Column() {
Text('订阅:' + this.message)
.fontSize(30)
.fontWeight(FontWeight.Bold)
.onClick(() => {
let subscribeInfo = {
events: ["myEvent"]
};
let callback = (a,b) => {
this.message = a
}
SubscribeEvent.createSubscriber(subscribeInfo,callback)
})
Text('发布')
.fontSize(30)
.fontWeight(FontWeight.Bold)
.onClick(() => {
//公共事件相关信息
let options = {
code: 0, //公共事件的初始代码
data: "initial data",//公共事件的初始数据
isOrdered: true //有序公共事件
}
//发布公共事件回调
function publishCB(err) {
if (err) {
console.error(`publish failed, code is ${err.code}, message is ${err.message}`);
} else {
console.info("publish");
}
}
//发布公共事件
try {
commonEvent.publish("myEvent", options, publishCB);
} catch (err) {
console.error(`publish failed, code is ${err.code}, message is ${err.message}`);
}
})
}
],
operationType
:
WantAgent
.
OperationType
.
START_ABILITIES
,
requestCode
:
0
,
.width('100%')
}
.height('100%')
}
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
:
"
发送成功
"
})
}
```
**参考链接**
[
公共事件模块
](
../reference/apis/js-apis-commonEventManager.md
)
## 如何让事件只在一个UIAbility实例中传递
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
应该如何实现事件只在一个UIAbility实例中订阅和触发
**解决措施**
在UIAbility中使用EventHub订阅事件,EventHub模块提供了事件中心,提供订阅、取消订阅、触发事件的能力
**代码示例**
```
import UIAbility from '@ohos.app.ability.UIAbility';
export default class EntryAbility extends UIAbility {
onForeground() {
this.context.eventHub.on('myEvent', this.eventFunc);
// 结果:
// eventFunc is called,undefined,undefined
this.context.eventHub.emit('myEvent');
// 结果:
// eventFunc is called,1,undefined
this.context.eventHub.emit('myEvent', 1);
// 结果:
// eventFunc is called,1,2
this.context.eventHub.emit('myEvent', 1, 2);
}
eventFunc(argOne, argTwo) {
console.log('eventFunc is called, ${argOne}, ${argTwo}');
}}
```
**参考链接**
[
使用EventHub进行数据
](
../application-models/uiability-data-sync-with-ui.md#使用eventhub进行数据通信
)
zh-cn/application-dev/faqs/faqs-file-management.md
浏览文件 @
2a962933
# 文件管理开发常见问题
##
fileio.rmdir是递归删除吗?
##
如何获取系统截屏图片的保存路径
适用于
:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型
适用于
OpenHarmony 3.2 Beta5 API 9
是递归删除。
**解决措施**
## 如何实现如果文件不存在则创建文件
截图图片保存路径:/storage/media/100/local/files/Pictures/Screenshots/
适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型
## 如何修改设备中文件目录为可读写权限
可以通过调用函数fileio.open(filePath, 0o100, 0o666)来实现,第二个参数0o100表示若文件不存在,则创建文件。使用该选项时必须指定第三个参数 mode。
适用于OpenHarmony 3.2 Beta5 API 9
## 使用fileio进行文件复制,传入沙箱路径报错call fail callback fail, code: 202, data: json arguments illegal)
**问题现象**
适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型
使用hdc命令向设备上发送文件时,报错:权限不足。
使用fileio模块进行文件复制时,文件路径前缀中不能以“file:///”开头。
**解决措施**
## fileIo将数据写入流文件writeSync接口,length传参问题
输入命令 hdc shell mount -o remount,rw /,正确执行无提示信息。
适用于: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方法,没有收到返回,也没有捕获到异常是为什么
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
getAlbums方法需要权限:ohos.permission.READ_MEDIA,从
[
OpenHarmony权限定义列表
](
../security/permission-list.md
)
查询知道ohos.permission.READ_MEDIA权限是需要用户授权。
1.
在module.json5中配置权限:
```
"requestPermissions": [
{
"name": "ohos.permission.READ_MEDIA"
}
]
```
2.
在MainAbility.ts -
>
onWindowStageCreate页面加载前需要增加用户授权代码:
```
import abilityAccessCtrl from '@ohos.abilityAccessCtrl.d.ts';
private requestPermissions() {
let permissionList: Array<string> = [
"ohos.permission.READ_MEDIA"
];
let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(this.context, permissionList)
.then(data => {
console.info(`request permission data result = ${data.authResults}`)
})
.catch(err => {
console.error(`fail to request permission error:${err}`)
})
}
```
## 如何解决多次通过媒体库FetchFileResult获取文件应用崩溃
适用于:OpenHarmonySDK 3.2.5.5版本,API9 Stage模型
通过FetchFileResult.close()方法,在FetchFileResult对象每次调用完,释放并使其失效。
## 在Stage模型下调用mediaLibrary.getMediaLibrary()接口,IDE报错
适用于:OpenHarmonySDK 3.2.5.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属性进行排序。
zh-cn/application-dev/faqs/faqs-globalization.md
0 → 100644
浏览文件 @
2a962933
# 资源管理开发常见问题
## 如何读取rawfile中的xml文件并转化为String类型
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
通过resourceManager的getRawFileContent接口获取xml数据,再通过String.fromCharCode将获取的数据转化为String类型。
**代码示例**
```
resourceManager.getRawFileContent('test.xml', (error, value) => {
if (error != null) {
console.log("error is " + error);
} else {
let rawFile = value;
let xml = String.fromCharCode.apply(null, rawFile)
}
});
```
**参考链接**
[
资源管理
](
../reference/apis/js-apis-resource-manager.md
)
## Stage模型下如何获取资源
适用于:OpenHarmony 3.1 Beta5 API 9
**解决措施**
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()
})
```
## 如何通过接口获取resource目录的路径
适用于:Openharmony 3.1 Beta5 API 9
**问题现象**
希望获取resource目录的路径,从而使用文件管理接口操作文件。
**解决措施**
由于应用以hap形式进行安装,安装完成后不会解压hap包,所以在程序运行时无法获取resource路径。
可以考虑如下两种方式获取资源文件:
1.
使用
\$
r或者
\$
rawfile访问。适合静态访问,程序运行时不改变资源路径。
2.
使用ResourceManage访问。适合动态访问,程序运行时可动态改变资源路径。
**参考链接**
[
资源分类与访问
](
../quick-start/resource-categories-and-access.md
)
[
资源管理
]
(../reference/apis/js-apis-resource-manager.md)
## 资源管理内的getPluralString方法获取value值有误
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
getPluralString接口获取value值有误,显示复数值(other)。
**解决措施**
getPluralString接口只支持英文系统,不支持中文。
## 如何获取resources目录中自定义的string字段
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
使用ResourceManager模块的getStringValue方法获取。
**参考链接**
[
资源管理
](
../reference/apis/js-apis-resource-manager.md#getstringvalue9
)
## AppScope中的资源如图片,文字等如何引用
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
通过
\$
r
\(
'app.type.name'
\)
的形式来引用,type代表资源类型,如color,string,media等,name代表资源命名。
## Resource类型如何转为String
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
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 3.2 Beta5 API 9
form
\_
config.json文件中不支持使用
\$
引用常量。
zh-cn/application-dev/faqs/faqs-graphics.md
浏览文件 @
2a962933
# 图形图像开发常见问题
## 调用window实例的setSystemBarProperties接口时,设置isStatusBarLightIcon和isNavigationBarLightIcon属性不生效
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
状态栏字体高亮属性的本质就只是让字体变成白色。调用window实例的setSystemBarProperties接口时,如果设置了状态栏内容颜色statusBarContentColor,就以开发者设置的颜色为准,isStatusBarLightIcon状态栏字体高亮属性就不生效;同理,如果设置了导航栏内容颜色navigationBarContentColor,isNavigationBarLightIcon导航栏字体高亮属性就不生效。
## 如何设置系统状态栏样式
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
导入
\@
ohos.window模块,开发者可以使用window.setSystemBarProperties()接口设置状态栏样式属性,达到自定义样式的效果。
## 如何隐藏状态栏,实现沉浸式效果
适用于:OpenHarmony SDK 3.2.6.3版本,API9 Stage模型
1.
可以在onWindowStageCreate方法获取windowClass对象。
```
ts
onWindowStageCreate
(
windowStage
)
{
// Main window is created, set main page for this ability
console
.
log
(
"
[Demo] EntryAbility onWindowStageCreate
"
)
windowStage
.
getMainWindow
((
err
,
data
)
=>
{
if
(
err
.
code
)
{
console
.
error
(
'
Failed to obtain the main window.
'
)
return
;
}
// 获取到窗口对象
globalThis
.
windowClass
=
data
;
})
}
```
2.
设置窗口全屏,隐藏状态栏。
```
ts
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
));
});
```
## 如何获取设备的dpi值
适用于:OpenHarmony 3.2 Beta5,API 9 Stage模型
**解决措施**
导入@ohos.display包,通过getDefaultDisplaySync
\(\)
方法获取。
**代码示例**
```
import display from '@ohos.display';
let displayClass = null;
try {
displayClass = display.getDefaultDisplaySync();
console.info('Test densityDPI:' + JSON.stringify(displayClass.densityDPI));
} catch (exception) {
console.error('Failed to obtain the default display object. Code: ' + JSON.stringify(exception));
}
```
## 如何隐藏状态栏实现沉浸式效果
适用于:OpenHarmony 3.2 Beta5,API 9 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模型
适用于:OpenHarmony SDK 3.2
Beta5,API 9 Stage模型
通过
\@
ohos.window模块,可以使用getProperties()接口获取窗口属性,然后通过窗口属性的windowRect获取窗口宽高信息
**解决措施**
示例:
引入窗口模块@ohos.window,获取指定窗口对象Window后,在该对象上使用getWindowProperties
\(\)
获取窗口各个属性,在属性windowRect中获取窗口宽高信息。
**代码示例**
```
ts
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模型
参考如下方式实现,示例:
```
ts
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
}
`
)
})
import window from '@ohos.window';
let windowClass = null;
try {
let promise = window.getLastWindow(this.context);
promise.then((data)=> {
//获取窗口对象
windowClass = data;
try {
//获取窗口属性
let properties = windowClass.getWindowProperties();
let rect = properties.windowRect;
//rect.width: 窗口宽度;rect.height: 窗口高度
} catch (exception) {
console.error('Failed to obtain the window properties. Cause: ' + JSON.stringify(exception));
}
console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));
}).catch((err)=>{
console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));
});} catch (exception) {
console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception));
}
```
zh-cn/application-dev/faqs/faqs-ide.md
已删除
100644 → 0
浏览文件 @
c7170386
# IDE使用常见问题
## 如何解决报错“npm ERR! code SELF_SIGNED_CERT_IN_CHAIN”
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
1.
在Dev Eco Studio terminal中执行npm config set strict-ssl=false;
2.
在Dev Eco Studio terminal中执行npm install。
## 手工更新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
\b
uild-tools
\e
ts-loader目录下执行npm install;
2.
到SDK的js
\x
.x.x.x
\b
uild-tools
\a
ce-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
)
zh-cn/application-dev/faqs/faqs-international.md
已删除
100644 → 0
浏览文件 @
c7170386
# 国际化开发常见问题
## 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文件中不支持使用$引用常量。
zh-cn/application-dev/faqs/faqs-language.md
已删除
100644 → 0
浏览文件 @
c7170386
# 开发语言常见问题
## 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进行全局变量管理。
## 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;)。
## ArkTS如何把string转成byte数组
适用于:所有版本
参考如下代码实现,示例:
```
function stringToByte(str) {
var bytes = new Array();
var len,c;
len = str.length;
for(var i = 0;i<len;i++) {
c = str.charCodeAt(i);
if( c >= 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装饰符实现。
## 如何实现字符串编解码
适用于: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模型
不支持。
zh-cn/application-dev/faqs/faqs-media.md
已删除
100644 → 0
浏览文件 @
c7170386
# 媒体开发常见问题
## 如何设置前置拍照
适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型
1.
设置相机位置camera.CameraPosition.CAMERA_POSITION_FRONT
2.
根据相机位置和类型创建CameraInput实例
参考文档:
[
相机管理
](
../reference/apis/js-apis-camera.md
)
示例:
```
//默认设置后置相机,通过设置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接口,以动态弹窗的方式向用户申请授权。
```
import abilityAccessCtrl from '@ohos.abilityAccessCtrl.d.ts';
let permissions: Array<string> = ['ohos.permission.READ_MEDIA','ohos.permission.WRITE_MEDIA']
let atManager = abilityAccessCtrl.createAtManager();
// context为调用方UIAbility的UIAbilityContext
atManager.requestPermissionsFromUser(context, 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个媒体播放实例。
zh-cn/application-dev/faqs/faqs-multimedia.md
0 → 100644
浏览文件 @
2a962933
# 媒体开发常见问题
## 使用XComponent组件显示相机的预览输出流时,如何获取相机的帧数据
适用于:OpenHarmony 3.2 版本 API 9 Stage模型
**问题现象**
目前接口不支持实时预览相机的帧数据,只能绑定一个动作来获取,比如拍照动作。
**解决措施**
通过创建双路预览来实现。
1.
Xcomponent来创建预览流。
```
// 获取PreviewOutput(预览输出类)实例
const surfaceId = globalThis.mxXComponentController.getXComponentSurfaceld();
this.mPreviewOutput = await Camera.createPreviewOutput(surfaceld) ;
```
2.
使用imageReceiver来监听图像信息。
```
// 添加双路预览
const fullWidth = this.mFullScreenSize.width;
const fullHeight = this.mFullScreenSize.height;
const imageReceiver = await image.createImageReceiver(fullwidth, fullHeight,
formatImage, capacityImage) ;
const photoSurfaceId = await imageReceiver.getReceivingSurfaceld();
this.mPreviewOutputDouble = await Camera.createPreviewOutput ( photoSurfaceld)
```
## 如何获取前置摄像头的预览图像
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**解决措施**
1.
使用系统相机框架@ohos.multimedia.camera获取物理摄像头信息。
```
let cameraManager = await camera.getCameraManager(context);
let camerasInfo = await cameraManager.getSupportedCameras();
let cameraDevice = this.camerasInfo[0];
```
2.
创建并启动物理摄像头输入流通道。
```
let cameraInput = await cameraManager.createCameraInput(cameraDevice);
await this.cameraInput.open();
```
3.
拿到物理摄像头信息查询摄像头支持预览流支持的输出格式,结合XComponent提供的surfaceId创建预览输出通道。
```
let outputCapability = await this.cameraManager.getSupportedOutputCapability(cameraDevice);
let previewProfile = this.outputCapability.previewProfiles[0];
let previewOutput = await cameraManager.createPreviewOutput(previewProfile, previewId);
```
4.
创建相机会话,在会话中添加摄像头输入流和预览输出流,然后启动会话,预览画面就会在XComponent组件上送显。
```
let captureSession = await cameraManager.createCaptureSession();
await captureSession.beginConfig();
await captureSession.addInput(cameraInput);
await captureSession.addOutput(previewOutput);
await this.captureSession.commitConfig()
await this.captureSession.start();
```
## 如何设置相机焦距
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**解决措施**
1.
判断当前摄像头是否为前置摄像头,前置摄像头不支持设置焦距。
2.
通过captureSession.getZoomRatioRange
\(\)
接口获取设备焦距设置支持的最大、最小范围。
3.
判断目标焦距参数大小是否在步骤二获取的范围内,然后通过captureSession.setZoomRatio
\(\)
接口设置相机焦距。
## 如何后台播放音乐
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**问题现象**
无法后台播放音乐。
**解决措施**
AVSession对媒体播放做了管控,当三方应用从前台切入后台或者进入锁屏状态,媒体播放会被强制暂停而应用不感知,如果要开发后台播放功能,应该启动后台任务管理的长时任务中播放音乐,同时接入AVSession能力,允许控制中心的播控面板控制三方应用的播放功能。
**参考链接**
[
后台任务管理的长时任务开发指导参考
](
../task-management/continuous-task-dev-guide.md
)
[
AVSession开发指导参考
](
../media/using-avsession-developer.md
)
## 创建多个视频组件无法播放
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**问题现象**
创建十几个视频组件无法播放甚至崩溃。
**解决措施**
当前限制最多创建13个媒体播放实例。
## 如何直接调起图片库
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**解决措施**
```
let want = {
bundleName: 'com.ohos.photos',
abilityName: 'com.ohos.photos.MainAbility',
parameters: {
uri: 'detail'
}
};
let context = getContext(this) as common.UIAbilityContext;
context.startAbility(want);
```
zh-cn/application-dev/faqs/faqs-native.md
已删除
100644 → 0
浏览文件 @
c7170386
# 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
适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型
检查模块根目录(注意不是工程根目录)下的build-profile.json5文件,如果设备是32位,需要在abiFilters参数中配置armeabi-v7a,如果设备是64位,需要在abiFilters参数中配置arm64-v8a。
## 运行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模型
1.
在编译工具Hvigor脚本文件hvigorfile.js中,通过subModule.getPackageJsonPath方法获取module中package.json文件位置。
2.
使用nodejs能力读取package.json文件中version字段,写入build-profile.json5文件buildOption.cppFlags字段。
示例:
```
// module hvigorfile.js
const subModule = require('@ohos/hvigor')(__filename)
const fs = require("fs-extra")
const path = require("path")
const packageJsonPath = subModule.getPackageJsonPath()
const buildProfilePath = path.resolve(packageJsonPath, '../build-profile.json5')
const packageJsonData = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
let buildProfileData = fs.readFileSync(buildProfilePath, 'utf8')
buildProfileData = buildProfileData.replace(/\"cppFlags\"\:(.*)\,/, `"cppFlags": "-D NWEBEX_VERSION=${packageJsonData.version}",`)
fs.writeFileSync(buildProfilePath, buildProfileData, 'utf8')
const ohosPlugin = require('@ohos/hvigor-ohos-plugin').hapTasks(subModule) // 该插件执行了C++编译任务,读取了build-profile.json5文件
module.exports = {
ohos: ohosPlugin
}
```
```
// hello.cpp 读取
#define _NWEBEX_VERSION(v) #v
#define _NWEBEX_VER2STR(v) _NWEBEX_VERSION(v)
static napi_value Add(napi_env env, napi_callback_info info)
{
napi_value fixed_version_value = nullptr;
napi_create_string_utf8(env, _NWEBEX_VER2STR(NWEBEX_VERSION), NAPI_AUTO_LENGTH, &fixed_version_value);
return fixed_version_value;
}
```
## 如何遍历rawfiles中的文件
适用于:OpenHarmony SDK 3.2版本以上,API9 Stage模型
使用Native API中的OH_ResourceManager_OpenRawDir()方法获取到rawfile的根目录,然后对其进行遍历。可参考文档:
[
Native开发指导
](
../reference/native-apis/rawfile.md
)
zh-cn/application-dev/faqs/faqs-network-management.md
0 → 100644
浏览文件 @
2a962933
# 网络管理开发常见问题
## http网络请求中extraData支持的数据格式有哪些
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
extraData代表发送请求的额外数据,支持如下数据:
-
当HTTP请求为POST、PUT方法时,此字段为HTTP请求的content。
-
当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT方法时,此字段为HTTP请求的参数补充,参数内容会拼接到URL中进行发送。
-
开发者传入string对象,开发者需要自行编码,将编码后的string传入。
## http请求的错误码28是什么意思
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
发起http请求后报错,错误码28。
**解决措施**
错误码28代表CURLE
\_
OPERATION
\_
TIMEDOUT,操作超时。网络请求底层使用libcurl库,更多错误码可以查看相应文档。
**参考链接**
[
http常见响应码
](
../reference/apis/js-apis-http.md#responsecode
)
和
[
Curl错误码
](
https://curl.se/libcurl/c/libcurl-errors.html
)
## http请求中response错误码返回6是什么意思
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
发起http请求后,返回信息中response错误码为6。
**解决措施**
错误码6表示地址无法解析主机,可以尝试ping一下request中的URL,确认是否可以ping通。
**参考链接**
更多错误码参考
[
Response常用错误码
](
../reference/apis/js-apis-http.md#responsecode
)
或者
[
Curl错误码
](
https://curl.se/libcurl/c/libcurl-errors.html
)
## @ohos/axios三方件post请求queryParams参数场景下如何传参
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
三方件@ohos/axios中发起post请求,以queryParams形式传递参数(将参数拼接在URL后)。
**解决措施**
-
方式一:使用axios.post接口只接收一个参数,Url.URLSearchParams需要转成字符串拼接在url后面。
```
let params:Url.URLSearchParams = new Url.URLSearchParams()
params.append('ctl', 'sug')
params.append('query', 'wangjunkai')
params.append('cfrom', '1099a')
axios.post('http://10.100.195.234:3000/save?' + params.toString()).then(res => {
this.message = "request result: " + JSON.stringify(res.data);
}).catch(err => {
this.message = "request error: " + err.message;
})
```
-
方式二:使用axios接口只接收一个config对象,请求参数写在config对象的params中。
```
axios({
url: 'http://10.100.195.234:3000/save',
method: 'post',
params: {
ctl: 'sug',
query: 'wangjunkai',
cfrom: '1099a'
}
}).then(res => {
this.message = "request result: " + JSON.stringify(res.data);
}).catch(err => {
this.message = "request error: " + err.message;
})
```
## connection.getNetCapabilities\(mNetHandle\)无法正常返回结果
适用于:OpenHarmony 3.2 beta2 API 9
**问题现象**
在网络连接管理中,调用connection.getNetCapabilities
\(\)
函数时无法取到数据。
**原因分析**
this指向存在问题,用
\(
err,data
\)
=
\>\{\}
可以进入回调函数并且拿到返回结果数据,不能使用function
\(
err,data
\)
,因为function声明的函数内存在自己的this,无法指向全局的this。
**解决措施**
getNetCapabilities的第二个参数把function
\(
err,data
\)
改成
\(
err,data
\)
。
## http请求如何以json形式进行传输
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
在HTTP协议消息头中,使用Content-Type来表示媒体类型信息。它被用来告诉服务端如何处理请求的数据,以及告诉客户端(一般是浏览器)如何解析响应的数据,比如显示图片,解析html或仅仅展示一个文本等。
设置该参数值为application/json,请求中的数据就会以json形式进行传输。
```
this.options = {
method: http.RequestMethod.GET,
extraData: this.extraData,
header: { 'Content-Type': 'application/json' },
readTimeout: 50000,
connectTimeout: 50000
}
```
## 调用camera拍摄的照片如何上传到服务器
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
应用调用摄像头拍照后如何将图片上传到服务器?
**解决措施**
启动应用,获取权限后系统会访问远程服务器,将拍摄照片保存在本地,通过上传接口将文件从个人手机传送至远程服务器。
**参考链接**
[
上传下载
](
../reference/apis/js-apis-request.md
)
## 手机网络正常,调用connection.hasDefaultNet\(\)接口失败
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
手机可以上网,浏览器可以正常打开网页,但是hasDefaultNet这个方法调用失败,回调函数走到了失败的回调。
**解决措施**
connection.hasDefaultNet 接口需要注明需要权限ohos.permission.GET
\_
NETWORK
\_
INFO
权限申请链接:
[
访问控制授权申请
](
../security/accesstoken-guidelines.md
)
## 如何理解connection.getDefaultNet返回对象netHandle中的netId
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
netId的值如0、100分别代表什么含义?
**解决措施**
正常情况下,netHandle里的netId为0时表示没联网,大于等于100时为有网状态。
## 如何使用http请求从网络上获取数据
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
使用@ohos.net.http模块来发起http网络请求。
1.
导入http模块,创建http请求对象。
2.
设置请求地址URLl和参数,发起http请求。
3.
获取请求结果response,并解析数据。
**参考链接**
详细信息请参考:
[
http数据请求
](
../connectivity/http-request.md
)
## 如何使用JS封装网络请求
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
OpenHarmony网络请求支持JS语言开发方式,可直接使用。具体使用参考如下文档:
[
网络连接
](
../reference/apis/js-apis-http.md
)
## 基于JS开发智能手表应用,如何编写网络请求
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
OpenHarmony网络请求支持JS语言开发方式,可直接使用。具体使用参考如下文档:
[
网络连接
](
../reference/apis/js-apis-http.md
)
## 应用增加权限"ohos.permission.NOTIFICATION\_CONTROLLER",编译后无法启动
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
启动报错:error: install failed due to grant request permissions failed.
**解决措施**
权限"ohos.permission.NOTIFICATION
\_
CONTROLLER为系统级“system core”权限,第三方应用无法获取该权限。
## WiFi模块中使用wifi.getIpInfo\(\).ipAddress报错
适用于:OpenHarmony 3.2Beta API 9
**问题现象**
WiFi模块中使用wifi.getIpInfo
\(\)
.ipAddress,报错Error: assertion
\(
wifiDevicePtr != nullptr
\)
failed: Wifi device instance is null
**解决措施**
权限不足。请先检查是否申请了相关的操作权限,权限相关信息可参考
[
权限管理
](
../security/accesstoken-overview.md
)
。
zh-cn/application-dev/faqs/faqs-sdk.md
0 → 100644
浏览文件 @
2a962933
# SDK使用常见问题
## cmake中arm64-v8a/armeabi-v7a这层目录的宏定义是什么
适用于:OpenHarmony 3.1 Beta5 API 9
**解决方案**
arm64-v8a及armeabi-v7a目录如下所示:
```
entry
├─ libs
│ ├─ arm64-v8a
│ │ └─ libMyDemo.so
│ └─ armeabi-v7a
│ └─ libMyDemo.so
└─ src
└─ main
└─ cpp
└─ CMakeLists.txt
```
访问到目录的宏定义为:
\$\{
CMAKE
\_
CURRENT
\_
SOURCE
\_
DIR
\}
/../../../libs/$
\{
OHOS
\_
ARCH
\}
/xxxx.so
CMAKE
\_
CURRENT
\_
SOURCE
\_
DIR:CMakeList.txt文件所在目录。
OHOS
\_
ARCH:设置应用程序二进制接口ABI,类型为 armeabi-v7a、arm64-v8a,默认值是 arm64-v8a。
**使用示例**
CMakeLists.txt 中添加链接库。
```
target_link_libraries(entry PUBLIC
libace_napi.z.so
libhilog_ndk.z.so
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libMyDemo.so
)
```
zh-cn/application-dev/faqs/faqs-security.md
0 → 100644
浏览文件 @
2a962933
# 安全基础能力开发常见问题
## HUKS中AES GCM模式加密,单次最多可对多少字节数据加密
适用于:OpenHarmony 3.1 Beta5 API 9
**解决措施**
HUKS中AES GCM模式加密时,单次最多可对64字节的数据进行加密。
**代码示例**
```
/* 进行密钥加密操作 */
await huks.init(srcKeyAlias, encryptOptions).then((data) => {
console.info(`test init data: ${JSON.stringify(data)}`);
handle = data.handle;
}).catch((err) => {
console.info('test init err information: ' + JSON.stringify(err));
});
encryptOptions.inData = aesCipherStringToUint8Array(cipherInData.slice(0,64)); // 截取64字节
await huks.update(handle, encryptOptions).then(async (data) => {
console.info(`test update data ${JSON.stringify(data)}`);
encryptUpdateResult = Array.from(data.outData);
}).catch((err) => {
console.info('test update err information: ' + err);
});
encryptOptions.inData = aesCipherStringToUint8Array(cipherInData.slice(64,80)); // 剩余数据
```
## 在CryptoFramework中,打印Md的digest接口返回结果为乱码
适用于:OpenHarmony 3.1 Beta5 API 9
**问题现象**
在CryptoFramework中,打印Md的digest接口返回结果显示为乱码,无法识别。
**解决措施**
digest接口返回的Md计算结果DataBlob是Uint8Array类型,需要转成十六进制字符串再打印,也可以用网页在线版MD5加密工具验证结果。
zh-cn/application-dev/faqs/faqs-sensor.md
0 → 100644
浏览文件 @
2a962933
# 泛Sensor服务开发常见问题
## 是否对个人开发者开放PPG和ECG血压监测传感器的的数据获取接口
适用于OpenHarmony 3.1 Beta5 API 9
PPG和ECG的血压监测传感器属于可穿戴设备传感器,传感器数据设计个人隐私数据,暂未对个人开发者开放接口。
zh-cn/application-dev/faqs/faqs-startup.md
0 → 100644
浏览文件 @
2a962933
# 启动恢复开发常见问题
## 如何获取设备系统版本
适用于Openharmony 3.2 Beta5 API 9
**解决措施**
可通过
[
deviceInfo
](
../reference/apis/js-apis-device-info.md
)
对象的osFullName属性获取设备系统版本。
**代码示例**
```
import deviceInfo from '@ohos.deviceInfo'
let v = deviceInfo.osFullName
```
## OpenHarmony设备如何获取UDID
适用于Openharmony 3.2 Beta5 API 9
**解决措施**
-
方式一:通过命令行(hdc shell bm get --udid)查询。
-
方式二:在代码中获得,请参考文档
[
udid
](
../reference/apis/js-apis-device-info.md
)
。
## 如何获取设备信息
适用于Openharmony 3.2 Beta5 API 9
可以使用deviceInfo模块获取设备信息,如设备型号等。
**参考链接**
[
设备信息
](
../reference/apis/js-apis-device-info.md
)
## 开发中如何实现App不被屏保中断
适用于Openharmony 3.2 Beta5 API 9
**解决方案**
输入命令hdc shell "power-shell setmode 602" 可达到不息屏的效果。
zh-cn/application-dev/faqs/faqs-third-fourth-party-library.md
0 → 100644
浏览文件 @
2a962933
# 三四方库使用常见问题
## 如何获取可用的三方库
适用于OpenHarmony 3.1 Beta5 API 9
通过ohpm可以获取的三四方库在Gitee上做了汇总(
[
OpenHarmony上可直接使用的三方组件汇总
](
https://gitee.com/openharmony-tpc/tpc_resource
)
),针对于不同功能三方库内容做了分类,开发者可以根据需要进行参考。
## 网络相关的三方库有哪些
适用于OpenHarmony 3.1 Beta5 API 9
网络相关的三方库有
[
Axios
](
https://gitee.com/openharmony-sig/axios
)
、httpclient、okdownload等,具体分类可以参考
[
三四方库网络分类
](
https://gitee.com/openharmony-tpc/tpc_resource?_from=gitee_search#%E7%BD%91%E7%BB%9C
)
。
## 如何使用ohpm引入三四方库
适用于OpenHarmony 3.1 Beta5 API 9
**解决措施**
-
方式一:
1.
打开Terminal窗口,通过如下指令进入到entry目录。
```
cd entry
```
2. 以引入“dayjs”为例,执行以下指令进行安装。
```
ohpm install dayjs
```
3. 在对应的js文件中直接引用。
```
import dayjs from 'dayjs';
```
-
方式二:
1.
打开工程目录下的entry目录,找到该目录下的oh-package.json5文件。
2.
在oh-package.json5文件中写入想要安装的三方库,以“dayjs”为例,示例如下:
```
{
"dependencies": {
"dayjs": "^1.10.4",
}
}
```
3. 打开Terminal窗口,通过如下指令进入到entry目录。
```
cd entry
```
4. 执行指令进行安装。
```
ohpm install
```
5. 在对应的js文件中直接引用。
```
import dayjs from 'dayjs';
```
zh-cn/application-dev/faqs/faqs-third-party-library.md
已删除
100644 → 0
浏览文件 @
c7170386
# 三四方库使用常见问题
## 报错“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模型,无法使用。
## 项目是否支持传递依赖
适用于:OpenHarmony SDK 3.2.5.3版本,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';
```
zh-cn/application-dev/faqs/faqs-ui-ets.md
已删除
100644 → 0
浏览文件 @
c7170386
此差异已折叠。
点击以展开。
zh-cn/application-dev/faqs/faqs-ui-js.md
已删除
100644 → 0
浏览文件 @
c7170386
# UI框架(JS)开发常见问题
## 如何取出xml文件中对应的字段
适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型
convertxml中convert方法提供了转换xml文本为JavaScript对象的能力。
示例:
```
import convertxml from '@ohos.convertxml';
// xml格式的字符串
let xml =
'<?xml version="1.0" encoding="utf-8"?>' +
'<note importance="high" logged="true">' +
' <title>Happy</title>' +
' <todo>Work</todo>' +
' <todo>Play</todo>' +
'</note>';
let conv = new convertxml.ConvertXML();
// 转换选项, 参考文档使用
let options = {
trim: false,
declarationKey: "_declaration",
instructionKey: "_instruction",
attributesKey: "_attributes",
textKey: "_text",
cdataKey: "_cdata",
doctypeKey: "_doctype",
commentKey: "_comment",
parentKey: "_parent",
typeKey: "_type",
nameKey: "_name",
elementsKey: "_elements"
}
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字段内容
```
参考文档:
[
xml转换JavaScript
](
../reference/apis/js-apis-convertxml.md
)
## 如何将时间转为时分秒格式
示例:
```
export default class DateTimeUtil{
/**
* 时分秒
*/
getTime() {
const DATETIME = new Date()
return this.concatTime(DATETIME.getHours(),DATETIME.getMinutes(),DATETIME.getSeconds())
}
/**
* 年月日
*/
getDate() {
const DATETIME = new Date()
return this.concatDate(DATETIME.getFullYear(),DATETIME.getMonth()+1,DATETIME.getDate())
}
/**
* 日期不足两位补充0
* @param value-数据值
*/
fill(value:number) {
return (value> 9 ? '' : '0') + value
}
/**
* 年月日格式修饰
* @param year
* @param month
* @param date
*/
concatDate(year: number, month: number, date: number){
return `${year}${this.fill(month)}${this.fill(date)}`
}
/**
* 时分秒格式修饰
* @param hours
* @param minutes
* @param seconds
*/
concatTime(hours:number,minutes:number,seconds:number){
return `${this.fill(hours)}${this.fill(minutes)}${this.fill(seconds)}`
}
}
```
\ No newline at end of file
zh-cn/application-dev/faqs/faqs-web-arkts.md
已删除
100644 → 0
浏览文件 @
c7170386
# 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
)
zh-cn/application-dev/faqs/faqs-window-manager.md
0 → 100644
浏览文件 @
2a962933
# 窗口管理开发常见问题
## 如何获取状态栏和导航栏高度
适用于OpenHarmony 3.2 Beta5 API 9
**解决措施**
在加载窗口内容之前,采用systemAvoidAreaChange事件监听。
**代码示例**
```
// MainAbility.ts
import
window
from
'@ohos.window'
;
/**
* 设置沉浸式窗口,并获取状态栏和导航栏高度
* @param mainWindow 主窗口对象
*/
async
function
enterImmersion
(
mainWindow
:
window
.
Window
)
{
mainWindow
.
on
(
"systemBarTintChange"
,
(
data
)
=>
{
let
avoidAreaRect
=
data
.
regionTint
[
0
]
.
region
;
//data.regionTint是个数组,包含状态栏、导航栏的矩形区域坐标。
})
await
mainWindow
.
setFullScreen
(
true
)
await
mainWindow
.
setSystemBarEnable
([
"status"
,
"navigation"
])
await
mainWindow
.
systemBarProperties
({
navigationBarColor
:
"#00000000"
,
statusBarColor
:
"#00000000"
,
navigationBarContentColor
:
"#FF0000"
,
statusBarContentColor
:
"#FF0000"
})
}
export
default
class
MainAbility
extends
Ability
{
// do something
async
onWindowStageCreate
(
windowStage
:
window
.
WindowStage
)
{
let
mainWindow
=
await
windowStage
.
getMainWindow
()
await
enterImmersion
(
mainWindow
)
windowStage
.
loadContent
(
'pages/index'
)
}
// do something
}
```
## 应用如何设置隐藏顶部的状态栏
适用于OpenHarmony 3.2 Beta5 API 9
**解决措施**
在UIAbility的onWindowStageCreate的生命周期中设置setWindowSystemBarEnable接口即可。
**代码示例**
```
onWindowStageCreate(windowStage){
windowStage.getMainWindowSync().setWindowSystemBarEnable([])
......
}
```
**参考链接**
[
窗口基础能力文档
](
../reference/apis/js-apis-window.md
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录