卡片特点:
-
卡片可以承载少量的内容显示和交互
-
卡片可以充当元服务的入口,点击卡片可以唤起元服务
服务卡片-应用双向通信
卡片 => 应用
使用postCardAction方法
@Entry
@Component
struct MainPic {@Statenum: number = 0build() {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)}
}
点击卡片唤起应用
.onClick(() => {postCardAction(this, {action: 'router',abilityName: 'EntryAbility',})})
加1减1传递当前的数字
@Entry
@Component
struct Count {@Statenum: number = 0build() {Row({ space: 10 }) {Button("-").onClick(() => {if(this.num)this.num--postCardAction(this, {action: 'call',abilityName: 'EntryAbility', // 只能跳转到当前应用下的UIAbilityparams: {// 使用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', // 只能跳转到当前应用下的UIAbilityparams: {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方式传递调用,需要开启一个后台权限-保持应用在后台
"requestPermissions": [{"name": "ohos.permission.KEEP_BACKGROUND_RUNNING"}],
在ability的onCreate采用callee接收调用方法
callee方法的第一个参数为调用方法名,第二个参数必须返回一个实现rpc.Parcelable的实现类对象
定义一个Params的参数对象
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调用的方法
// 声明一个接收参数的对象
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 CardParamsAppStorage.setOrCreate("num", res.num)return new Params()})}