我正在开发一个接收来自GSM Modem(中兴公司)的短信(SMS)的应用程序,接收通知为+CMTI。我的程序已经完成,但当有多部分的短信时,我无法将它们连接起来,所有的信息都分别以单独的信息出现。(例如一条3部分的短信会分成3条不同的信息)。如何将它们连接起来,并理解哪个信息在哪个信息之后?(考虑到有人会连续发送两条3部分的信息,我该怎么区分这两条信息?)。
编程语言:C#
短信是以文本模式发送(AT+CMGF=1)。
编程语言:C#
短信是以文本模式发送(AT+CMGF=1)。
// 适用于gsmcomm用户
List<string> messagesList = new List<messageList>();
List<SmsPdu> multiPartMsg = new List<SmsPdu>();
foreach (var i in modem.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Phone))
{
string msg;
if (SmartMessageDecoder.IsPartOfConcatMessage(((SmsDeliverPdu)i.Data)))
{
multiPartMsg.Add(i.Data);
try
{
if (SmartMessageDecoder.AreAllConcatPartsPresent(multiPartMsg))
{
msg= SmartMessageDecoder.CombineConcatMessageText(multiPartMsg);
messagesList.Add(msg);
multiPartMsg.Clear();
}
}
catch (Exception ex) {}
}
else
{
msg = ((SmsDeliverPdu)i.Data).UserDataText;
messagesList.Add(msg);
}
}
是的,我尝试过诺基亚的智能短信概念来连接多部分消息,但似乎存在许多问题。最终,我发现了PDU头部中一些重要的内容,例如...
如果您的消息是多部分的,可以通过以下方式进行检查
bool Is_Multi_PART = SmartMessageDecoder.IsPartOfConcatMessage(SMSPDU);
请看这里...
DecodedShortMessage[] messages = comm.ReadMessages(PhoneMessageStatus.All, storage);
foreach (DecodedShortMessage message in messages)
{
GsmComm.PduConverter.SmsDeliverPdu SMSPDU;
SMSPDU = (GsmComm.PduConverter.SmsDeliverPdu)message.Data;
bool Is_Multi_PART = SmartMessageDecoder.IsPartOfConcatMessage(SMSPDU);
byte[] element1 = message.Data.UserData;
if (element1[0] == 5)
{
byte[] numArray = new byte[2];
numArray[0] = element1[3];
numArray[1] = element1[2];
int referenceNumber = BitConverter.ToUInt16(numArray, 0);
int totalMessages = element1[4];
int currentNumber = element1[5];
}
}
如果您的消息是多部分消息,则应始终包含PDU标头,其中包括...