鸿蒙学习-服务卡片进阶

本篇内容来继续鸿蒙的服务卡片相关内容。

其实标题叫进阶不是很准确,应该说是对基础文章中未提到的事件与数据交互部分的补充。

上一篇主要是卡片的创建、生命周期、配置文件等比较基础的部分,我们在实际开发中遇到的需求必然不可能这么简单,肯定牵扯到卡片的事件与数据的交互相关内容,那么今天我们就来看下服务卡片中的卡片事件与数据交互。

卡片事件

在ArkTS的卡片服务中提供了一个 postCardAction()接口,这个接口就是用于卡片内部和应用间的交互。当前支持三种类型的事件,分别是:routermessagecall,只在卡片内可以调用。

kotlin 复制代码
postCardAction(this, {
  'action': this.ACTION_TYPE,
  'abilityName': this.ABILITY_NAME
});

由以上代码可知::postCardAction的接受参数有两个,分别是componentaction,component为当前自定义组件的实例,所以一般传this。

action为Object,其中包含的有:

  • action: "router","message","call"
  • bundleName: 包名
  • moduleName: 模块名
  • abilityName: UIAbility名
  • patams: action携带的额外参数,内容需要使用JSON格式的键值对

下面我们分别看下这几个事件

router事件

router可以快速拉起卡片所属应用指定的UIAbility

scss 复制代码
build() {
  Row() {
    Column() {
      Text($r('app.string.name_color6'))
        .fontSize($r('app.float.font_size'))
        .fontColor(Color.White)

      Text($r('app.string.code_color6'))
        .fontSize($r('app.float.font_size'))
        .fontColor(Color.White)
    }
    .width(this.FULL_WIDTH_PERCENT)
  }
  .backgroundColor($r('app.color.color6'))
  .height(this.FULL_HEIGHT_PERCENT)
  .onClick(() => {
    this.jumpToAbility()
  })
}

jumpToAbility() {
  postCardAction(this, {
    'action': 'router',
    'abilityName': 'EntryAbility',
    "params": {
      "message": this.MESSAGE
    }
  });
}

如以上代码,我在卡片的点击事件中添加了postCardAction事件,然后将其类型指定为router,跳转的abilityName为当前应用的UIAbility,并且添加了需要传递的信息params,params的参数时key、value形式。

以上就是卡片页面发送router事件的代码,那么我们如何在UIAbility中接收router事件呢?

javascript 复制代码
onCreate(want, launchParam) {
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}

onNewWant(want, launchParam){
  
}

主要是onCreateonNewWant这两个生命周期内,那么他们两个的区别呢,我们回到开始的图:

区别就是是否是第一次启动:

  • 如果是第一次启动,在收到Router事件后会触发onCreate的回调
  • 如果不是第一次启动已经在后台运行,在收到Router事件后会触发onNewWant的回调

所以我们一把情况下是在两个生命周期内都要进行处理,除非是特殊的只有第一次启动的特殊需求。

call事件

如果我们希望在卡片上实现和应用在前台时相同的功能,比如说音乐应用的卡片,我们希望能扣通过点击卡片来实现播放暂停等功能时就可以使用call事件。

kotlin 复制代码
postCardAction(this, {
  'action': 'call',
  'abilityName': 'EntryAbility',
  "params": {
     "method": 'funA'
  }
});

在call事件时发送事件的代码我们需要注意两点,分别是actionparams,action中我们需要将router换为call,params中不再是key、value形式,而是固定的method

下面我们来看接受:

首先我们需要一个function来获取call事件中传递的参数

javascript 复制代码
function FunACall(data){
  ...
  return null;
}

然后在onCreate中进行持续监听:

javascript 复制代码
onCreate(want, launchParam) {
  try {
    this.callee.on('funA', FunACall);
  } catch (error){
    console.log('error')
  }
}

因为我们是在持续监听所以一直在消耗内存,所以我们需要在onDestroy中进行解除:

javascript 复制代码
onDestroy() {
  try {
    this.callee.off('funA');
  } catch (error){
    console.log('error')
  }
}

message

message主要用于刷新卡片的内容,但是其实router、call、message都可以刷新卡片内容,我们以message来进行距举例:

javascript 复制代码
onFormEvent(formId, message) {
  let formData = {
    'color_name': '',
    'color_code': '',
  }
  let formInfo = formBindingData.createFormBindingData(formData)
  formProvider.updateForm(formId,formInfo).then((data) => {
    console.log('success' + JSON.stringify(data));
  }).catch((error) => {
    console.error('error' + JSON.stringify(error))
  })
}

我们来分析下上面的代码,formData是需要更新的数据,键值对名称需要与卡片的参数对应。

然后创建formInfo

真正更新方法其实是formProvider.updateForm方法,需要传入两个参数,一个是formId另一个就是刚刚创建的formInfo

这样我们就完成了卡片的刷新。

数据交互

这里的数据交互并不是用户相关的操作(用户相关的数据操作我们在上面的事件中已经进行了说明),这里说的是我们设置的卡片内容的定时刷新的相关内容。

定时刷新

卡片的定时刷新,这一块我们在上一篇中进行了介绍,这里就不再进行说明。

下次刷新

指定卡片的下一次刷新时间,最短时间是5分钟,例如在调用接口或者其他操作的5分钟后进行卡片内容的刷新。

需要通过formProvider.setFormNextRefreshTime方法

javascript 复制代码
.onClick(() => {
  try {
    formProvider.setFormNextRefreshTime(formId, 5, (err, data) => {

    })
  }catch (err){
    
  }
})

例如上面的代码中我在点击事件中调用了formProvider.setFormNextRefreshTime方法,其中formId需要自己定义,时间这里的5是最短时间只能大于不能小于。

以上就是鸿蒙的ArkTS中服务卡片相关的内容,如果文中有错误之处欢迎评论指出。

让我们互相学习共同进步!最后提前祝大家春节快乐!

相关推荐
小强在此1 小时前
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
华为·开源·团队开发·智慧农业·harmonyos·开源鸿蒙
PlumCarefree4 小时前
基于鸿蒙API10的RTSP播放器(四:沉浸式播放窗口)
华为·harmonyos
中关村科金8 小时前
中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速
华为·音视频·harmonyos
小强在此12 小时前
基于OpenHarmony(开源鸿蒙)的智慧医疗综合应用系统
华为·开源·团队开发·健康医疗·harmonyos·开源鸿蒙
奔跑的露西ly18 小时前
【鸿蒙 HarmonyOS NEXT】popup弹窗
华为·harmonyos
OH五星上将1 天前
OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(一)
嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙移植
codes234577891 天前
鸿蒙开发之ArkTS 界面篇 一
harmonyos·arkts·harmonyos next·deveco-studio·鸿蒙界面·鸿蒙界面入门·鸿蒙 index.ets
HarmonyOS_SDK1 天前
免弹窗、预授权,默认界面扫码能力打造系统级扫码体验
harmonyos
追风小老头折腾程序1 天前
实战06-LazyForEach
harmonyos