智能客服
你问我答,随时在线为你解决问题
从6.0.0(20)开始,支持元服务页面的分享。可通过服务面板入口进行当前页面的分享,也可通过分享Button组件在元服务页面内嵌入实现。
元服务分享 | 适用范围 | 分享入口 | 使用接口或组件 |
|---|---|---|---|
元服务页面分享 | 适用于ArkUI开发的元服务页面 | 服务面板 | onShare生命周期函数 |
页面内自定义 |
本能力依赖于组件导航(Navigation)能力,使用Navigation来实现元服务的分页能力。
开发者需要在元服务工程中,在UIAbility中配置onShare生命周期函数,在wantParams中声明atomicservice.param.key.shareInfo表示分享方要分享页面数据。
元服务面板能够依赖此数据根据判断用户所处分页是否允许分享,进而构建分享数据,拉起系统分享面板。
- import UIAbility from '@ohos.app.ability.UIAbility';
- interface ShareInfo {
- showShareMenu: boolean; // 当前页面是否允许分享,面板分享开关是否打开, 不填默认为不允许。
- title?: string; // 系统分享面板标题,默认为元服务名称。
- description?: string; // 系统分享面板简介,默认为元服务一句话描述。
- }
- export default class EntryAbility extends UIAbility {
- onShare(wantParams: Record<string, Object>) {
- /*
- * 定义分享数据
- */
- const shareInfo: ShareInfo = {
- showShareMenu: true,
- title: '分享标题',
- description: '分享简介',
- }
- wantParams['atomicservice.param.key.shareInfo'] = shareInfo;
- }
- //...
- }
NavigationSubPageName指的是开发者在navigation中使用NavDestination页面名称,以下是自定义路由表的实现举例。
- // 使用navigation组件一般通过如下方式更新页面。
- @Entry
- @Component
- struct NavigationExample {
- pageInfos: NavPathStack = new NavPathStack();
- isUseInterception: boolean = false;
-
- @Builder
- pageMap(pageName: string, params: Record<string, string>) {
- if (pageName === NavigationSubPageName.PageOne) {
- PageOne()
- } else if (pageName === NavigationSubPageName.PageTwo) {
- PageTwo()
- } else if (pageName === NavigationSubPageName.PageThree) {
- PageThree()
- }
- }
-
- build() {
- Navigation(this.pageInfos) {
- Column() {
- Button('pushPath', { stateEffect: true, type: ButtonType.Capsule })
- .width('80%')
- .height(40)
- .margin(20)
- .onClick(() => {
- this.pageInfos.pushPath({ name: NavigationSubPageName.PageOne }); //将name指定的NavDestination页面信息入栈
- })
- Button('use interception', { stateEffect: true, type: ButtonType.Capsule })
- .width('80%')
- .height(40)
- .margin(20)
- .onClick(() => {
- this.isUseInterception = !this.isUseInterception;
- if (this.isUseInterception) {
- this.registerInterception();
- } else {
- this.pageInfos.setInterception(undefined);
- }
- })
- }
- }.navDestination(this.pageMap)
- }
- }
-