为了更好的解析,我切换到从modem获取pdu,用regex检查pdu,然后将pdu解析成部分。
将cmgf更改为0
AT+CMGF=0
OK
AT+CNMI=1,2,0,0,0
OK
检查PDU的串行端口响应
public void GetPdu()
{
Console.WriteLine(_messageString);
Regex regex = new Regex("^([0-9A-F]+\r)$");
Match match = regex.Match(_messageString);
if (match.Success)
{
Console.WriteLine("Match: " + match.Value);
string messagePdu = match.Value;
ParseMessage(messagePdu);
}
}
解码方法
我用这个方法
Source
ublic void ParseMessage(string messagePdu)
{
SMSType smsType = SmsBase.GetSMSType(messagePdu);
switch (smsType)
{
case SMSType.SMS:
Sms sms = new Sms();
Sms.Fetch(sms, ref messagePdu);
string messageBody = sms.Message;
string phoneNumber = sms.PhoneNumber;
DateTime messageDateTime = DateTime.Parse(sms.ServiceCenterTimeStamp.ToString());
string state = "Received";
SaveMessage(messageBody, phoneNumber, messageDateTime, state);
break;
case SMSType.StatusReport:
SmsStatusReport statusReport = new SmsStatusReport();
SmsStatusReport.Fetch(statusReport, ref messagePdu);
break;
}
}