當前位置:名人名言大全網 - 短信平臺 - android直接發送pdu編碼後的短信

android直接發送pdu編碼後的短信

實現過程:

1>初始化:ATZ\r

2>設置文本模式:AT+CMGF=0\r(0:pdu模式,1:text模式)

3>設置PDU頭:

typedef struct {

char SCA[16]; // 短消息服務中心號碼(SMSC地址)

char TPA[16]; // 目標號碼或回復號碼(TP-DA或TP-RA)

char TP_PID; // 用戶信息協議標識(TP-PID)

char TP_DCS; // 用戶信息編碼方式(TP-DCS)

char TP_SCTS[16]; // 服務時間戳字符串(TP_SCTS), 接收時用到

char TP_UD[16]; // 原始用戶信息

char index; //短消息序號,在讀取時用到

}SM_PARAM;

// SMSC地址信息段

memset(buf, 0, sizeof(buf));

nLength = strlen(pSrc->SCA); // SMSC地址字符串的長度

buf[0] = (char)((nLength & 1) == 0 ? nLength : nLength + 1) / 2 + 1; // SMSC地址信息長度

buf[1] = 0x91; // 固定: 用國際格式號碼

nDstLength = gsmBytes2String(buf, pDst, 2); // 轉換2個字節到目標PDU串

nDstLength += gsmInvertNumbers(pSrc->SCA, &pDst[nDstLength], nLength); // 轉換SMSC到目標PDU串

// TPDU段基本參數、目標地址等

memset(buf, 0, sizeof(buf));

nLength = strlen(pSrc->TPA); // TP-DA地址字符串的長度

buf[0] = 0x11; // 是發送短信(TP-MTI=01),TP-VP用相對格式(TP-VPF=10)

buf[1] = 0; // TP-MR=0

buf[2] = (char)nLength; // 目標地址數字個數(TP-DA地址字符串真實長度)

buf[3] = 0x91; // 固定: 用國際格式號碼

nDstLength += gsmBytes2String(buf, &pDst[nDstLength], 4); // 轉換4個字節到目標PDU串

nDstLength += gsmInvertNumbers(pSrc->TPA, &pDst[nDstLength], nLength); // 轉換TP-DA到目標PDU串

// TPDU段協議標識、編碼方式、用戶信息等

//nLength = strlen(pSrc->TP_UD); // 用戶信息字符串的長度

memset(buf, 0, sizeof(buf));

buf[0] = pSrc->TP_PID; // 協議標識(TP-PID)

buf[1] = pSrc->TP_DCS; // 用戶信息編碼方式(TP-DCS)

buf[2] = 1; // 有效期(TP-VP)為5分鐘

buf[3] = str2hex(user_pdu, pSrc->TP_UD); //用戶信息的長度

nDstLength += gsmBytes2String(buf, &pDst[nDstLength], 4); // 轉換該段數據到目標PDU串

strcat(pdu, "\x01a"); //以CTRL-A結束

gsmString2Bytes(pdu, &nSmscLength, 2); // 取PDU串中的SMSC信息長度

4>發送信息長度:AT+CMGS=長度,這步重要長度不對是發不出去的。

5>發送用戶信息

1、目前,發送短消息常用Text和PDU(Protocol Data Unit,協議數據單元)模式。

1>使用Text模式收發短信代碼簡單,實現起來十分容易,但最大的缺點是不能收發中文短信;

2>使用PDU模式不僅支持中文短信,也能發送英文短信。

2、PDU模式收發短信可以使用3種編碼:

1>7-bit(用於發送普通的ASCII字符,它將壹串7-bit的字符(最高位為0)編碼成8-bit的數據,每8個字符可 “壓縮”成7個)

2>8-bit(通常用於發送數據消息,如:圖片了,鈴聲等等)

3>UCS2編碼(用於發送Unicode字符)