【FAQ】HarmonyOS SDK 闭源开放能力 — Form Kit
1.问题描述:
卡片里的 Iamge 无法显示网络图片。
解决方案:
通过 FormExtensionAbility 在元服务卡片上加载网络图片有以下两种方案:
方案一:先下载网络图片到本地,参考元服务卡片上加载本地图片示例代码在 EntryFormAbility 的 onAddForm 生命周期回调中实现本地文件的刷新。刷新后,在卡片页面通过 backgroundImage 属性展示 EntryFormAbility 传递过来的卡片内容。
方案二:申请 ohos.permission.INTERNET 权限,创建 HTTP 请求,下载网络图片数据并保存到应用的临时文件中,在 EntryFormAbility 的 onFormEvent 生命周期回调中实现网络文件的刷新。刷新后,在卡片页面通过 backgroundImage 属性展示 EntryFormAbility 传递过来的卡片内容。使用这种方案在元服务卡片上加载网络图片示例代码详见元服务卡片上加载网络图片指南。
2.问题描述:
如何在主应用中获取卡片的添加/移除?
解决方案:
一、卡片添加/移除的场景以及相关卡片生命周期由于目前卡片添加/移除至桌面目前没有直接完成的回调响应,可以通过 onAddForm 和 onRemoveForm 结合记录保存到桌面的卡片,onAddForm/onRemoveForm 添加至桌面的生命周期触发流程如下:
长按应用图标->服务卡片->打开卡片列表,触发 onAddForm (卡片列表中有几张卡片生命周期就会回调 onAddForm 几次)。例如:打开下面的卡片列表,卡片列表中有 3 张卡片,可以看到日志中 OnAddForm 回调了 3 次。
服务卡片列表取消->触发 onRemoveForm(卡片列表中有几张卡片生命周期就会回调触发 onRemoveForm 几次)。 例如:点击 x 号取消了服务卡片列表,则会出发 OnRemoveForm 回调 3 次。
服务卡片列表选择->某一张卡片添加到桌面(卡片生命周期 onAddForm 选中的卡片,onRemoveForm 其余卡片)。例如:添加一张卡片至桌面,则会 OnAddForm 选中的的卡片,OnRemove 另外两张卡片。
移除某一张卡片(卡片生命周期 onRemoveForm 移除的卡片)。例如:在桌面移除一张卡片,会 OnRemove 当前移除的卡片。综上流程,卡片整个添加至桌面的流程中,中间状态生命周期 onAddForm/onRemoveForm 会回调多次,但是最终卡片新增还是移除是确定的。
二、实现卡片添加/移除管理以及通知主应用的实现本方案使用首选项通过在服务卡片中 onAddForm/onRemoveForm 回调函数中,对 formId 进行持久化缓存,并在主应用中进行跨进程读取。以下是实现步骤:
实现一个公共的单例首选项类以供服务卡片/主应用共同使用,需要注意的是,这里首选项对于跨进程的场景下,需要使用同一个 context 上下文对象,后面在调用处均使用了 this.context.getApplicationContext()保持统一。
当长按应用图标拉起应用卡片列表时以及在卡片列表中选择一张服务卡片时,会触发 onAddForm,此时将卡片 id 保存下来:(注意:formlist 需要做去重)
服务卡片列表取消时或者在桌面移除卡片时,会触发 onRemoveForm,此时将记录里对应的数据删除,剩余的即是添加到桌面的卡片:(注意:formlist 需要做去重)
4.然后,在主应用中对 formId 进行查询:(注意:主应用需要和卡片使用同一个 context)
3.问题描述:
卡片列表如何展示网络图片?
解决方案:
卡片里面没有直接联网的权限,加载网络图片需要先将网络图片下载到本地,下载网络图片需要使用到网络能力,需要申请ohos.permission.INTERNET权限。
EntryFormAbility 中的 onFormEvent 生命周期回调中实现网络文件的刷新。
在卡片中通过 memory:// + fileName 的格式展示。







评论