目录

开发指导

元服务支持被嵌入式运行开发指导

元服务要支持被应用嵌入式运行,必须使用EmbeddableUIAbility进行开发。EmbeddableUIAbility既支持被嵌入式运行,又支持被跳出式运行;普通的UIAbility只支持被跳出式运行。嵌入式运行元服务和跳出式运行元服务的主要区别请参考下表:

跳转模式

体验对比

总结

嵌入式运行元服务

  • 转场动效:应用内上下转场
  • 任务窗口:只能看到应用的任务窗口,看不到元服务的任务窗口
  • 元服务启动之前不需要用户弹框确认

嵌入式运行元服务相比较跳出式运行元服务有更沉浸式、更友好的使用体验

跳出式运行元服务

  • 转场动效:应用间左右转场动效
  • 任务窗口:同时看到应用和元服务的任务窗口
  • 元服务启动之前需要用户弹框确认

[h2]规格约束

[h2]接入指导

  1. 元服务支持被嵌入式运行。
    export default class AtomicServiceAbility extends EmbeddableUIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
      }
    }
  2. 判断元服务是否被嵌入式运行。

    通过want的wantConstant.Params.SHOW_MODE_KEY参数判断元服务是否为嵌入式运行,want.parameters[wantConstant.Params.SHOW_MODE_KEY]的值为wantConstant.ShowMode.EMBEDDED_FULL表示元服务是被全屏嵌入式运行。

    export default class AtomicServiceAbility extends EmbeddableUIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
        if (want.parameters) {
          hilog.debug(0x0000, 'testTag', '%{public}s',
            'Ability onCreate:' + want.parameters[wantConstant.Params.SHOW_MODE_KEY])
        }
      }
    }

应用支持嵌入式运行元服务开发指导

应用需要通过系统提供的FullScreenLaunchComponent组件实现嵌入式运行元服务。

[h2]规格约束

[h2]接入指导

  1. 通过FullScreenLaunchComponent实现嵌入式运行元服务的示例代码。
    import { FullScreenLaunchComponent } from '@ohos.arkui.advanced.FullScreenLaunchComponent';
    import { common } from '@kit.AbilityKit';
    @Entry
    @Component
    struct Index {
      pageStack: NavPathStack = new NavPathStack();
      private context = getContext(this) as common.UIAbilityContext;
      appId = '5765880207854520769'
      build() {
        Navigation(this.pageStack) {
          Column() {
            FullScreenLaunchComponent({
              content: ColumChild,
              appId: this.appId,
              options: {}
            })
              .margin({ top: 20 })
            Button('跳出式运行元服务').onClick(() => {
              this.context.openAtomicService(this.appId)
            })
              .margin({ top: 20 })
          }
        }
        .title('可分可合应用')
      }
    }
    @Builder
    function ColumChild() {
      Column() {
        Button('嵌入式运行元服务')
      }
    }
  2. 应用给嵌入式运行的元服务传递自定义参数。

    在应用的页面增加参数传递:

    FullScreenLaunchComponent({
      content: ColumChildHsp,
      appId: this.hspAppId,
      options: {
        parameters: {
          page: 'SubPkgPageOneHsp',
        }
      }
    })
      .margin({ top: 20 })

    在元服务的EmbeddableUIAbility的onCreate中通过want获取应用传给元服务的参数:

    export default class AtomicServiceHspAbility extends EmbeddableUIAbility {
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        console.log(`onCreate, want parameters: ${want.parameters?.page}`);
      }
    }
  3. 调试嵌入式运行元服务。

    嵌入式运行元服务能力默认是受限的,需要开发者申请权限,才能使用。如果开发者在申请权限之前开发调试阶段想临时开启权限,可以通过打开开发者选项中的“开发中元服务豁免管控”开关来获取调试嵌入式元服务的权限。

    开发者选项中的“开发中元服务豁免管控”开关具体放通规格说明:

    • 拉起方应用和被拉方元服务,至少有一方的签名必须是调试签名,才可以通过打开该开关放通权限管控
    • 如果拉起方应用需要调试嵌入式运行的元服务已经上架发布,需要先在负一屏手动搜索并下载安装该元服务,再测试嵌入式运行该元服务,目前版本不支持调试阶段嵌入式运行触发元服务免安装