鸿蒙开发应用模型常见问题-如何获取设备横竖屏的状态变化通知(API 9)

567 篇文章 5 订阅
555 篇文章 0 订阅

如何获取设备横竖屏的状态变化通知(API 9)

问题现象

当设备发生横竖屏变化时,开发者应如何获取到变化的事件通知?

解决措施

使用UIAbility.onConfigurationUpdate()回调方法订阅系统环境变量的变化(包括语言,颜色模式,屏幕方向等)。

点击服务卡片如何跳转至指定的页面(API 9)

解决措施

参考文档,配置卡片事件,指定需要跳转的目标Ability,然后在目标UIAbility的onWindowStageCreate()中调用loadContent跳转至指定的page页面。

如何在Stage模型中创建后台服务(API 9)

问题现象

Stage模型中的ServiceExtensionAbility是系统接口,第三方应用不支持调用,如何在Stage模型中如何创建后台服务?

解决措施

Stage模型可通过后台任务实现该功能。

FA和Stage模型中,应用是否可以创建并指定UIAbility运行在哪个进程(API 9)

解决措施

FA和Stage模型中,应用可以创建进程并指定UIAbility运行在某个进程。

  • FA模型

    FA模型支持多进程,默认情况下,同一应用的所有组件均在相同进程中运行,且大多数应用都不应该改变这一点。但是如果应用自身业务需要某个组件独立进程运行,可在config配置文件中配置;配置清单中,ability标签的process子标签可指定该组件在哪个进程中运行,应用可以设置通过该属性使每个组件均在各自的进程中运行,但process子标签仅支持系统应用配置,三方应用配置不生效。

  • Stage模型

    Stage模型支持多进程:Stage模型的进程模型由系统定义,三方应用不能配置多进程;如果需要自定义配置独立进程,需要申请特殊权限;配置清单中,module标签的process子标签可指定该Hap下Ability在哪个进程中运行,应用可以设置通过该属性使每个Hap的Ability组件均在各自的进程中运行。如果不配置,进程名默认为包名。

Stage模型与FA模型在进程内对象共享方面有哪些差异(API 9)

解决措施

  • Stage模型中,多个应用组件共享同一个ArkTS引擎实例,因此在Stage模型中,应用组件之间可以方便的共享对象和状态,同时减少复杂应用运行对内存的占用。

  • FA模型中,每个应用组件独享一个ArkTS引擎实例。Stage模型作为主推的应用模型,开发者通过它能够更加便利地开发出分布式场景下的复杂应用。

如何使用AbilityStage的生命周期函数(API 9)

解决措施

在module.json5里的module中加上srcEntry字段"srcEntry": “./ets/myabilitystage/MyAbilityStage.ts”。

多实例场景下当前Ability调用terminateSelf后,桌面最近任务列表如何设置不保留快照(API 9)

解决措施

可在module.json5配置文件中配置removeMissionAfterTerminate为true。

调用方法的时候,方法内部的this变成了undefined(API 9)

解决措施

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

方式二:使用箭头函数。

启动UIAbility时报错:must have required property ‘startWindowIcon’(API 9)

解决措施

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

代码示例

{
  "module": {
    // do something
    "abilities": [{
      // do something
      "startWindowIcon": "$media:space",
      "startWindowBackground": "$color:white",
    }]
  }
}

Stage模型是否推荐使用globalThis获取Context(API 9)

不推荐,Stage模型使用globalThis去获取Context是错误的使用方式。

在Stage模型中,整个应用进程共用一个js虚拟机实例,其中可以运行多个Ability实例,共用一个global对象。在同一个js虚拟机内的不同的Ability中使用globalThis获取Context,存在被覆盖从而发生错误的风险。

部署HAP时上报安装内容过大错误(API 9)

问题现象

部署hap时,上报如下错误:

Failure[INSTALL_FAILED_SIZE_TOO_LARGE] error while deploying hap?

解决措施

将其拆分为多个HAP即可解决。

调用方使用startAbilityForResult时,被调用方如何返回数据(API 9)

解决措施

被调用方使用AbilityContext.terminateSelfWithResult方法,销毁被调用方ability,传递参数给startAbilityForResult回调函数。

如何获取系统时间戳(API 9)

解决措施

使用@ohos.systemDateTime的getCurrentTime来获取系统系统时间和时区。

代码示例

使用@ohos.systemDateTime接口:

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}`);
}

如何获取当前应用程序缓存目录(API 9)

解决措施

使用Context.cacheDir获取应用程序的缓存目录。

服务卡片生命周期回调函数在哪个js文件中调用(API 9)

解决措施

新建卡片时会生成一个FormAblity.ts文件,其中包含卡片对应的生命周期。

使用ServiceExtensionAbility和DataShareExtensionAbility的相关接口后DevEco Studio无法编译(API 9)

问题现象

使用ServiceExtensionAbility和DataShareExtensionAbility的相关接口后,DevEco Studio报错无法编译。

问题原因

当前SDK类型有:

  • public-sdk : 面向应用开发者提供,不包含需要使用系统权限的系统接口。

  • full-sdk : 面向OEM厂商提供,包含了需要使用系统权限的系统接口。

DevEco Studio默认下载是public-sdk。

解决措施

三方应用不支持开发ServiceExtensionAbility和DataShareExtensionAbility。

如何获取应用级别的temp路径和files路径(API 9)

解决措施

通过应用上下文context获取。如:this.context.getApplicationContext.tempDir来获取temp路径;this.context.getApplicationContext.filesDir来获取files路径。

terminateSelf方法销毁当前应用之后并没有在后台任务列表中删除(API 9)

解决措施

在当前应用对应UIAbility的module.json5配置文件中,配置abilities标签的removeMissionAfterTerminate字段,设置为true即为销毁应用的同时删除应用快照记录,缺省值为false。

Stage模型下开发的应用如何拉起 FA 模型开发的应用(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实现(API 9)

解决措施

目前新建的卡片的目录结构都是css+hml+json,不能完全靠js实现,事件的触发和参数的传递都可以在json文件里面处理。

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

问题现象

FA卡片的生命周期以及信息显示

解决措施

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

JS/ArkTS跳转到其他应用时报错“[c4d4d3492eb8531, 0, 0] ContextDeal::startAbility fetchAbilities failed”(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');
}

如何通过卡片点击实现业务登录场景(API 9)

解决措施

可以先创建FA模型的卡片,步骤如下:

  1. 实现卡片生命周期接口

  2. 配置卡片配置文件

  3. 卡片信息的持久化

  4. 卡片数据交互

  5. 开发卡片页面

  6. 开发卡片事件:通过点击卡片拉起响应的Ability后,通过Ability来实现业务登录场景

如何跳转到设置中应用详情页面(API 9)

解决措施

参考如下代码实现,示例:

this.context.startAbility(
{
  action: "action.settings.app.info",
  parameters: { "settingsParamBundleName": "your app bundlename" }
})

stage模型,@Component组件内如何获取UIAbilityContext(API 9)

解决措施

可以通过UIAbility. Context获取。

代码示例

import common from '@ohos.app.ability.common';

@Entry
@Component
struct AbilityContextTest {
  // abilityContext
  @State UIAbilityInfo: string = '获取 abilityInfo'
  UIAbilityContext: common.UIAbilityContext

  aboutToAppear() {
    // getContext获取Context,转为abilityContext
    this.UIAbilityContext = getContext(this) as common.UIAbilityContext
  }

  build() {
    Row() {
      Column({ space: 20 }) {
        Text(this.UIAbilityInfo)
          .fontSize(20)
          .onClick(() => {
            this.UIAbilityInfo = JSON.stringify(this.UIAbilityContext.abilityInfo)
            console.log(`ContextDemo abilityInfo = ${this.UIAbilityInfo}`)
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

后台长时任务启动失败(API 9)

问题现象

调用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"  // 长时任务权限
        }
    ]
}

FA卡片如何进行数据交互(API 9)

卡片通过postCardAction接口触发和提供方的交互,在提供方中通过updateForm方法更新数据。

系统是否支持在桌面上创建应用的快捷入口,直接打开指定页面?(API 10)

当前不支持

了解到目前还有很多小伙伴不知道学习鸿蒙需要重点掌握哪些核心要领?


为了帮助大家更深入有效的学习到鸿蒙开发知识点,我特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源, 内容包含了:【ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战】等技术知识点。

如果你是一名Android、Java、前端等开发人员、或是刚开始学习鸿蒙开发。想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。鸿蒙星河版学习路线+学习文档+面试题←点击领取,下面是鸿蒙开发的学习路线图。

应用开发中级就业技术

 应用开发中高级就业技术

南北双向高工技能基础

 全网首发-工业级 南向设备开发就业技术

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF

获取完整版白皮书方式请点击:鸿蒙生态应用开发白皮书V2.0PDF (qq.com)

以下也为大家准备了针对鸿蒙成长路线打造的鸿蒙学习文档。《鸿蒙开发学习手册》(共计890页)鸿蒙开发资料等…希望对大家有所帮助:

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:鸿蒙星河版学习路线+学习文档+面试题

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值