引言
在现代开发中,服务卡片 是不可或缺的一部分,比如音乐,天气类等应用,官网的介绍中写道:卡片让您便捷地预览服务信息,例如查看天气或日历日程等内容。您可将卡片添加到屏幕上,让这类信息触手可及。您还可按喜好选取不同样式和排列方式,打造个性化桌面。
大体思路
- 创建服务卡片
- 应用与服务卡片的交互
- 刷新卡片内容
- 应用端主动更新卡片信息
创建服务卡片
首先,我们需要打开Edit Configurations,选中Deploy Multi Hap,将DEploy Muliti Hap Packages 的框打上勾
然后应用就可以愉快的进行服务卡片的开发了:
创建步骤:选中Entry,new,Service Widget
在弹出框中选选择想要创建的服务卡片类型,本文中选中默认的文本卡片
创建完成后除了serviceCard页面还会生成一个EntryFormAbility文件,和EntryAbility不同的是,EntryFormAbility继承了FormExtensionAbility,而EntryAbility继承了UIAbility。可以理解他们是2个进程。
创建完服务卡片,先运行起来后效果:
我们可以观察到,创建的服务卡片,在点击卡片后有如下代码
postCardAction(this, {
action: this.ACTION_TYPE,
abilityName: this.ABILITY_NAME,
params: {
message: this.MESSAGE
}
});
postCardAction是给卡片添加意图,this代表当前卡片,action是类型,abilityName是打开哪个Ability,params是需要给应用进程传递的数据(服务卡片在另外一个进程),点击完服务卡片后发现,跳转到了应用首页,那能否跳转到指定页面呢?
应用与服务卡片的交互
在卡片上添加2 个按钮,去掉原来的整个卡片的onClick,添加2个按钮
Button('首页').onClick(()=>{
postCardAction(this,{
'action':'router',
'abilityName':'EntryAbility',
'params':{
targetPage:"Index"
},
})
})
Button('我的').onClick(()=>{
postCardAction(this,{
'action':'router',
'abilityName':'EntryAbility',
'params':{
targetPage:"MinePage"
},
})
})
}
在点击按钮的时候把我们需要跳转的page名称传给应用,那如何接受这targetPage呢?
我们在EntryAbility里看到很多空方法,其实就是Ability的生命周期,有过原生安卓开发经验的,可以将它理解为application的生命周期回调函数。
//要访问的页面
let selectPage =''
export default c