HarmonyOS鸿蒙Next中通过已知手机号唤起系统短信发送功能需要调用哪个API?

HarmonyOS鸿蒙Next中通过已知手机号唤起系统短信发送功能需要调用哪个API? 通过已知手机号 唤起系统短信发送功能 这个需要调用哪个api?

7 回复

通过短信服务实现相关功能。发送短信时,请求服务端,服务端调用短信接口,使用sms.sendShortMessage发送短信。

sendShortMessage(options: SendMessageOptions, callback: AsyncCallback<void>): void

发送短信。使用callback异步回调。

需要权限:ohos.permission.SEND_MESSAGES(该权限仅系统应用可申请)

系统能力:SystemCapability.Telephony.SmsMms

参数:

参数名 类型 必填 说明
options SendMessageOptions 发送短信的参数和回调,参考SendMessageOptions。
callback AsyncCallback<void> 发送短信的回调函数。

错误码:

以下错误码的详细介绍请参见通用错误码说明文档ohos.telephony(电话子系统)错误码

错误码ID 错误信息
201 Permission denied.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types.
8300001 Invalid parameter value.
8300002 Operation failed. Cannot connect to service.
8300003 System internal error.
8300999 Unknown error code.
import { sms } from '@kit.TelephonyKit';
import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit';
let sendCallback: AsyncCallback<sms.ISendShortMessageCallback> = (err: BusinessError, data: sms.ISendShortMessageCallback) => {
    console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
};
let deliveryCallback: AsyncCallback<sms.IDeliveryShortMessageCallback> = (err: BusinessError, data: sms.IDeliveryShortMessageCallback) => {
    console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`);
};
let options: sms.SendMessageOptions = {
    slotId: 0,
    content: '短信内容',
    destinationHost: '+861xxxxxxxxxx',
    serviceCenter: '+861xxxxxxxxxx',
    destinationPort: 1000,
    sendCallback: sendCallback,
    deliveryCallback: deliveryCallback
};
sms.sendShortMessage(options, (err: BusinessError) => {
    console.log(`callback: err->${JSON.stringify(err)}`);
});

参考地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-sms#smssendshortmessage10

更多关于HarmonyOS鸿蒙Next中通过已知手机号唤起系统短信发送功能需要调用哪个API?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


唤起系统短信界面:

通过 startAbility 指定系统短信应用的 bundleName 和 abilityName,并在 parameters 中传入手机号和短信内容:

let want = {
  bundleName: 'com.ohos.mms',
  abilityName: 'com.ohos.mms.MainAbility',
  parameters: {
    contactObjects: JSON.stringify([{ phone: '1234567890' }]), // 接收人手机号
    pageFlag: 'conversation',
    content: '这是预填的短信内容' // 可选
  }
};

context.startAbilityForResult(want)
  .then(() => {
    console.log('成功唤起短信界面');
  })
  .catch((err) => {
    console.error('唤起短信界面失败:', err);
  });

可以使用 sms: 唤起

// 示例代码
import { common, Want } from '@kit.AbilityKit';

@Entry
@Component
struct Index {

  build() {
    Column() {
      Button('发送短信')
        .onClick(() => {
          let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
          let exampleUrl = "sms:106XXXXXXXXXX?body=%E5%8F%91%E9%80%81%E7%9F%AD%E4%BF%A1%E5%86%85%E5%AE%B9";
        
          let want: Want = {
              bundleName: 'com.ohos.mms',
              action: 'ohos.want.action.viewData',
              uri:exampleUrl,
            }
        
          context.startAbility(want).then((data) => {
              console.info("Success" + JSON.stringify(data));
          }).catch(() => {
              console.error("error");
          });

        })
    }
  }
}

您好,您提到的功能@ohos.telephony.sms 模块(如 sendShortMessage)需要配置ohos.permission.SEND_MESSAGES权限,该权限仅系统应用可申请。第三方应用无法使用。不过第三方app您可以通过调用 @ohos.app.ability.UIAbility 中的 startAbility 方法实现该功能。

// 示例代码
import { common, Want } from '@kit.AbilityKit';

const MMS_BUNDLE_NAME = "com.ohos.mms";
const MMS_ABILITY_NAME = "com.ohos.mms.MainAbility";
const MMS_ENTITIES = "entity.system.home";

export class Contact {
    contactsName: string;
    telephone: number;

    constructor(contactsName: string, telephone: number) {
        this.contactsName = contactsName;
        this.telephone = telephone;
    }
}

@Entry
@Component
struct JumpMessage {
    private context = this.getUIContext().getHostContext() as common.UIAbilityContext;

    startMMSAbilityExplicit() {
        // 这里完善联系人和号码;姓名主要是通过手机号来查询实际联系人名称,因此这种方式还是以手机号码为主。
        let params: Array<Object> = [new Contact("张三", 133XXXXXXXX)];

        let want: Want = {
            bundleName: "com.ohos.mms",
            abilityName: "com.ohos.mms.MainAbility",
            parameters: {
                contactObjects: JSON.stringify(params),
                pageFlag: "conversation",
                // 这里填写短信内容。
                content: "我是短信具体内容"
            }
        };

        this.context.startAbilityForResult(want).then((data) => {
            console.info("Success" + JSON.stringify(data));
        }).catch(() => {
            console.error("error");
        });
    }

    build() {
        Row() {
            Column() {
                Button('发送短信')
                  .onClick(() => {
                      this.startMMSAbilityExplicit();
                  })
            }
            .width('100%')
        }
        .height('100%')
    }
}

发送短信的接口需要系统权限才可调用,三方应用如果有发送短信需求,需要在应用内实现跳转到短信编辑的功能,并且需要携带编辑内容和收件人号码,可以通过调用元能力startAbility接口指定号码并跳转到发送短信页面的方式实现。

官方示例:

import { common, Want } from '@kit.AbilityKit';

const MMS_BUNDLE_NAME = "com.ohos.mms";
const MMS_ABILITY_NAME = "com.ohos.mms.MainAbility";
const MMS_ENTITIES = "entity.system.home";

export class Contact {
  contactsName: string;
  telephone: number;
  constructor(contactsName: string, telephone: number) {
    this.contactsName = contactsName;
    this.telephone = telephone;
  }
}

@Entry
@Component
struct JumpMessage {
  private context = this.getUIContext().getHostContext() as common.UIAbilityContext;
  startMMSAbilityExplicit() {
    // 这里完善联系人和号码;姓名主要是通过手机号来查询实际联系人名称,因此这种方式还是以手机号码为主。
    let params: Array<Object> = [new Contact("张三", 133XXXXXXXX)];
    let want: Want = {
      bundleName: "com.ohos.mms",
      abilityName: "com.ohos.mms.MainAbility",
      parameters: {
        contactObjects: JSON.stringify(params),
        pageFlag: "conversation",
        // 这里填写短信内容。
        content: "我是短信具体内容"
      }
    };
    this.context.startAbilityForResult(want).then((data) => {
      console.info("Success" + JSON.stringify(data));
    }).catch(() => {
      console.error("error");
    });
  }
  build() {
    Row() {
      Column() {
        Button('发送短信')
          .onClick(() => {
            this.startMMSAbilityExplicit();
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

在HarmonyOS Next中,可通过wantConstant.Action.ACTION_SENDTO意图操作,并设置parameters参数中的urisms:前缀加上手机号码来唤起系统短信发送功能。示例代码片段如下:

import wantConstant from '@ohos.app.ability.wantConstant';

let phoneNumber = '13800138000';
let want = {
  action: wantConstant.Action.ACTION_SENDTO,
  parameters: {
    uri: `sms:${phoneNumber}`
  }
};
this.context.startAbility(want);

此方法直接调用系统短信应用并预填充收件人号码。

在HarmonyOS Next中,可以通过want机制调用系统短信发送功能。具体使用以下方式:

import wantConstant from '@ohos.app.ability.wantConstant';

let phoneNumber = '13800138000'; // 替换为目标手机号
let want = {
  action: 'ohos.want.action.sendMessage',
  entities: ['entity.system.sms'],
  uri: 'tel:' + phoneNumber
};

try {
  let context = getContext(this) as common.UIAbilityContext;
  await context.startAbility(want);
} catch (err) {
  console.error(`启动短信应用失败,错误码: ${err.code}`);
}

关键参数说明:

  • action: 使用'ohos.want.action.sendMessage'表示发送消息动作
  • entities: 指定短信实体类型
  • uri: 通过'tel:'前缀指定目标手机号码

此API会直接唤起系统短信应用并填充目标号码,用户确认后即可发送短信。

回到顶部