HarmonyOS鸿蒙Next中通过已知手机号唤起系统短信发送功能需要调用哪个API?
HarmonyOS鸿蒙Next中通过已知手机号唤起系统短信发送功能需要调用哪个API? 通过已知手机号 唤起系统短信发送功能 这个需要调用哪个api?
通过短信服务实现相关功能。发送短信时,请求服务端,服务端调用短信接口,使用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);
});
您好,您提到的功能@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参数中的uri为sms:前缀加上手机号码来唤起系统短信发送功能。示例代码片段如下:
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会直接唤起系统短信应用并填充目标号码,用户确认后即可发送短信。


