未验证 提交 e1510bef 编写于 作者: O openharmony_ci 提交者: Gitee

!11242 FAQ文档更新

Merge pull request !11242 from zengyawen/master
# 常见问题
- [开发语言常见问题](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)
......
# 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_check-->
\ No newline at end of file
# 应用程序包管理开发常见问题
## 如何获取应用配置的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_check-->
\ No newline at end of file
# 网络与连接开发常见问题
## 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_check-->
\ No newline at end of file
......@@ -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/&lt;userId默认是100&gt;/database/&lt;bundleName&gt;
或找到沙箱路径:
a. 执行 ps -ef | grep hapName 命令找到对应应用的进程ID,
b. 数据库沙箱路径为:/proc/&lt;应用进程ID&gt;/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_check-->
\ No newline at end of file
......@@ -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_check-->
\ No newline at end of file
# 设备管理开发常见问题
## 如何获取设备的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_check-->
\ No newline at end of file
# 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_check-->
\ No newline at end of file
# 公共事件与通知开发常见问题
## 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_check-->
\ No newline at end of file
# 文件管理开发常见问题
## 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_check-->
\ No newline at end of file
# 图形图像开发常见问题
## 调用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_check-->
\ No newline at end of file
# 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_check-->
\ No newline at end of file
# 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 &lt;options&gt;
适用于: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_check-->
\ No newline at end of file
# 国际化开发常见问题
## 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_check-->
\ No newline at end of file
# 开发语言常见问题
## 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: () =&gt; 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<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装饰符实现。
参考文档:[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模型
不支持。
<!--no_check-->
# 媒体开发常见问题
## 如何设置前置拍照
适用于: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<string> = ['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_check-->
\ No newline at end of file
# 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_check-->
\ No newline at end of file
# 三四方库使用常见问题
## 报错“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_check-->
\ No newline at end of file
# 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_check-->
\ No newline at end of file
# 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_check-->
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册