faqs-ability.md 9.3 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10
# Ability框架开发常见问题



## Stage模型中是否有类似FA模型的DataAbility的开发指导文档

适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型

Stage模型中DataShareExtensionAbility提供了向其他应用共享以及管理其数据的方法。

11
参考文档:[数据共享开发指导](../database/database-datashare-guidelines.md)
Z
zengyawen 已提交
12

13
## 拉起Ability为什么在界面上没反应
Z
zengyawen 已提交
14 15 16 17 18 19 20 21 22 23 24

适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型

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)

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
## 如何将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
Z
zengyawen 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64

适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型

方式一:在调用方法的时候加上.bind(this);

方式二:使用箭头函数。

## 如何解决must have required property 'startWindowIcon'报错 

适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型

Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。

65
参考文档:[Stage模型配置文件](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/quick-start/stage-structure.md/)
Z
zengyawen 已提交
66 67

  示例:
68

Z
zengyawen 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
```
{
  "module": {
    // do something
    "abilities": [{
      // do something
      "startWindowIcon": "$media:space",
      "startWindowBackground": "$color:white",
    }]
  }
}
```

## 如何获取设备横竖屏的状态变化的通知

适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型

使用Ability的onConfigurationUpdated回调实现,系统语言、颜色模式以及Display相关的参数,比如方向、Density,发生变化时触发该回调。

88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
参考文档:[Ability开发指导](../ability/stage-ability.md)

## MainAbility和MyAbilityStage中的this.context有什么区别呢?

适用于:OpenHarmony SDK 3.2.5.5版本,API9 Stage模型

参考:[应用上下文Context使用指导](../ability/context-userguide.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)

## OpenHarmony如何实现隐式调用

适用于:OpenHarmony SDK 3.2.5.5版本, API9 Stage模型

可以参考[OpenHarmony 3.1 Beta版本关键特性解析——探秘隐式查询](https://blog.csdn.net/openharmony/article/details/123668044?spm=1001.2014.3001.5502)

## FA卡片上架后在用户的服务中心展示时可否触发生命周期,从而实现用户没有打开过FA应用的情况下获取到用户的登录信息?

适用于:OpenHarmony SDK 3.2.5.5版本, API8 FA模型

服务卡片在添加卡片后就触发了oncreat()生命周期,在不启用app的情况下也可以显示相关的用户信息-静默登录,但服务卡片目前要在app安装之后手动添加。

## onEventNotify无法监听

适用于:HarmonyOS SDK 3.0版本, API8 FA模型

卡片使用方需要为系统应用,非系统应用formVisibleNotify默认为false且不可以配置,也不支持使用onEventNotify回调,和使用方对齐,需要申请系统应用权限。可参考[卡片可见性](http://3ms.huawei.com/hi/group/2773903/wiki_7075748.html)文章。

## 如何获取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

## FA模型和Stage模型StartAbility使用差异

适用于:HarmonyOS 3.0版本

FA模型和Stage模型下使用startAbility的差异:

1. FA模型使用featureAbility.startAbility,tage模型下使用使用AbilityContext.startAbility。

2. FA模型下参数[StartAbilityParameter](../reference/apis/js-apis-featureAbility.md#startabilityparameter)<want, abilityStartSetting>, Stage模型下参数(want,[StartOptions](../reference/apis/js-apis-application-StartOptions.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" }
})
```

## 旋转屏幕,如何防止界面生命周期重启

使用于:HarmonyOS  SDK 3.1.1.1版本,API8 FA模型

在config.json文件中添加configChanges属性为orientation

## 如何监听屏幕旋转

使用于: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、必须要使用系统的返回按键才能触发效果、