本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

在华为鸿蒙系统中,应用组件之间的信息传递是通过 Want 对象实现的。Want 对象可以携带各种信息,例如目标组件的名称、参数、数据等,从而实现应用组件之间的通信和协作。

一、Want 的定义和作用

Want 是一个对象,用于在应用组件之间传递信息。它可以携带各种信息,例如目标组件的名称、参数、数据等,从而实现应用组件之间的通信和协作。
以下是一个 Want 对象的示例

let want: Want = {
  deviceId: '', // 目标设备的 ID,如果为空,则表示本设备
  bundleName: 'com.example.myapplication', // 目标组件的包名
  moduleName: 'entry', // 目标组件所在的模块名,如果为空,则表示默认模块
  abilityName: 'FuncAbility', // 目标组件的名称
  uri: 'https://www.test.com:8080/query/student', // 目标组件的 URI
  type: 'text/plain', // 目标组件的 MIME 类型
  action: 'ohos.want.action.search', // 目标组件的动作
  entities: ['entity.system.browsable'], // 目标组件的实体
  parameters: {
    // 目标组件的参数
    info: '这是一些自定义信息',
  },
};

开发者可以根据应用需求使用不同的 Want 参数属性,实现应用组件之间的信息传递和通信

二、显式 Want 与隐式 Want 的区别

显式 Want隐式 Want 是两种不同的 Want 对象,它们的主要区别在于目标组件的指定方式。

  • 显式 Want:在启动组件时,显式 Want 对象会指定目标组件的名称和包名,例如 wantInfo = { deviceId: '', bundleName: 'com.example.myapplication', abilityName: 'FuncAbility' }
  • 隐式 Want:在启动组件时,隐式 Want 对象不会指定目标组件的名称,而是通过 action、entities、uri、type 等信息进行匹配,例如 wantInfo = { action: 'ohos.want.action.search', entities: ['entity.system.browsable'], uri: 'https://www.test.com:8080/query/student', type: 'text/plain' }
    显式 Want 和隐式 Want 的选择取决于应用的需求。如果知道目标组件的名称和包名,则使用显式 Want;如果目标组件不明确,则需要使用隐式 Want。

    三、显式 Want 的匹配规则

    显式 Want 的匹配规则是根据 Want 对象中的信息与目标组件的配置进行匹配,只有匹配成功的组件才会被启动。
    以下是一个显式 Want 匹配的示例

    import { common, Want } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    let wantInfo: Want = {
      deviceId: '', // 目标设备的 ID,如果为空,则表示本设备
      bundleName: 'com.example.myapplication', // 目标组件的包名
      moduleName: 'entry', // 目标组件所在的模块名,如果为空,则表示默认模块
      abilityName: 'FuncAbility', // 目标组件的名称
    };
    // 启动目标组件
    common.startAbility(wantInfo).then(() => {
      hilog.info(0x0000, 'testTag', 'Succeeded in starting ability.');
    }).catch((err: BusinessError) => {
      hilog.error(0x0000, 'testTag', `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
    });

    显式 Want 的匹配规则

  • bundleName 匹配:首先匹配 Want 对象中的 bundleName 与目标组件配置中的 bundleName 是否一致。
  • abilityName 匹配:如果 bundleName 匹配成功,则匹配 Want 对象中的 abilityName 与目标组件配置中的 abilityName 是否一致。
  • parameters 匹配:如果 abilityName 匹配成功,则匹配 Want 对象中的 parameters 与目标组件配置中的 parameters 是否一致。
    只有当所有匹配规则都满足时,显式 Want 才会匹配成功,并启动目标组件

    四、隐式 Want 的匹配规则

    隐式 Want 的匹配规则是通过 action、entities、uri、type 等信息进行匹配,匹配成功的组件数量决定了隐式 Want 的处理方式。
    以下是一个隐式 Want 匹配的示例

    import { common, Want } from '@kit.AbilityKit';
    import { hilog } from '@kit.PerformanceAnalysisKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    let wantInfo: Want = {
      action: 'ohos.want.action.search', // 目标组件的动作
      entities: ['entity.system.browsable'], // 目标组件的实体
      uri: 'https://www.test.com:8080/query/student', // 目标组件的 URI
      type: 'text/plain', // 目标组件的 MIME 类型
    };
    // 启动目标组件
    common.startAbility(wantInfo).then(() => {
      hilog.info(0x0000, 'testTag', 'Succeeded in starting ability.');
    }).catch((err: BusinessError) => {
      hilog.error(0x0000, 'testTag', `Failed to start ability. Code is ${err.code}, message is ${err.message}`);
    });

    隐式 Want 的匹配规则

  • linkFeature 匹配:首先匹配 Want 对象中的 linkFeature 与目标组件配置中的 linkFeature 是否一致。
  • uri 和 type 匹配:如果 linkFeature 匹配成功,则匹配 Want 对象中的 uri 和 type 与目标组件配置中的 uris 数组中的 uri 和 type 是否一致。
  • action 和 entities 匹配:如果 uri 和 type 匹配成功,则匹配 Want 对象中的 action 和 entities 与目标组件配置中的 actions 和 entities 是否一致。
    隐式 Want 的匹配结果有以下几种情况
  • 匹配失败:如果所有匹配规则都失败,则隐式 Want 匹配失败,无法启动目标组件。
  • 匹配成功,单个组件:如果匹配成功,并且只有一个目标组件满足条件,则直接启动该目标组件。
  • 匹配成功,多个组件:如果匹配成功,并且有多个目标组件满足条件,则弹出选择框让用户选择要启动的组件。
    隐式 Want 的匹配规则相对复杂,开发者需要根据应用的需求选择合适的匹配规则,并确保配置文件中的信息准确无误

    五、Want 参数的属性说明

    Want 对象包含多个属性,每个属性都用于传递不同的信息。以下是一些常用的 Want 参数属性:

  • deviceId:目标设备的 ID,如果为空,则表示本设备。
  • bundleName:目标组件的包名。
  • moduleName:目标组件所在的模块名,如果为空,则表示默认模块。
  • abilityName:目标组件的名称。
  • uri:目标组件的 URI,用于匹配具有特定 URI 的组件。
  • type:目标组件的 MIME 类型,用于匹配具有特定 MIME 类型的组件。
  • action:目标组件的动作,用于匹配具有特定动作的组件。
  • entities:目标组件的实体,用于匹配具有特定实体的组件。
  • parameters:目标组件的参数,用于传递自定义信息。

咱们可以根据应用需求使用不同的 Want 参数属性,实现应用组件之间的信息传递和通信
本篇博客介绍了华为鸿蒙 Want 的定义、作用、显式 Want 和隐式 Want 的区别、匹配规则以及 Want 参数的属性说明。后续文章将深入讲解 Want 对象的具体使用方法和开发技巧
请注意,由于鸿蒙系统版本更新较快,部分功能可能存在变动,请以最新版本官方文档为准


SameX
1 声望2 粉丝