-

场景介绍

应用需要发送一条短信给一个指定的号码时,使用本业务。发送信息需要经过短信中心,短信中心号码可以是运营商默认的,也可以由应用自己指定。

如果设备支持同时插入 2 张 SIM 卡,且 2 张 SIM 卡均在位时,短信会从默认 SIM 卡发出。应用可通过调用 getDefaultSmsSlotId 来获取当前发短信的默认 SIM 卡位置。目前 API 暂不支持短信发送结果通知和送达报告。

接口说明

ShortMessageManager 为开发者提供短信管理功能,具体功能分类如下表。

功能分类 接口名 描述 所需权限
能力获取 hasSmsCapability() 检查当前设备是否支持短信收发。
获取管理对象 getInstance(Context context) 获取短信管理对象。
获取默认短信卡 getDefaultSmsSlotId() 获取默认短信卡对应卡槽ID。
长短信转化 splitMessage(String content) 将超过140个字节的长短信(如中文70个字符,英文160个字符)拆分成多条短信。 ohos.permission.SEND_MESSAGES
发送短信 sendMessage(String destinationHost, String serviceCenter, String content) 发送单条短信。 ohos.permission.SEND_MESSAGES
sendMultipartMessage(String destinationHost, String serviceCenter, ArrayList<String> parts) 发送拆分后的多条短信。 ohos.permission.SEND_MESSAGES

开发步骤

  1. 调用 ShortMessageManager 的 getInstance 接口,创建/获取短信收发管理对象。

  1. 调用 hasSmsCapability() 接口获取当前设备短信收发能力,如果支持继续下一步;如果不支持则无法收发短信。

  1. 发送短信。

   // 创建短信收发管理对象
   ShortMessageManager smManager = ShortMessageManager.getInstance(context);

    
   // 检查短信能力
   if (!smManager.hasSmsCapability()) {
       return;
   }

    
   // 如果设备支持收发短信,则继续发送短信
   // 发送短信前可先调用splitMessage()接口判断拆分后的短信条数,然后决定调用长短信或普通短信发送接口
   ArrayList<String> msgs = smManager.splitMessage(messageContent);
   if (msgs.size() > 1) { // 长短信拆分发送
       smManager.sendMultipartMessage(destinationNumber, serviceCenter, msgs);
   } else { // 一般文本短信发送
       smManager.sendMessage(destinationNumber, serviceCenter, messageContent);
   }