未验证 提交 4e9c99f3 编写于 作者: Z zengyawen 提交者: Gitee

update faqs

Signed-off-by: Nzengyawen <zengyawen1@huawei.com>
上级 e561d51f
......@@ -5,3 +5,47 @@
适用于:OpenHarmony 3.1 Beta5 API 9
在系统设置修改了应用权限,三方应用无法监听到权限变化的。
## 应用申请LOCATION位置信息权限为什么没有弹窗
适用于:OpenHarmny 3.2 Release API 9
使用API version 9以下版本的SDK开发的应用,可以直接申请ohos.permission.LOCATION权限。
使用API version 9及API version 9以上版本的SDK开发的应用,需要先申请权限ohos.permission.APPROXIMATELY\_LOCATION,才可申请此权限。
**参考链接**
[应用权限列表](../security/permission-list.md#ohospermissionlocation)
## 向用户申请授予权限但被用户拒绝后,如何处理才能避免应用二次进入时崩溃
适用于:OpenHarmony SDK 3.2 Beta5
**可能原因**
- 业务功能所需要的权限被用户拒绝后不再弹窗请求权限而是直接返回结果。
- 若开发者在请求权限后未进行相关判断,会导致应用直接访问受权限管控的目标对象,此时应用可能会因为没有对应权限而被拒绝访问,从而导致应用意外终止。
**解决措施**
1. 应用在调用受权限保护的接口前,需要先校验应用是否已经获取该权限。如果校验结果显示,应用已经获取了该权限,那么应用可以直接访问该目标接口,否则,应用需要通过动态弹框先申请用户授权,并根据授权结果进行相应处理。
2. 如果用户拒绝授予某个权限时,需要确保与此权限无关的其他业务功能应能正常使用,不能影响应用的正常注册或登录。
3. 当用户主动触发使用此业务功能或为实现业务功能所必须时,应用程序可通过界面内文字引导,让用户主动到“系统设置”中授权。
**参考链接**
[访问控制(权限)开发概述](../security/accesstoken-overview.md)
## module.json5配置文件中extensionAbilities和requestPermissions的权限声明有何区别
适用于:OpenHarmony SDK 3.2 Beta5
- requestPermissions:标识当前应用运行时需向系统申请的权限集合,应用申请的权限只有在此处配置的才会生效。
- extensionAbilitie.permissions:标识当前ExtensionAbility组件自定义的权限信息,表示当其他应用访问该ExtensionAbility时,需要申请相应的权限信息,仅做权限校验使用。
**参考链接**
[module.json5配置文件](../quick-start/module-configuration-file.md)
......@@ -268,6 +268,56 @@ DevEco Studio默认下载是public-sdk。
[获取应用开发路径](../application-models/application-context-stage.md#获取应用开发路径)
## terminateSelf方法销毁当前应用之后并没有在后台任务列表中删除
适用于:OpenHarmony 3.2 Beta5
**解决措施**
在当前应用对应UIAbility的module.json5配置文件中,配置abilities标签的removeMissionAfterTerminate字段,设置为true即为销毁应用的同时删除应用快照记录,缺省值为false。
**参考链接**
[module.json5配置文件](../quick-start/module-configuration-file.md)
## Stage模型下开发的应用如何拉起 FA 模型开发的应用
适用于:OpenHarmony 3.2 Beta 5,API 9
**问题现象**
已在stage模型下的应用如何拉起FA模型
**解决措施**
该功能目前已支持,具体实现可参考如下代码:
示例:
```
let want = {
deviceId: "", // deviceId为空表示本设备
bundleName: "com.example.myapplication",
abilityName: "EntryAbility",
moduleName: "Module1", // moduleName非必选
parameters: { // 自定义信息
},
}
// context为意图拉起的FA模型的AbilityContext
context.startAbility(want).then(() => {
...
}).catch((err) => {
...
})
```
## 原子化服务是否可以全程使用js实现
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
目前新建的卡片的目录结构都是css+hml+json,不能完全靠js实现,事件的触发和参数的传递都可以在json文件里面处理。
## FA卡片上架后在用户的服务中心展示时可否触发生命周期,从而实现用户没有打开过FA应用的情况下获取到用户的登录信息
......@@ -279,7 +329,44 @@ FA卡片的生命周期以及信息显示
**解决措施**
服务卡片在添加卡片后就触发了oncreat()生命周期,在不启用app的情况下也可以显示相关的用户信息-静默登录,但服务卡片目前要在app安装之后手动添加。
服务卡片在添加卡片后就触发了oncreat\(\)生命周期,在不启用app的情况下也可以显示相关的用户信息-静默登录,但服务卡片目前要在app安装之后手动添加。
## JS/ArkTS跳转到其他应用时报错“\[c4d4d3492eb8531, 0, 0\] ContextDeal::startAbility fetchAbilities failed”
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
JS/ArkTS跳转时, startAbility报错
**解决措施**
一般用startAbility,实现如下:
```
import featureAbility from '@ohos.ability.featureAbility'
function onStartRemoteAbility() {
console.info('onStartRemoteAbility begin');
let params;
let wantValue = {
bundleName: 'ohos.samples.etsDemo',
abilityName: 'ohos.samples.etsDemo.RemoteAbility',
deviceId: getRemoteDeviceId(),
parameters: params
};
console.info('onStartRemoteAbility want=' + JSON.stringify(wantValue));
featureAbility.startAbility({
want: wantValue
}).then((data) => {
console.info('onStartRemoteAbility finished, ' + JSON.stringify(data));
});
console.info('onStartRemoteAbility end');
}
```
**参考链接**
可参考[启动本地PageAbility](../application-models/start-local-pageability.md)
## 如何通过卡片点击实现业务登录场景
......@@ -332,30 +419,28 @@ this.context.startAbility(
**代码示例**
```
import UIAbility from '@ohos.app.ability.UIAbility';
import common from '@ohos.app.ability.common';
let UIAbilityContext = UIAbility.context;
let ApplicationContext = UIAbility.context.getApplicationContext();
@Entry
@Component
struct AbilityContextTest {
// abilityContext
@State UIabilityInfo: string = '获取 abilityInfo'
UIabilityContext: UIAbilityContext
@State UIAbilityInfo: string = '获取 abilityInfo'
UIAbilityContext: common.UIAbilityContext
aboutToAppear() {
// getContext获取Context,转为abilityContext
this.UIabilityContext = getContext(this) as UIAbilityContext
// getContext获取Context,转为abilityContext
this.UIAbilityContext = getContext(this) as common.UIAbilityContext
}
build() {
Row() {
Column({ space: 20 }) {
Text(this.abilityInfo)
Text(this.UIAbilityInfo)
.fontSize(20)
.onClick(()=>{
this.UIabilityInfo = JSON.stringify(this.UIabilityContext.UIabilityInfo)
console.log(`ContextDemo abilityInfo= ${this.UIabilityInfo}`)
.onClick(() => {
this.UIAbilityInfo = JSON.stringify(this.UIAbilityContext.abilityInfo)
console.log(`ContextDemo abilityInfo = ${this.UIAbilityInfo}`)
})
}
.width('100%')
......@@ -364,3 +449,51 @@ struct AbilityContextTest {
}
}
```
## 后台长时任务启动失败
适用于:OpenHarmony 3.2 Release API9
**问题现象**
调用featureAbility.startAbility\(\)接口启动ServiceAbility,在ServiceAbility中启动后台长时任务报错,错误信息:\{"code":201,"message":"BussinessError 201: Permission denied."\}
**解决措施**
启动后台长时任务需要在module.json5文件中配置长时任务权限ohos.permission.KEEP\_BACKGROUND\_RUNNING、同时为需要使用长时任务的ability声明相应的后台模式类型。
```
"module": {
"abilities": [
{
"backgroundModes": [
"dataTransfer",
"location"
], // 后台模式类型
}
],
"requestPermissions": [
{
"name": "ohos.permission.KEEP_BACKGROUND_RUNNING" // 长时任务权限
}
]
}
```
**参考链接**
[ServiceAbility组件配置-后台模式类型](../application-models/serviceability-configuration.md)
[长时任务权限](../security/permission-list.md#ohospermissionkeepbackgroundrunning)
[长时任务开发指导](../task-management/continuous-task-dev-guide.md#基于stage模型)
## FA卡片如何进行数据交互
适用于:OpenHarmony SDK 3.2 Beta 5 API9
卡片通过postCardAction接口触发和提供方的交互,在提供方中通过updateForm方法更新数据。
**参考链接**
[服务卡片开发指导](../application-models/widget-development-fa.md)
......@@ -172,3 +172,102 @@ Web({ src: 'www.example.com', controller: this.controller })
**参考链接**
[domStorageAccess](../reference/arkui-ts/ts-basic-components-web.md#domstorageaccess)
## 如何解决Web组件加载的HTML页面内检测网络状态失败
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
在HTML页面内通过window.navigator.onLine获取网络状态,联网和断网情况下均为false。
**解决措施**
配置应用获取网络信息权限: ohos.permission.GET\_NETWORK\_INFO
**参考链接**
[GET\_NETWORK\_INFO](../security/permission-list.md#ohospermissiongetnetworkinfo)
## 如何自定义拼接设置UserAgent参数
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
默认UserAgent需要通过WebviewController获取。WebviewController对象必须在Web组件绑定后,才能调用WebviewController上的方法getUserAgent获取默认UserAgent。因此在页面加载前通过自定义字符串拼接修改UserAgent,可采用此方式:
1. 使用@State定义初始UserAgent,绑定到Web组件;
2. 在Web组件的onUrlLoadIntercept回调中,通过WebviewController.getUserAgent\(\)获取默认UserAgent,并修改Web组件绑定的UserAgent
**代码示例**
```
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct Index {
private controller: web_webview.WebviewController = new web_webview.WebviewController()
@State userAgentPa: string = ''
build() {
Row() {
Column() {
Web({ src: 'http://www.example.com', controller: this.controller }) //需要手动替换为真实网站
.width('100%')
.userAgent(this.userAgentPa)
.onUrlLoadIntercept((event) => {
let userAgent = this.controller.getUserAgent();
this.userAgentPa = userAgent + ' 111111111'
return false;
})
}
.width('100%')
}
.height('100%')
}
}
```
**参考链接**
[userAgent](../reference/arkui-ts/ts-basic-components-web.md#useragent)[getUserAgent](../reference/apis/js-apis-webview.md#getuseragent)
## Web组件中如何通过手势滑动返回上一个Web页面
适用于:Openharmony 3.2 Beta5 API 9
**解决措施**
通过重写onBackPress函数来自定义返回逻辑,使用WebviewController判断是否返回上一个Web页面。
**示例代码**
```
import web_webview from '@ohos.web.webview';
@Entry
@Component
struct Index {
controller: web_webview.WebviewController = new web_webview.WebviewController();
build() {
Column() {
Web({ src: 'http://www.example.com', controller: this.controller })//需要手动替换为真实网站
}
}
onBackPress() {
// 当前页面是否可前进或者后退给定的step步(-1),正数代表前进,负数代表后退
if (this.controller.accessStep(-1)) {
this.controller.backward(); // 返回上一个web页
// 执行用户自定义返回逻辑
return true
} else {
// 执行系统默认返回逻辑,返回上一个page页
return false
}
}
}
```
**参考链接**
[Web组件](../reference/apis/js-apis-webview.md#accessstep)
......@@ -121,6 +121,86 @@ console.log(`bundleName: ${context.abilityInfo.bundleName}`)
## 能否在本应用中获取到其他应用的HAP包信息
适用于:OpenHarmony 3.2 Beta API 9
适用于:OpenHarmony 3.2 API 9
**问题现象**
如何查询系统内其他应用的信息
**解决措施**
查询系统内其他应用信息的API暂时只提供给系统应用使用,具体使用方法:
- 查询系统内指定应用信息需要获取normal级权限ohos.permission.GET\_BUNDLE\_INFO,使用接口bundleManager.getApplicationInfo\(\)
- 查询系统内所有应用信息需要获取system\_basic级权限ohos.permission.GET\_BUNDLE\_INFO\_PRIVILEGED,使用接口bundleManager.getAllApplicationInfo\(\)
**参考链接**
[@ohos.bundle.bundleManager \(bundleManager模块\)](../reference/apis/js-apis-bundleManager.md)
## 如何查询进程的pid
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
可以通过接口@ohos.process来获取。
**代码示例**
```
import process from '@ohos.process';
private pid = process.pid;
```
**参考链接**
[@ohos.process \(获取进程相关的信息\)](../reference/apis/js-apis-process.md)
## 如何让最大化按钮不可用
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
可以通过supportWindowModes字段去指定是否显示。
- full\_screen表示支持全屏显示
- split表示支持分屏显示
- floating表示支持窗口化显示
**代码示例**
```
"abilities": [
{
"name": "EntryAbility",
"srcEntry": "./ets/entryability/EntryAbility.ts",
"description": "$string:EntryAbility_desc",
"icon": "$media:icon",
"label": "$string:EntryAbility_label",
"startWindowIcon": "$media:icon",
"startWindowBackground": "$color:start_window_background",
"exported": true,
"supportWindowMode": ["split", "floating"],
"skills": [
{
"entities": [
"entity.system.home"
],
"actions": [
"action.system.home"
]
}
]
}
]
```
**参考链接**
[supportWindowModes参考文档](../reference/apis/js-apis-bundleManager-abilityInfo.md)
根据OpenHarmony的安全设计规范,SDK不提供接口能力给三方应用查询其他应用的包信息(包括但不限于应用名称、版本号等)。
# 语言编译运行时常见问题
## 从rawfile中获取json格式的字符串后,转换成对应的object对象后,再去调用实例方法时直接崩溃
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
直接报错:jscrash happened in xxxxxxxxx,crash日志中错误信息:Error message: Unexpected Object in JSON
**解决措施**
通过json解析字符串得到的对象的原型是object,其原型链中不存在自有的实例方法,故无法调用。
如需调用该方法,则有以下两种方式:
1. 在解析后的对象上添加对应的原型。
2. 将该实例方法改为静态方法,通过类名去调用。
......@@ -4,10 +4,6 @@
适用于:OpenHarmony 3.2Beta API 9
**问题现象**
hilog日志如何落盘存储
**解决措施**
使用命令:hilog -w start -f ckTest -l 1M -n 5 -m zlib -j 11
......@@ -26,3 +22,129 @@ hilog日志如何落盘存储
更多参数含义请使用hilog --help查看。
```
## Hilog日志如何设置为只打印当前应用的日志
适用于:OpenHarmony 3.2Beta API 9
**解决措施**
通过hilog命令行工具来过滤保留当前应用的日志日志。
hilog -T xxx 按tag过滤;
hilog –D xxx 按domain过滤;
hilog -e 对日志内容匹配,支持正则式tag, domain, pid都支持多重过滤,组合过滤以及反向过滤。
## 程序打开直接崩溃了,如何定位问题
适用于:OpenHarmony 3.2Beta API 9
**解决措施**
方法1:通过业务日志打印,定位崩溃的代码位置。
方法2:通过Crash文件查看报错信息,Crash文件路径是:/data/log/faultlog/faultlogger/。
## 应用如何打印日志是使用hilog还是console,hilog接口参数domain的设置范围是什么
适用于:OpenHarmony 3.2Beta API 9
console是对hilog日志系统的封装,其采用默认参数,主要用于应用开发调试阶段。
推荐使用hilog,可以对日志系统进行分类和统一处理,具体参考文档:[hilog日志系统](../reference/apis/js-apis-hilog.md#hilogisloggable)
hilog接口参数domain的取值范围0x0\~0xFFFF,建议开发者在应用内根据需要自定义划分。
## hilog日志打印长度限制是多少,是否可以配置
适用于:OpenHarmony 3.2Beta API 9
日志打印的长度限制为1024个字符,该长度不能配置
## 格式化日志打印时,使用private的作用是什么
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
C++代码中hilog的格式参数类型为%d或者%s时,日志打印为何显示private
**解决措施**
直接使用%d、%s等格式化参数时,标准系统默认使用private替换真实数据进行打印,防止数据泄露。如果需要打印出真实数据,需要使用%\{public\}d替换%d或者%\{public\}s替换%s。
## 如何解决hilog.debug日志无法打印
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
通过hdc命令 hdc shell hilog -b D开启调试开关
## hilog接口的tag参数是否支持用空格隔开的多个字符串
适用于:OpenHarmony 3.2 Beta API 9
支持。
## hilog如何打印\{private\}隐私标志的内容
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
使用命令关闭隐私模式即可。命令如下:hdc shell hilog -p off
## 有关崩溃日志收集和性能问题排查的功能有哪些
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
有关崩溃日志收集和性能问题排查的功能有哪些
**解决措施**
faultLogger:崩溃日志收集,参考文档:[故障日志获取](../reference/apis/js-apis-faultLogger.md)
hichecker:问题检测,参考文档:[检测模式](../reference/apis/js-apis-hichecker.md)
hiTraceMeter:性能打点,参考文档:[性能打点](../reference/apis/js-apis-hitracemeter.md)
## 如何控制日志输出
适用于:OpenHarmony 3.2 Beta API 9
**问题现象**
根据不同的环境要求,输出不同的日志信息。
**解决措施**
通过hilog命令调整日志打印级别,输出不同级别的日志信息。命令如下:
hdc shell hilog -L <D/I/W/E/F\>
## hilog的TAG长度有限制吗
适用于:OpenHarmony 3.2 Beta API 9
整个tag的长度是32。
## 日志里面的appfreeze文件的怎么查看,要看哪些内容
适用于:OpenHarmony 3.2 Beta API 9
主要查看方向:
1、先看一下Reason是什么事件的;根据不同的Reason下面有大致的检测原理和分析样例。
2、关注MSG有什么信息,根据MSG的信息看一下大致的方向;
3、分析OpenStacktraceCatcher里面的应用栈信息,并且结合流水日志一起确定一下当前在干什么事情;
4、看一下PeerBinderCatcher当前进程是否有对端的binder卡住,如果有跟当前进程相关的同步wait,则会有相应的PeerBinder Stacktrace信息——这个是卡住你当前进程的对端进程的栈信息。
5、还有整机进程的cpu信息和当前进程的内存信息辅助定位。
......@@ -25,8 +25,6 @@
关系型数据库rdb使用Sqlite数据库, 它不支持 TRUNCATE TABLE 语句,建议使用delete语句,如:DELETE FROM sqlite\_sequence WHERE name = 'table\_name' ,另外发生该错误会抛出空异常。
## 关系型数据库rdb支持哪些数据类型
适用于:OpenHarmony SDK 3.0版本以上,API 9 Stage模型
......@@ -35,13 +33,43 @@
关系型数据库rdb支持的数据类型有:number、string、boolean。其中number为数字类型,支持Double,Long,Float,Int,Int64,最大精度为十进制17位数字。
## 如何将PixelMap的数据存储到数据库中
## 如何实现应用数据持久化存储
适用于:OpenHarmony 3.2 Beta5 API 9
适用于 OpenHarmony 3.2 Beta5 API 9
**问题现象**
**解决措施**
通过PersistentStorage类实现管理应用持久化数据,可以将特定标记的持久化数据链接到AppStorage中,并由AppStorage接口访问对应持久化数据。PersistentStorage持久化后的数据会生成本地xml文件保存,文件路径为/data/app/el2/100/base/<bundleName\>/haps/<hapName\>/files/persistent\_storage。
示例:
存储PixelMap的数据
```
AppStorage.Link('varA')
PersistentStorage.PersistProp("varA", "111");
@Entry
@Component
struct 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%')
}
}
```
**参考链接**
[持久化数据管理\(OpenHarmony\)](../quick-start/arkts-persiststorage.md)
## 如何将PixelMap的数据存储到数据库中
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
......@@ -49,7 +77,7 @@ PixelMap应该被转换成相应的ArrayBuffer再放进数据库。
**参考链接**
[readPixelsToBuffer](../reference/apis/js-apis-image.md#readpixelstobuffer7-1)
[readPixelsToBuffer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-image.md#readpixelstobuffer7-1)
## 如何获取rdb关系型数据库文件
......@@ -105,6 +133,27 @@ API8版本rdb关系型数据库中TEXT类型保存超长文本失败
**解决措施**
API9版本之前对TEXT文本存储长度限制在1024字节,所以会存在超长文本保存失败的情况。
在API9的版本中已经放开了长度限制。
## Preferences.put缓存成功,但get的结果一直是undefined
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
使用首选项保存数据成功,但是获取数据为空。
**解决措施**
1. 使用put操作后,使用flush持久化数据,然后再使用get获取数据。
2. 由于flush操作是异步执行,将Storage实例通过异步线程回写入文件中, 所以需要等待flush操作执行完成后,再执行get操作。
## 使用RDB数据库时,能否指定内存数据库模式
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
RDB数据库底层使用的是SQLite,默认的内存数据库模式是文件,不支持修改。
......@@ -149,3 +149,64 @@ import UIAbility from '@ohos.app.ability.UIAbility';
**参考链接**
[使用EventHub进行数据](../application-models/uiability-data-sync-with-ui.md#使用eventhub进行数据通信)
## 如何实现点击Notification通知打开App功能
适用于:OpenHarmony 3.1 Beta5 API 9
**解决措施**
通过配置Notification.publish发布通知接口的参数NotificationRequest中wantAgent属性实现
**代码示例**
```
import notificationManager from '@ohos.notificationManager';
import WantAgent from '@ohos.app.ability.wantAgent';
async function publishNotification() {
let wantAgentInfo = {
wants: [
{
bundleName: "com.example.webuseragent", // 自己应用的bundleName
abilityName: "EntryAbility",
}
],
operationType: WantAgent.OperationType.START_ABILITIES,
requestCode: 1,
}
const wantAgent = await WantAgent.getWantAgent(wantAgentInfo)
let contentType = notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT;
await notificationManager.publish({
content: {
contentType: contentType,
normal: {
title: "测试标题",
text: "测试内容",
}
},
id: 1,
wantAgent: wantAgent
})
}
```
**参考链接**
[Notification](../reference/apis/js-apis-notificationManager.md)[WantAgent](../reference/apis/js-apis-app-ability-wantAgent.md)
## 调用notificationManager.publish发布通知失败
适用于:OpenHarmony 3.2 Beta5
**问题现象**
发布通知后,无错误日志信息,通知栏没有通知显示
**解决措施**
发布通知时,需要在真机端系统设置中,开启对应应用的通知开关,然后才能在通知栏中看到发布的通知。
手动开启步骤:设置 \> 通知和状态栏 \> 应用名称 \> 允许通知。
也可通过接口notificationManager.requestEnableNotification\(\)来弹窗让用户授权(仅弹一次)。
......@@ -20,4 +20,91 @@
输入命令 hdc shell mount -o remount,rw /,正确执行无提示信息。
## 如何实现文件不存在则创建文件
适用于:OpenHarmony 3.2 版本 API 9
**解决措施**
可以通过调用函数fs.open来实现,open\(path: string, mode?: number\),指定第二个参数mode为fs.OpenMode.CREATE,表示若文件不存在,则创建文件。
## 如何解决文件的中文乱码问题
适用于:OpenHarmony 3.2 版本 API 9
**解决措施**
读取文件内容的buffer数据后,通过@ohos.util的TextDecoder对文件内容进行解码。
```
let filePath = getContext(this).filesDir + "/test0.txt";
let stream = fs.createStreamSync(filePath, "r+");
let buffer = new ArrayBuffer(4096)
let readOut = stream.readSync(buffer);
let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true })
let readString = textDecoder.decodeWithStream(new Uint8Array(buffer), { stream: false });
console.log("读取的文件内容:" + readString);
```
## “datashare://”路径使用fs.open可以打开,但使用fs.copyFile会报错
适用于:OpenHarmony 3.2 版本 API 9
**解决措施**
copyfile不支持uri,可以先使用open接口打开datashare uri后,拿到fd后再调用copyfile接口。
```
let file = fs.openSync("datashare://...")
fs.copyFile(file.fd, 'dstPath', 0).then(() => {
console.info('copyFile success')
}).catch((err) => {
console.info("copy file failed with error message: " + err.message + ", error code: " + err.code);
})
```
## 如何修改沙箱路径下json文件的指定内容
适用于:OpenHarmony 3.2 版本 API 9
**解决措施**
可以通过以下步骤来完成:
1、使用fs.openSyn获取json文件的fd。
```
import fs from '@ohos.file.fs';
let sanFile = fs.open(basePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let fd = sanFile.fd;
```
2、通过fs.readSync读取json文件内容。
```
let content = fs.readSync(basePath);
```
3、修改内容。
```
obj.name = 'new name';
```
4、重新写入json文件。
```
fs.writeSync(file.fd, JSON.stringify(obj));
```
fs的具体使用可以参考:[@ohos.file.fs](../reference/apis/js-apis-file-fs.md)
## 通过fileAccess模块获取的文件路径对应的实际路径是什么
适用于:OpenHarmony 3.2 版本 API 9 Stage模型
**解决措施**
此类文件是保存在/storage/media/100/local/files目录下,具体位置与文件类型和来源有关。知道文件名时,可在此目录下通过如下命令查找:find . -name \[filename\]
[应用文件上传下载](../file-management/app-file-upload-download.md/)
......@@ -116,3 +116,35 @@ Resource为string支持限定词目录使用this.context.resourceManager.getStri
适用于:OpenHarmony 3.2 Beta5 API 9
form\_config.json文件中不支持使用\$引用常量。
## ArkTS如何解析xml文件
适用于:OpenHarmony 3.2 Beta5 API 9
**解决措施**
1. 在rawfile目录下创建如下xml文件**。**
```
<?xml version="1.0" encoding="utf-8"?>
<user>
<name>Jacky</name>
<age>18</age>
</user>
```
2. 使用resourceManager.getRawFileContent获取xml文件字节数组。
```
import resourceManager from '@ohos.resourceManager';
resourceManager.getRawFileContent("test.xml", (error, value) => {
if (error != null) {
console.log("error is " + error);
return
}
let arrayBuffer = value.buffer; // unit8Array
var xmpParser = new xml.XmlPullParser(arrayBuffer);
var tagName = ""
//do something
}
```
......@@ -23,7 +23,7 @@ try {
## 如何隐藏状态栏实现沉浸式效果
适用于:OpenHarmony 3.2 Beta5,API 9 Stage模型
适用于:OpenHarmony 3.2 Beta5,API 9
**解决措施**
......@@ -59,7 +59,7 @@ try {
## 如何获取窗口的宽高信息
适用于:OpenHarmony SDK 3.2 Beta5,API 9 Stage模型
适用于:OpenHarmony 3.2 Beta5,API 9 Stage模型
**解决措施**
......@@ -91,3 +91,32 @@ try {
}
```
## 如何对图片进行高斯模糊处理
适用于:OpenHarmony 3.2 Beta5,API 9
**解决措施**
导入图像处理(@ohos.multimedia.image)和图像效果(@ohos.effectKit)模块,对图像进行处理并添加模糊效果。
**代码示例**
```
import image from "@ohos.multimedia.image";
import effectKit from "@ohos.effectKit";
const color = new ArrayBuffer(96);
let opts = { editable: true, pixelFormat: 3, size: { height: 4, width: 6 } };
image.createPixelMap(color, opts).then((pixelMap) => {
let radius = 5;
let headFilter = effectKit.createEffect(pixelMap);
if (headFilter != null) {
headFilter.blur(radius);
}
})
```
**参考链接:**
[图片添加模糊效果](../reference/apis/js-apis-effectKit.md#blur)
......@@ -2,7 +2,7 @@
## 使用XComponent组件显示相机的预览输出流时,如何获取相机的帧数据
适用于:OpenHarmony 3.2 版本 API 9 Stage模型
适用于:OpenHarmony 3.2 版本 API 9
**问题现象**
......@@ -35,7 +35,7 @@
## 如何获取前置摄像头的预览图像
适用于:OpenHarmony 3.2版本 API 9 Stage模型
适用于:OpenHarmony 3.2版本 API 9
**解决措施**
......@@ -76,7 +76,7 @@
## 如何设置相机焦距
适用于:OpenHarmony 3.2版本 API 9 Stage模型
适用于:OpenHarmony 3.2版本 API 9
**解决措施**
......@@ -86,7 +86,7 @@
## 如何后台播放音乐
适用于:OpenHarmony 3.2版本 API 9 Stage模型
适用于:OpenHarmony 3.2版本 API 9
**问题现象**
......@@ -105,7 +105,7 @@ AVSession对媒体播放做了管控,当三方应用从前台切入后台或
## 创建多个视频组件无法播放
适用于:OpenHarmony 3.2版本 API 9 Stage模型
适用于:OpenHarmony 3.2版本 API 9
**问题现象**
......@@ -115,10 +115,9 @@ AVSession对媒体播放做了管控,当三方应用从前台切入后台或
当前限制最多创建13个媒体播放实例。
## 如何直接调起图片库
适用于:OpenHarmony 3.2版本 API 9 Stage模型
适用于:OpenHarmony 3.2版本 API 9
**解决措施**
......@@ -134,3 +133,67 @@ let context = getContext(this) as common.UIAbilityContext;
context.startAbility(want);
```
## 如何申请设备上的媒体读写权限
适用于:OpenHarmony 3.2版本 API 9 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 context = getContext(this) as common.UIAbilityContext;
let atManager = abilityAccessCtrl.createAtManager();
let permissions: Array<string> = ['ohos.permission.READ_MEDIA','ohos.permission.WRITE_MEDIA']
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))
})
```
## 如何检测当前相机服务的状态
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**解决措施**
cameraManager通过设置状态回调返回相机状态。
```
cameraManager.on('cameraStatus', (cameraStatusInfo) => {
console.log(`camera : ${cameraStatusInfo.camera.cameraId}`);
console.log(`status: ${cameraStatusInfo.status}`);
})
```
相机状态:CameraStatus
枚举,相机状态。
CAMERA_STATUS_APPEAR 0 新的相机出现。
CAMERA_STATUS_DISAPPEAR 1 相机被移除。
CAMERA_STATUS_AVAILABLE 2 相机可用。
CAMERA_STATUS_UNAVAILABLE 3 相机不可用。
参考文档:[CameraStatus](../reference/apis/js-apis-camera.md#oncamerastatus)
......@@ -39,3 +39,39 @@ target_link_libraries(entry PUBLIC
)
```
## 在Native代码中使用OH\_LOG\_Print打印日志报错
适用于:OpenHarmony 3.1 Beta5 API 9
**问题现象**
在Native代码中使用OH\_LOG\_Print打印日志,上报错误:undefined symbol: OH\_LOG\_Print
**原因分析**
缺少链接库文件。
**解决措施**
打开CMakeLists.txt文件,在target\_link\_libraries最后追加libhilog\_ndk.z.so。
```
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(entry PUBLIC
libace_napi.z.so
libhilog_ndk.z.so
)
```
## 如何遍历rawfiles中的文件
适用于:OpenHarmony 3.1 Beta5 API 9
**解决方案:**
使用Native API中的OH\_ResourceManager\_OpenRawDir\(\)方法获取到rawfile的根目录,然后对其进行遍历。
**参考文档:**
[Native开发指导](../reference/native-apis/rawfile.md)
......@@ -6,3 +6,19 @@
PPG和ECG的血压监测传感器属于可穿戴设备传感器,传感器数据设计个人隐私数据,暂未对个人开发者开放接口。
## 如何正确使用震动模块接口
适用于:OpenHarmony 3.2版本 API 9 Stage模型
**问题现象**
震动模块接口调用报错,错误码201。
vibrate fail, error.code: 201error.message: NaN
**解决措施**
权限校验失败。需要申请ohos.permission.VIBRATE权限。
参考文档:[权限申请](../security/accesstoken-guidelines.md)
......@@ -4,7 +4,7 @@
适用于OpenHarmony 3.1 Beta5 API 9
通过ohpm可以获取的三四方库在Gitee上做了汇总([OpenHarmony上可直接使用的三方组件汇总](https://gitee.com/openharmony-tpc/tpc_resource)),针对于不同功能三方库内容做了分类,开发者可以根据需要进行参考。
通过ohpm可以获取的三四方库在Gitee上做了汇总([OpenHarmony上可直接使用的三方组件汇总](https://gitee.com/openharmony-tpc/tpc_resource?_from=gitee_search#%E4%B8%89%E6%96%B9%E7%BB%84%E4%BB%B6%E8%B5%84%E6%BA%90%E6%B1%87%E6%80%BB)),针对于不同功能三方库内容做了分类,开发者可以根据需要进行参考。
## 网络相关的三方库有哪些
......
......@@ -63,3 +63,103 @@ onWindowStageCreate(windowStage){
[窗口基础能力文档](../reference/apis/js-apis-window.md)
## 如何锁定设备竖屏,使得窗口不随屏幕旋转
适用于:OpenHarmony SDK 3.2 Beta5 API 9 Stage模型
**解决措施**
采用窗口的setPreferredOrientation方法可以实现该效果,将orientation参数设置为window.Orientation.PORTRAIT时,可锁定屏幕为竖屏。
**代码示例**
```
import window from "@ohos.window";
//1.获取窗口实例对象,新建窗口使用createWindow方法,获取已有的窗口使用findWindow方法
let windowClass = null;
let config = {name: "alertWindow", windowType: window.WindowType.TYPE_SYSTEM_ALERT, ctx: this.context};
try {
let promise = window.createWindow(config);
promise.then((data)=> {
windowClass = data;
console.info('Succeeded in creating the window. Data:' + JSON.stringify(data));
}).catch((err)=>{
console.error('Failed to create the Window. Cause:' + JSON.stringify(err));
});} catch (exception) {
console.error('Failed to create the window. Cause: ' + JSON.stringify(exception));
}
//2.窗口实例使用setPreferredOrientation方法,设置窗口的显示方向,PROTRAIT为固定竖屏,其他方向可参照参考链接
let orientation = window.Orientation.PORTRAIT;
if (windowClass) {
windowClass.setPreferredOrientation(orientation, (err) => {
if (err.code) {
console.error('Failed to set window orientation. Cause: ' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting window orientation.');
}
```
**参考链接**
[window.Orientation](../reference/apis/js-apis-window.md#orientation9)
## 调用Window实例的setWindowSystemBarProperties接口设置窗口状态栏和导航栏的高亮属性时不生效
适用于:OpenHarmony SDK 3.2 Beta5 API9 Stage模型
**解决措施**
状态栏字体高亮属性的本质就只是让字体变成白色。调用window实例的setWindowSystemBarProperties接口时,如果设置了状态栏内容颜色statusBarContentColor,就以开发者设置的颜色为准,isStatusBarLightIcon状态栏字体高亮属性就不生效;同理,如果设置了导航栏内容颜色navigationBarContentColor,isNavigationBarLightIcon导航栏字体高亮属性就不生效。
**参考链接**
[window.SystemBarProperties](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md#systembarproperties)
## 如何保持屏幕常亮
适用于:OpenHarmony 3.2 Beta5 API9
**解决措施**
设置屏幕常亮,不熄屏。
获取窗口实例对象后,调用[setWindowKeepScreenOn方法](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md#setwindowkeepscreenon9)可设置屏幕是否常亮。
```
let isKeepScreenOn = true;
try {
windowClass.setWindowKeepScreenOn(isKeepScreenOn, (err) => {
if (err.code) {
console.error('Failed to set the screen to be always on. Cause: ' + JSON.stringify(err));
return;
}
console.info('Succeeded in setting the screen to be always on.');
});
} catch (exception) {
console.error('Failed to set the screen to be always on. Cause: ' + JSON.stringify(exception));
}
```
## 如何监听窗口大小的变化
适用于:OpenHarmony 3.2 Beta5 API9
**解决措施**
获取窗口实例对象后,可以通过窗口的on\('windowSizeChange'\)方法实现对窗口尺寸大小变化的监听
```
try {
windowClass.on('windowSizeChange', (data) => {
console.info('Succeeded in enabling the listener for window size changes. Data: ' + JSON.stringify(data));
});
} catch (exception) {
console.error('Failed to enable the listener for window size changes. Cause: ' + JSON.stringify(exception));
}
```
**参考链接**
[window.on\("windowSizeChange"\)](../reference/apis/js-apis-window.md#onwindowsizechange7)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册