鸿蒙Next系统如何接收短信回调

在鸿蒙Next系统开发中,如何实现接收短信的状态回调?具体需要监听哪些广播或接口?官方文档提到的SmsManager相关回调方法在实际测试中不触发,是否缺少权限配置或系统限制?求示例代码及常见问题排查思路。

2 回复

鸿蒙Next系统接收短信回调?简单!用SmsMessageObserver监听就行。注册回调后,短信一来系统就自动通知你的App,像收快递一样方便。记得加权限,不然短信会“迷路”哦~

更多关于鸿蒙Next系统如何接收短信回调的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next系统(HarmonyOS NEXT)中,接收短信回调主要通过**SmsManagerCommonEvent**机制实现。由于系统安全限制,应用无法直接监听短信接收,但可以通过订阅系统广播事件(如短信到达)来获取回调。以下是实现步骤和示例代码:


步骤说明

  1. 权限申请:在module.json5配置文件中声明短信权限。
  2. 订阅系统事件:通过CommonEvent订阅短信到达事件(usual.event.SMS_RECEIVED_COMPLETED)。
  3. 处理回调:在事件回调中解析短信内容。

代码示例

1. 配置权限(module.json5)

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.RECEIVE_SMS" // 接收短信权限
      }
    ]
  }
}

2. 订阅短信事件

import commonEvent from '@ohos.commonEventManager';
import sms from '@ohos.telephony.sms';

// 订阅短信接收事件
commonEvent.createSubscriber({
  events: ['usual.event.SMS_RECEIVED_COMPLETED'] // 短信接收完成事件
}, (err, subscriber) => {
  if (err) {
    console.error('订阅失败: ', err.code);
    return;
  }
  console.info('订阅成功');

  // 注册事件回调
  commonEvent.subscribe(subscriber, (err, data) => {
    if (err) {
      console.error('接收事件失败: ', err.code);
      return;
    }
    // 解析短信内容
    const slotId = data.parameters?.slotId; // 卡槽ID
    const pdu = data.parameters?.pdu; // 短信PDU数据
    if (pdu) {
      sms.decodeMessage(pdu, (err, message) => {
        if (err || !message) {
          console.error('短信解析失败');
          return;
        }
        console.info(`收到短信: 发件人=${message.visibleMessageAddress}, 内容=${message.visibleMessageBody}`);
        // 处理短信内容(例如提取验证码)
      });
    }
  });
});

注意事项

  1. 权限审核RECEIVE_SMS为敏感权限,需在应用商店审核时说明用途。
  2. 事件类型:鸿蒙Next中短信事件可能因版本调整,建议查阅最新文档确认事件名。
  3. 后台限制:长时间后台监听可能受系统资源管理限制,建议仅在必要场景使用。

替代方案

若需主动读取短信(如验证码自动填充),可使用SmsManager的**getAllSimMessages()**方法(需用户授权):

import sms from '@ohos.telephony.sms';

sms.getAllSimMessages((err, data) => {
  if (!err && data) {
    data.forEach(message => {
      console.info(`短信: ${message.visibleMessageBody}`);
    });
  }
});

通过以上方式,即可在鸿蒙Next系统中实现短信回调功能。

回到顶部