You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AT+CMGL命令检索同一条长短信的所有分片

解决GSM Modem短信分片合并问题

关于AT+CMGL的分片标识参数

文本模式下的AT+CMGL="ALL"默认不会返回短信分片的关联标识,这也是你看到分片被当作独立短信的原因。要获取分片关联信息,有两种可行方案:


方案1:切换到PDU模式解析分片信息

PDU模式是GSM短信的原生格式,会包含分片所需的用户数据头(UDH),其中包含同一条长短信的唯一参考号、总片数、当前片数。步骤如下:

  1. 发送命令切换到PDU模式:AT+CMGF=0
  2. 发送AT+CMGL=4(参数4对应"ALL",不同modem可能参数值有差异,以手册为准)获取所有短信的PDU数据
  3. 解析PDU中的UDH部分:
    • UDH里的0003或0800是分片标识的类型字段
    • 后续的字节包含:唯一参考号(1或2字节)、总片数、当前片数
    • 相同参考号的短信属于同一条长短信的不同分片

方案2:文本模式下启用扩展支持(部分Modem可用)

部分厂商的Modem支持在文本模式下返回分片信息,你可以尝试以下操作:

  1. 发送AT+CSMS=1启用增强型短信服务
  2. 发送AT+CMGL="ALL",1(部分Modem的扩展参数,需参考手册)
  3. 如果支持,短信内容开头会带有UDH前缀(比如050003XX0201),其中:
    • XX是唯一参考号,02是总片数,01是当前片数
    • 相同参考号的短信即为同一条长短信的分片

短信分片合并与UI展示步骤

  1. 收集分片标识:从PDU解析或文本模式的UDH前缀中,提取每条短信的参考号、总片数、当前片数
  2. 分组排序:按参考号将短信分组,同一组内按当前片数从小到大排序
  3. 内容拼接:去掉UDH前缀(如果是文本模式),将同组的短信内容按顺序拼接
  4. UI展示:在界面中显示合并后的完整短信,替代原来的多条分片短信

示例(文本模式带UDH前缀)

收到的分片短信:

AT+CMGL="ALL",1

+CMGL: 0,"REC UNREAD","+111111","","23/01/03,18:16:20+04"
050003A10201This is message 1 : message 1 message 1...
+CMGL: 1,"REC UNREAD","+111111","","23/01/03,18:16:21+04"
050003A10202This is second part of message 1
+CMGL: 2,"REC UNREAD","+111111","","23/01/03,18:19:04+04"
This is message 2

OK

合并后:

  • 参考号A1的两条分片拼接为:This is message 1 : message 1 message 1...This is second part of message 1
  • 独立短信保持原样:This is message 2

内容的提问来源于stack exchange,提问作者LK Capi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:35:11