HarmonyOS鸿蒙Next中第三方应用跳转短信应用编辑页面后,如何监听短信发送结果(成功和失败)及取消发送返回第三方应用的结果

HarmonyOS鸿蒙Next中第三方应用跳转短信应用编辑页面后,如何监听短信发送结果(成功和失败)及取消发送返回第三方应用的结果 第三方应用跳转短信应用编辑页面后,如何监听短信发送结果(成功和失败)及取消发送返回第三方应用的结果

5 回复

使用startAbilityForResult回调 第三方应用通过startAbilityForResult跳转到短信编辑页面,并在短信应用关闭后通过onAbilityResult接收返回码,判断用户是否执行了发送操作:

发送成功/取消发送:返回RESULT_OK(用户点击发送)或RESULT_CANCELED(用户取消发送)38。

发送失败:鸿蒙系统未提供原生错误码,需依赖短信应用的回传(非标准实现,多数短信应用不支持)。

try {
  this.context.startAbilityForResult(want, (err: BusinessError, result: common.AbilityResult) => {
    if (err.code) {
      // 处理业务逻辑错误
      console.error(`startAbilityForResult failed, code is ${err.code}, message is ${err.message}`);
      return;
    }
    // 执行正常业务
    console.info('startAbilityForResult succeed');
  });
} catch (err) {
  // 处理入参错误异常
  let code = (err as BusinessError).code;
  let message = (err as BusinessError).message;
  console.error(`startAbilityForResult failed, code is ${code}, message is ${message}`);
}

更多关于HarmonyOS鸿蒙Next中第三方应用跳转短信应用编辑页面后,如何监听短信发送结果(成功和失败)及取消发送返回第三方应用的结果的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


通过startAbilityForResult方法显式拉起短信应用,并在回调中通过resultCode判断操作状态:

  • 发送成功:resultCode为0(RESULT_OK)
  • 取消发送:resultCode为-1(RESULT_CANCELED)
  • 发送失败:通过错误回调捕获

module.json5中添加权限声明:

{
  "requestPermissions": [
    {
      "name": "ohos.permission.SEND_MESSAGES",
      "reason": "发送短信需求"
    }
  ]
}

核心代码

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

// 显式拉起短信编辑界面
private startMMSAbilityExplicit() {
  const want: Want = {
    bundleName: "com.ohos.mms",
    abilityName: "com.ohos.mms.MainAbility",
    parameters: {
      contactObjects: JSON.stringify({ phone: "138XXXX1234" }),
      content: "测试短信内容",
      pageFlag: "compose" // 标识进入编辑界面
    }
  };

  try {
    this.context.startAbilityForResult(want).then((data) => {
      // 根据resultCode判断结果
      if (data.resultCode === common.AbilityResult.RESULT_OK) {
        console.log("短信发送成功");
        // 可解析data.parameters获取额外参数
      } else if (data.resultCode === common.AbilityResult.RESULT_CANCELED) {
        console.log("用户取消发送");
      }
    }).catch((err) => {
      console.error("操作失败:", JSON.stringify(err));
    });
  } catch (error) {
    console.error("拉起短信应用失败:", JSON.stringify(error));
  }
}

注意事项

  • pageFlag必须设置为"compose"才能进入编辑界面
  • 收件人号码字段推荐使用contactObjects传递JSON字符串
  • 先检查resultCode判断基础操作类型
  • 再通过catch捕获网络异常等系统级错误

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

发送短信后,有一个回调:

sms.sendShortMessage(options, (err: BusinessError) => {
    console.log(`callback: err->${JSON.stringify(err)}`);
})

如果回调中:

if (err) {
    // 发送报错了,发送失败
} else {
    // 发送成功
}

在HarmonyOS Next中,监听短信发送结果需使用wantAgent和commonEvent机制。发送短信时通过wantAgent启动短信应用,并订阅usual.event.SMS_SEND_RESULT公共事件。该事件会返回发送状态(成功/失败)和取消发送的信息。返回第三方应用使用wantAgent的回调功能处理。具体实现涉及wantAgent的operationType设置为OperationType.SEND和commonEvent的订阅/发布机制。

在HarmonyOS Next中,可以通过以下方式监听短信发送结果:

  1. 使用startAbilityForResult启动短信应用:
let want = {
    bundleName: 'com.huawei.mms',
    abilityName: 'com.huawei.mms.ui.ComposeMessageActivity',
    parameters: {
        address: '10086',
        body: '测试内容'
    }
};
let requestCode = 1001;
this.context.startAbilityForResult(want, requestCode)
.then(data => {
    // 处理返回结果
})
.catch(error => {
    // 处理错误
});
  1. onAbilityResult中接收返回结果:
onAbilityResult(requestCode, resultCode, data) {
    if (requestCode === 1001) {
        if (resultCode === 0) {
            // 短信发送成功
        } else if (resultCode === -1) {
            // 用户取消发送
        } else {
            // 发送失败
        }
    }
}
  1. 需要注意的几点:
  • 需要声明ohos.permission.SEND_MESSAGES权限
  • 不同短信应用可能返回的resultCode值不同,建议做好兼容处理
  • 部分定制ROM可能修改了短信应用的行为,需进行充分测试

这种方式可以覆盖用户主动取消和发送成功/失败的主要场景。

回到顶部