HarmonyOS鸿蒙Next中如何使用Want启动其他应用或系统功能?

HarmonyOS鸿蒙Next中如何使用Want启动其他应用或系统功能? 我需要从应用中打开浏览器、拨打电话、发送短信等系统功能,如何使用Want实现?

3 回复

实现思路:

  1. 导入相关模块:
import { common, Want } from '@kit.AbilityKit';
  1. 构造Want对象并启动:
const context = getContext(this) as common.UIAbilityContext;
const want: Want = {
  action: 'ohos.want.action.viewData',
  uri: 'https://www.example.com'
};
await context.startAbility(want);
  1. 封装常用的系统功能调用:
class IntentUtil {
  static async openUrl(context: common.UIAbilityContext, url: string) {
    const want: Want = { action: 'ohos.want.action.viewData', uri: url };
    await context.startAbility(want);
  }
}
  1. 完整示例代码:
import { common, Want } from '@kit.AbilityKit';

class IntentUtil {
  static async openBrowser(context: common.UIAbilityContext, url: string): Promise<void> {
    try {
      const want: Want = { action: 'ohos.want.action.viewData', uri: url };
      await context.startAbility(want);
    } catch (err) {
      console.error(`Open browser failed: ${JSON.stringify(err)}`);
    }
  }

  static async dialPhone(context: common.UIAbilityContext, phoneNumber: string): Promise<void> {
    try {
      const want: Want = { action: 'ohos.want.action.dial', uri: `tel:${phoneNumber}` };
      await context.startAbility(want);
    } catch (err) {
      console.error(`Dial phone failed: ${JSON.stringify(err)}`);
    }
  }

  static async sendSms(context: common.UIAbilityContext, phoneNumber: string, message: string): Promise<void> {
    try {
      const want: Want = {
        action: 'ohos.want.action.sendSms',
        uri: `sms:${phoneNumber}`,
        parameters: { sms_body: message }
      };
      await context.startAbility(want);
    } catch (err) {
      console.error(`Send SMS failed: ${JSON.stringify(err)}`);
    }
  }
}

@Entry
@Component
struct IntentDemo {
  private context = getContext(this) as common.UIAbilityContext;

  build() {
    Column({ space: 16 }) {
      Button('打开浏览器')
        .onClick(() => IntentUtil.openBrowser(this.context, 'https://www.harmonyos.com'))
      Button('拨打电话')
        .onClick(() => IntentUtil.dialPhone(this.context, '10086'))
      Button('发送短信')
        .onClick(() => IntentUtil.sendSms(this.context, '10086', '查询余额'))
    }
    .padding(20)
  }
}

更多关于HarmonyOS鸿蒙Next中如何使用Want启动其他应用或系统功能?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,使用Want启动其他应用或系统功能,主要通过UIAbility的上下文(context)调用startAbility()方法实现。Want是对象形式,需设置目标应用的bundleName和abilityName等参数。例如,启动系统设置:let want = { bundleName: 'com.ohos.settings', abilityName: 'SettingsAbility' }; context.startAbility(want)。此机制用于应用间交互与系统功能调用。

在HarmonyOS Next中,使用Want启动其他应用或系统功能是标准方式。以下是具体实现方法:

1. 启动系统功能(隐式Want) 对于打开浏览器、拨打电话等系统功能,通常使用隐式Want,指定actionuri等参数。

  • 打开浏览器
import { wantConstant, common, Want } from '@kit.AbilityKit';

let wantInfo: Want = {
  action: wantConstant.Action.VIEW_ACTION,
  uri: 'https://developer.harmonyos.com'
};
let context = getContext(this) as common.UIAbilityContext;
context.startAbility(wantInfo).then(() => {
  // 成功回调
}).catch((err) => {
  // 失败处理
});
  • 拨打电话
let wantInfo: Want = {
  action: wantConstant.Action.DIAL_ACTION,
  uri: 'tel:10086'
};
context.startAbility(wantInfo);
  • 发送短信
let wantInfo: Want = {
  action: wantConstant.Action.SENDTO_ACTION,
  uri: 'smsto:10086',
  parameters: {
    'content': '短信内容'
  }
};
context.startAbility(wantInfo);

2. 启动其他应用(显式Want) 如果需要启动特定应用,使用显式Want,指定bundleNameabilityName

let wantInfo: Want = {
  bundleName: 'com.example.app',
  abilityName: 'EntryAbility'
};
context.startAbility(wantInfo);

3. 关键配置module.json5中声明需要的权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.PLACE_CALL"
      }
    ]
  }
}

注意事项

  • 拨打电话等敏感操作需要相应权限并在安装时授权
  • 系统功能使用的action常量定义在@kit.AbilityKitwantConstant
  • 确保uri格式符合标准(如tel:smsto:https:

这种方式提供了统一的应用间通信机制,能可靠地启动系统功能和其他应用。

回到顶部