以NOKIA8250為例。通過(guò)8250的紅外與PC連接之后,會(huì)產(chǎn)生一個(gè)虛擬串口,這個(gè)串口的序號(hào)可能在每臺(tái)電腦上都不一樣。利用這個(gè)串口,就可以對(duì)手機(jī)進(jìn)行一系列操作,包括發(fā)送、接收短信。通過(guò)程序操作串口,就可以把這部手機(jī)做成短信平臺(tái)。
在Windows中,打開超級(jí)終端,在手機(jī)未連接之前,查看連接可使用的串口列表,然后連接手機(jī),再查看列表,多出來(lái)的那個(gè)串口就是與手機(jī)通信的串口。通過(guò)該串口連接手機(jī),就可以用AT指令來(lái)操作它。
輸入AT回車,出現(xiàn)OK,就說(shuō)明這個(gè)串口是支持AT指令的,有可能是手機(jī),也有可能是普通的MODEM。
輸入AT+CGMI回車,出現(xiàn)手機(jī)廠商信息,例如NOKIA,就說(shuō)明這是手機(jī),下面就可以進(jìn)行一系列的操作了。
AT指令有幾個(gè)實(shí)用的規(guī)則:
1.輸入AT指令然后加“?”,就能列出該指令的當(dāng)前狀態(tài),例如輸入AT+CSCS?,就能列出當(dāng)前手機(jī)使用的字符集,例如:+CSCS: "PCCP437"。
2.輸入AT指令然后加“=?”,就能列出該指令的可選值,也就是手機(jī)所能支持的所有值,例如輸入AT+CSCS=?,就能列出手機(jī)能支持的所有字符集,例如:+CSCS: ("GSM","HEX","IRA","PCCP437","PCDN","8859-1"),可以通過(guò)AT+CSCS="HEX"來(lái)設(shè)置手機(jī)的字符集為HEX。
短信內(nèi)容的格式有兩種,一種是text,一種是PDU,text格式比較簡(jiǎn)單,但不能發(fā)送特殊的短信,例如免提短信,發(fā)送中文短信也會(huì)亂碼。PDU格式則可以發(fā)送各種形式(免提,閃爍)和字符集的短信,不過(guò)PDU不夠直觀,需要通過(guò)程序來(lái)編碼解碼,例如發(fā)送到8613000000000的短信“中文信息”的PDU編碼為:0011000D91683100000000F00008A70C4E2D65874FE1606F000D000A,其長(zhǎng)度為27。在PDU格式下,短信內(nèi)容還包含了目標(biāo)號(hào)碼,而在text格式下,目標(biāo)號(hào)碼和短信內(nèi)容是分開的。銳方超級(jí)SMS控件是一個(gè)很好的PDU編解碼控件。
與短信相關(guān)的AT指令:
AT 指令 |
功 能 |
AT+CMGC |
Send an SMS command(發(fā)出一條短消息命令) |
AT+CMGD |
Delete SMS message(刪除SIM卡內(nèi)存的短消息) |
AT+CMGF |
Select SMS message formate(選擇短消息信息格式:0-PDU;1-文本) |
AT+CMGL |
List SMS message from preferred store(列出SIM卡中的短消息,在PDU模式下,該值為數(shù)字,在text模式下,該值為字符串。PDU/text:0/"REC UNREAD"-未讀,1/"REC READ"-已讀,2/"STO UNSENT"-待發(fā),3/"STO SENT"-已發(fā),4/"ALL"-全部的) |
AT+CMGR |
Read SMS message(讀短消息) |
AT+CMGS |
Send SMS message(發(fā)送短消息。在PDU格式下,該值設(shè)置為PDU長(zhǎng)度,例如30;在Text格式下,該值設(shè)置為目標(biāo)手機(jī)號(hào)碼字符串,例如"8613888888888"。注意,在PDU模式下,手機(jī)號(hào)碼需要加上86開頭,否則不能發(fā)送。) |
AT+CMGW |
Write SMS message to memory(向SIM內(nèi)存中寫入待發(fā)的短消息) |
AT+CMSS |
Send SMS message from storage(從SIN|M內(nèi)存中發(fā)送短消息) |
AT+CNMI |
New SMS message indications(設(shè)置是否顯示新收到的短信,一般設(shè)成2,1,0,0,0,手機(jī)收到新的短信后會(huì)給PC發(fā)一條消息,包含了該短信在內(nèi)存中的索引號(hào),通過(guò)該索引號(hào)就可以讀出該短信) |
AT+CPMS |
Preferred SMS message storage(選擇短消息內(nèi)存) |
AT+CSCA |
SMS service center address(短消息中心地址) |
AT+CSCB |
Select cell broadcast messages(選擇蜂窩廣播消息) |
AT+CSMP |
Set SMS text mode parameters(設(shè)置短消息文本模式參數(shù)) |
AT+CSMS |
Select Message Service(選擇短消息服務(wù)) |
知道這些之后,就可以通過(guò)編程來(lái)操作手機(jī)。在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就支持Linux和Solaris平臺(tái)了,Windows平臺(tái)的只支持到2.0,98年出的,不過(guò)在XP下還能使用,google一下就可以下載到,例如:
http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip。也可以用開源的
Rxtx實(shí)現(xiàn)串口通信。
如果不想直接操作AT指令,還可以使用開源的
SMSLib包,該包封裝了與短信相關(guān)的所有AT指令,也實(shí)現(xiàn)了PDU編解碼功能,使用起來(lái)十分方便。