鸿蒙服务卡片

卡片特点:

  1. 卡片可以承载少量的内容显示和交互

  2. 卡片可以充当元服务的入口,点击卡片可以唤起元服务

服务卡片-应用双向通信

卡片 => 应用

使用postCardAction方法

TypeScript 复制代码
@Entry
@Component
struct MainPic {
  @State
  num: number = 0
  build() {
    Column({ space: 10 }) {
      Row({ space: 10 }) {
        Button("-")
          .onClick(() => {
            this.num && this.num--
          })
        Text(this.num.toString())
          .fontSize(20)
        Button("+")
          .onClick(() => {
            this.num++
          })
      }
      .width('100%')
      .justifyContent(FlexAlign.Center)
    }
    .width('100%')
    .height("100%")
    .justifyContent(FlexAlign.Center)

  }
}

点击卡片唤起应用

TypeScript 复制代码
.onClick(() => {
      postCardAction(this, {
        action: 'router',
        abilityName: 'EntryAbility',
      })
    })

加1减1传递当前的数字

TypeScript 复制代码
@Entry
@Component
struct Count {
  @State
  num: number = 0

  build() {
    Row({ space: 10 }) {
      Button("-")
        .onClick(() => {
          if(this.num)
              this.num--
          postCardAction(this, {
            action: 'call',
            abilityName: 'EntryAbility', // 只能跳转到当前应用下的UIAbility
            params: {
              // 使用call方式 需要第二个参数
              method: 'updateNum', // 名字必须叫method method的值是在ability中监听的方法名
              num: this.num
            }
          })
        })
      Text(this.num.toString())
        .fontSize(20)
      Button("+")
        .onClick(() => {
          this.num++
          postCardAction(this, {
            action: 'call',
            abilityName: 'EntryAbility', // 只能跳转到当前应用下的UIAbility
            params: {
              method: 'updateNum', // 名字必须叫method method的值是在ability中监听的方法名
              num: this.num
            }
          })
        })
    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
    .alignItems(VerticalAlign.Center)
    .onClick(() => {
      postCardAction(this, {
        action: 'router',
        abilityName: 'EntryAbility'
      })
    })
  }
}

请注意,如果使用call方式传递调用,需要开启一个后台权限-保持应用在后台

TypeScript 复制代码
 "requestPermissions": [{
      "name": "ohos.permission.KEEP_BACKGROUND_RUNNING"
    }],

在ability的onCreate采用callee接收调用方法

callee方法的第一个参数为调用方法名,第二个参数必须返回一个实现rpc.Parcelable的实现类对象

定义一个Params的参数对象

TypeScript 复制代码
import rpc from '@ohos.rpc';
class Params implements rpc.Parcelable {
  marshalling(messageSequence: rpc.MessageSequence): boolean {
    return true;
  }
  unmarshalling(messageSequence: rpc.MessageSequence): boolean {
    return true;
  }
}

在ability中监听callee调用的方法

TypeScript 复制代码
// 声明一个接收参数的对象
class CardParams {
  num: number = 0
}
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    this.callee.on("updateNum", (data) => {
      const res = JSON.parse(data.readString()) as CardParams
      AppStorage.setOrCreate("num", res.num)
      return new Params()
    })
  }
相关推荐
南村群童欺我老无力.1 分钟前
Flutter 框架跨平台鸿蒙开发 - 虚拟骰子应用开发教程
flutter·华为·harmonyos
不吃洋葱.2 分钟前
js主要内容
开发语言·javascript·ecmascript
Rhys..2 分钟前
python + selenium 如何定位动态元素
开发语言·python·selenium
源代码•宸2 分钟前
Golang原理剖析(GMP调度原理)
开发语言·经验分享·后端·面试·golang·gmp·runnext
LawrenceLan3 分钟前
Flutter 零基础入门(二十三):Icon、Image 与资源管理
开发语言·前端·flutter·dart
lbb 小魔仙9 分钟前
【Harmonyos】开源鸿蒙跨平台训练营DAY2:多终端工程创建运行、代码提交至AtomGit平台自建公开仓库全流程(附带出现问题及解决方法)
windows·flutter·开源·harmonyos·鸿蒙·开源鸿蒙·鸿蒙开平台应用
余衫马10 分钟前
Qt for Python:PySide6 入门指南(中篇)
开发语言·c++·python·qt
津津有味道12 分钟前
WEB浏览器网页读写Desfire EV1 EV2 EV3卡,修改DES、3DES、AES密钥JS源码JavaScript
前端·javascript·nfc·desfire·ev2·ev3·ev1
AI_零食15 分钟前
鸿蒙跨端框架Flutter学习day 2、常用UI组件-弹性布局进阶之道
学习·flutter·ui·华为·harmonyos·鸿蒙
叫我辉哥e117 分钟前
新手进阶Python:办公看板集成审批流+精细化权限+日志审计
开发语言·python·信息可视化