文档管理中心

应用启动设置

在应用开发中,启动应用(通常指启动UIAbility组件)是开发者的常见任务。例如,从商城应用跳转到支付应用进行付款,从聊天应用启动视频应用播放视频,或者在应用间跳转时需要指定特定的窗口模式等场景。

通过StartOptions,开发者可以在启动UIAbility时灵活控制其启动行为,包括窗口模式、窗口位置、启动动效、启动页样式、窗口尺寸限制等多个方面,从而满足不同设备形态和用户场景的需求。

指定窗口模式启动应用

在某些场景下,开发者需要指定UIAbility以特定的窗口模式启动。例如:

  • 在平板设备上,商品详情窗口以分屏模式启动,充分利用大屏优势。
  • 在PC/2in1设备上,打开文档时以全屏模式启动,提供沉浸式体验。
  • 在视频应用中,打开视频播放UIAbility时,希望以悬浮窗形式显示,方便用户同时查看简介和播放界面。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的windowMode,指定窗口模式。windowMode的说明参见StartOptions。如果未指定windowMode,UIAbility将以系统默认的窗口展示形态启动。
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, AbilityConstant, StartOptions } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct StartWithSpecifiedWindowModeAbility {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("以分屏模式启动")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'StartWithSpecifiedWindowModeAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从StartWithSpecifiedWindowModeAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. windowMode: AbilityConstant.WindowMode.WINDOW_MODE_SPLIT_SECONDARY // 以分屏模式拉起
  27. };
  28. context.startAbility(want, options).then(() => {
  29. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  30. }).catch((err: BusinessError) => {
  31. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  32. });
  33. })
  34. }
  35. .width('100%')
  36. }
  37. .height('100%')
  38. }
  39. }

设置窗口显示模式

在某些场景下,开发者需要指定UIAbility窗口标题栏显示哪些窗口模式。例如:

  • 需要控制窗口是否支持全屏模式。
  • 需要控制窗口是否支持悬浮窗模式。
  • 需要控制窗口是否支持分屏模式。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的supportWindowModes,设置窗口显示模式。supportWindowModes的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, StartOptions, bundleManager } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct SetWindowDisplayModeAbility {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("设置窗口显示模式")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'EntryAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从EntryAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. supportWindowModes: [
  27. bundleManager.SupportWindowMode.FULL_SCREEN, // 支持全屏模式
  28. ]
  29. };
  30. context.startAbility(want, options).then(() => {
  31. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  32. }).catch((err: BusinessError) => {
  33. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  34. });
  35. })
  36. }
  37. .width('100%')
  38. }
  39. .height('100%')
  40. }
  41. }

设置窗口分配比例

在某些场景下,开发者需要指定UIAbility在分屏模式下的窗口比例分配。例如,根据应用内容的重要程度,设置不同的分屏比例。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 从API版本26.0.0开始,支持通过StartOptions的splitRatio字段设置窗口分配比例。splitRatio的说明参见StartOptionsSplitRatioPreference
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, StartOptions, AbilityConstant } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct SetSplitRatioAbility {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("以比例分屏启动")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'EntryAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从EntryAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. windowMode: AbilityConstant.WindowMode.WINDOW_MODE_SPLIT_SECONDARY, // 以分屏模式拉起
  27. };
  28. context.startAbility(want, options).then(() => {
  29. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  30. }).catch((err: BusinessError) => {
  31. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  32. });
  33. })
  34. }
  35. .width('100%')
  36. }
  37. .height('100%')
  38. }
  39. }

指定显示屏幕启动应用

在多屏设备(如平板连接外接显示器、2in1设备等)上,开发者可能需要指定UIAbility在特定的屏幕上启动。例如:

  • 在平板设备上,将视频播放功能启动到外接显示器上。
  • 在2in1设备上,将辅助功能启动到副屏幕上。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的displayId,指定要显示的屏幕。displayId的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, StartOptions } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct SpecifyDisplayScreen {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("在当前屏幕上启动")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'EntryAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从EntryAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. displayId: -1 // 在当前屏幕上启动
  27. };
  28. context.startAbility(want, options).then(() => {
  29. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  30. }).catch((err: BusinessError) => {
  31. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  32. });
  33. })
  34. }
  35. .width('100%')
  36. }
  37. .height('100%')
  38. }
  39. }

控制应用启动时是否有动效

需要快速切换界面时,关闭动画以提升响应速度。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的withAnimation,控制是否有启动动效。withAnimation的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, StartOptions } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct ControlStartupAnimation {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("关闭启动动画")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'EntryAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从EntryAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. withAnimation: false // 关闭启动动画
  27. };
  28. context.startAbility(want, options).then(() => {
  29. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  30. }).catch((err: BusinessError) => {
  31. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  32. });
  33. })
  34. }
  35. .width('100%')
  36. }
  37. .height('100%')
  38. }
  39. }

启动应用时设置窗口位置

自由窗口状态下,开发者可能需要指定UIAbility窗口的初始位置。例如:

  • 在多窗口场景下,让新窗口出现在特定位置,避免遮挡其他重要内容。
  • 在大屏设备上,为内容展示类应用设置较大的窗口尺寸。
  • 在多窗口场景下,为辅助工具类应用设置较小的窗口尺寸。
  • 将辅助窗口放置在屏幕边缘。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的windowLeft、windowTop、windowWidth、windowHeight属性,设置窗口位置和尺寸。相关属性的说明参见StartOptions。建议同时配置windowLeft和windowTop字段。
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, StartOptions } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct SetWindowPosition {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("设置窗口位置")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'EntryAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从EntryAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. displayId: 0,
  27. windowLeft: 100, // 距离屏幕左侧100px
  28. windowTop: 200, // 距离屏幕顶部200px
  29. windowWidth: 800, // 窗口宽度800px
  30. windowHeight: 600 // 窗口高度600px
  31. };
  32. context.startAbility(want, options).then(() => {
  33. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  34. }).catch((err: BusinessError) => {
  35. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  36. });
  37. })
  38. }
  39. .width('100%')
  40. }
  41. .height('100%')
  42. }
  43. }

启动应用时设置窗口尺寸限制

自由窗口状态下,开发者可能需要限制UIAbility窗口的尺寸范围,防止用户将窗口调整得过大或过小。例如:

  • 设置最小窗口尺寸,确保UI内容不会因为窗口太小而无法正常显示。
  • 设置最大窗口尺寸,避免窗口在大屏设备上过大而影响使用体验。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的minWindowWidth、minWindowHeight、maxWindowWidth、maxWindowHeight属性,设置窗口尺寸限制。相关属性的说明参见StartOptions。可以通过getWindowLimitsVP()获取当前窗口的尺寸限制。
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { common, Want, StartOptions } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. const TAG: string = '[StartAbility]';
  5. const DOMAIN_NUMBER: number = 0xFF00;
  6. @Entry
  7. @Component
  8. struct SetWindowSizeConstraintsAbility {
  9. build() {
  10. Row() {
  11. Column() {
  12. Button("设置ability的窗口尺寸")
  13. .onClick(() => {
  14. // context为调用方UIAbility的UIAbilityContext
  15. let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  16. let want: Want = {
  17. deviceId: '', // deviceId为空表示本设备
  18. bundleName: 'com.example.startoptions',
  19. abilityName: 'EntryAbility',
  20. parameters: {
  21. // 自定义信息
  22. info: '从EntryAbility启动'
  23. }
  24. };
  25. let options: StartOptions = {
  26. startWindowBackgroundColor: '#E510FFFF', // ARGB格式
  27. minWindowWidth: 320, // 最小宽度320vp
  28. maxWindowWidth: 2560, // 最大宽度2560vp
  29. minWindowHeight: 240, // 最小高度240vp
  30. maxWindowHeight: 2560 // 最大高度2560vp
  31. };
  32. context.startAbility(want, options).then(() => {
  33. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  34. }).catch((err: BusinessError) => {
  35. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  36. });
  37. })
  38. }
  39. .width('100%')
  40. }
  41. .height('100%')
  42. }
  43. }

隐藏启动UIAbility

在某些场景下,开发者需要启动UIAbility但不希望其立即显示在前台。例如:启动一个用于后台监控的UIAbility,等待条件触发后再显示。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的processMode和startupVisibility,设置进程模式和可见性。相关属性的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
说明

当设置目标UIAbility为不可见时:

  • 目标UIAbility的窗口不会显示在前台。
  • Dock栏不会有图标。
  • 目标UIAbility的onForeground生命周期不会被调用。
收起
自动换行
深色代码主题
复制
  1. import { AbilityConstant, contextConstant, StartOptions, UIAbility, Want } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { window } from '@kit.ArkUI';
  4. const DOMAIN = 0x0000;
  5. const TAG: string = '[StartAbility]';
  6. const DOMAIN_NUMBER: number = 0xFF00;
  7. export default class HideStartedUIAbilityAbility extends UIAbility {
  8. // ...
  9. onForeground(): void {
  10. // Ability has brought to foreground
  11. hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  12. let want: Want = {
  13. deviceId: '', // deviceId为空表示本设备
  14. bundleName: 'com.example.startoptions',
  15. abilityName: 'EntryAbility',
  16. parameters: {
  17. // 自定义信息
  18. info: '从EntryAbility启动'
  19. }
  20. };
  21. let options: StartOptions = {
  22. processMode: contextConstant.ProcessMode.NEW_PROCESS_ATTACH_TO_PARENT,
  23. startupVisibility: contextConstant.StartupVisibility.STARTUP_HIDE
  24. };
  25. try {
  26. this.context.startAbility(want, options, (err: BusinessError) => {
  27. if (err.code) {
  28. // 处理业务逻辑错误
  29. console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
  30. return;
  31. }
  32. // 执行正常业务
  33. console.info('startAbility succeed');
  34. });
  35. } catch (err) {
  36. // 处理入参错误异常
  37. let code = (err as BusinessError).code;
  38. let message = (err as BusinessError).message;
  39. console.error(`startAbility failed, code is ${code}, message is ${message}`);
  40. }
  41. }
  42. // ...
  43. }

设置启动页图标和背景色

开发者希望自定义UIAbility启动时显示的启动页图标和背景颜色。例如:

  • 为特定功能UIAbility设置主题色一致的启动背景和专属图标,提升品牌识别度。
  • 根据不同场景展示不同的启动页样式,增强视觉体验。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的startWindowIcon和startWindowBackgroundColor,设置启动页图标和背景色。相关属性的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
说明
  • 如果未配置startWindowIcon,则默认采用module.json5文件中startWindowIcon字段的配置。
  • 如果未配置startWindowBackgroundColor,则默认采用module.json5文件中startWindowBackground字段的配置。
  • 背景颜色为ARGB格式,如:#E5FFFFFF(透明度为E5,RGB值为FFFFFF)。
收起
自动换行
深色代码主题
复制
  1. import { AbilityConstant, StartOptions, UIAbility, Want } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { window } from '@kit.ArkUI';
  4. import { image } from '@kit.ImageKit';
  5. const DOMAIN = 0x0000;
  6. const TAG: string = '[StartAbility]';
  7. const DOMAIN_NUMBER: number = 0xFF00;
  8. export default class SetBackgroundColorAbility extends UIAbility {
  9. // ...
  10. async onForeground(): Promise<void> {
  11. // Ability has brought to foreground
  12. hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  13. let want: Want = {
  14. deviceId: '', // deviceId为空表示本设备
  15. bundleName: 'com.example.startoptions',
  16. abilityName: 'EntryAbility',
  17. parameters: {
  18. // 自定义信息
  19. info: '从EntryAbility启动'
  20. }
  21. };
  22. // 创建PixelMap对象
  23. let color = new ArrayBuffer(512 * 512 * 4);
  24. let bufferArr = new Uint8Array(color);
  25. for (let i = 0; i < bufferArr.length; i += 4) {
  26. bufferArr[i] = 255;
  27. bufferArr[i+1] = 0;
  28. bufferArr[i+2] = 122;
  29. bufferArr[i+3] = 255;
  30. }
  31. let windowParam: window.WindowCreateParams = {};
  32. let options: StartOptions = {
  33. startWindowIcon: await image.createPixelMap(color, {
  34. editable: true,
  35. pixelFormat: image.PixelMapFormat.RGBA_8888,
  36. size: { height: 512, width: 512 }
  37. }),
  38. startWindowBackgroundColor: '#E510FFFF', // ARGB格式
  39. minWindowWidth: 320,
  40. minWindowHeight: 240,
  41. maxWindowWidth: 2560,
  42. maxWindowHeight: 2560,
  43. windowCreateParams: windowParam
  44. };
  45. this.context.startAbility(want, options).then(() => {
  46. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  47. }).catch((err: BusinessError) => {
  48. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  49. });
  50. }
  51. // ...
  52. }

获取启动结果

在某些场景下,开发者需要获取UIAbility启动的结果,以便进行后续处理。例如:使用其他应用账号登录,需要知道拉起其他应用是否成功。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的completionHandler,设置启动结果回调。completionHandler的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { AbilityConstant, CompletionHandler, StartOptions, UIAbility, Want, bundleManager } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { window } from '@kit.ArkUI';
  4. const DOMAIN = 0x0000;
  5. const TAG: string = '[StartAbility]';
  6. const DOMAIN_NUMBER: number = 0xFF00;
  7. export default class GetLaunchResultAbility extends UIAbility {
  8. // ...
  9. onForeground(): void {
  10. // Ability has brought to foreground
  11. hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  12. let want: Want = {
  13. deviceId: '', // deviceId为空表示本设备
  14. bundleName: 'com.example.startoptions',
  15. abilityName: 'EntryAbility',
  16. parameters: {
  17. // 自定义信息
  18. info: '从EntryAbility启动'
  19. }
  20. };
  21. let completionHandler: CompletionHandler = {
  22. onRequestSuccess: (elementName: bundleManager.ElementName, message: string): void => {
  23. console.info(`${elementName.bundleName}-${elementName.moduleName}-${elementName.abilityName} start succeeded: ${message}`);
  24. },
  25. onRequestFailure: (elementName: bundleManager.ElementName, message: string): void => {
  26. console.error(`${elementName.bundleName}-${elementName.moduleName}-${elementName.abilityName} start failed: ${message}`);
  27. }
  28. };
  29. let options: StartOptions = {
  30. completionHandler: completionHandler
  31. };
  32. this.context.startAbility(want, options).then(() => {
  33. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  34. }).catch((err: BusinessError) => {
  35. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  36. });
  37. }
  38. // ...
  39. }

隐藏启动页

在某些场景下,开发者希望启动UIAbility时不显示启动页,直接显示应用界面。例如:

  • 快速切换功能时,避免启动页闪烁,提升体验流畅度。
  • 应用界面加载速度很快时,不需要启动页过渡。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的hideStartWindow,设置隐藏启动页。属性的说明参见StartOptions
  4. 调用startAbility接口,启动目标UIAbility。
说明

启动页介绍和规格详见StartWindow

收起
自动换行
深色代码主题
复制
  1. import { AbilityConstant, StartOptions, UIAbility, Want } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { window } from '@kit.ArkUI';
  4. const DOMAIN = 0x0000;
  5. const TAG: string = '[StartAbility]';
  6. const DOMAIN_NUMBER: number = 0xFF00;
  7. export default class HideSplashScreenAbility extends UIAbility {
  8. // ...
  9. onForeground(): void {
  10. // Ability has brought to foreground
  11. hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  12. let want: Want = {
  13. deviceId: '', // deviceId为空表示本设备
  14. bundleName: 'com.example.startoptions',
  15. abilityName: 'EntryAbility',
  16. parameters: {
  17. // 自定义信息
  18. info: '从EntryAbility启动'
  19. }
  20. };
  21. let options: StartOptions = {
  22. hideStartWindow: true // 隐藏启动页
  23. };
  24. this.context.startAbility(want, options).then(() => {
  25. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  26. }).catch((err: BusinessError) => {
  27. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  28. });
  29. }
  30. // ...
  31. }

设置窗口参数

在某些高级场景下,开发者需要更细粒度地控制UIAbility启动时的窗口参数。例如:窗口动效。

开发步骤如下:

  1. 在启动UIAbility之前,需要先导入相关的模块。
  2. 创建Want对象,指定要启动的UIAbility信息。UIAbilityContext的获取方式参见获取UIAbility的上下文信息
  3. 配置StartOptions的windowCreateParams,设置窗口参数。窗口参数配置详见WindowCreateParams
  4. 调用startAbility接口,启动目标UIAbility。
收起
自动换行
深色代码主题
复制
  1. import { AbilityConstant, StartOptions, UIAbility, Want } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { window } from '@kit.ArkUI';
  4. import { image } from '@kit.ImageKit';
  5. const DOMAIN = 0x0000;
  6. const TAG: string = '[StartAbility]';
  7. const DOMAIN_NUMBER: number = 0xFF00;
  8. export default class SetBackgroundColorAbility extends UIAbility {
  9. // ...
  10. async onForeground(): Promise<void> {
  11. // Ability has brought to foreground
  12. hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground');
  13. let want: Want = {
  14. deviceId: '', // deviceId为空表示本设备
  15. bundleName: 'com.example.startoptions',
  16. abilityName: 'EntryAbility',
  17. parameters: {
  18. // 自定义信息
  19. info: '从EntryAbility启动'
  20. }
  21. };
  22. // 创建PixelMap对象
  23. let color = new ArrayBuffer(512 * 512 * 4);
  24. let bufferArr = new Uint8Array(color);
  25. for (let i = 0; i < bufferArr.length; i += 4) {
  26. bufferArr[i] = 255;
  27. bufferArr[i+1] = 0;
  28. bufferArr[i+2] = 122;
  29. bufferArr[i+3] = 255;
  30. }
  31. let windowParam: window.WindowCreateParams = {};
  32. let options: StartOptions = {
  33. startWindowIcon: await image.createPixelMap(color, {
  34. editable: true,
  35. pixelFormat: image.PixelMapFormat.RGBA_8888,
  36. size: { height: 512, width: 512 }
  37. }),
  38. startWindowBackgroundColor: '#E510FFFF', // ARGB格式
  39. minWindowWidth: 320,
  40. minWindowHeight: 240,
  41. maxWindowWidth: 2560,
  42. maxWindowHeight: 2560,
  43. windowCreateParams: windowParam
  44. };
  45. this.context.startAbility(want, options).then(() => {
  46. hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in starting ability.');
  47. }).catch((err: BusinessError) => {
  48. hilog.error(DOMAIN_NUMBER, TAG, `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
  49. });
  50. }
  51. // ...
  52. }
在 指南 中进行搜索
请输入您想要搜索的关键词