適用于:
Pocket PC 2002 Phone Edition
微軟® eMbedded Visual Tools
下載本文代碼Introapp.exe
SMS和Pocket PC Phone Edition
短消息服務(SMS)是在全球移動通信網絡(GSM)的移動電話之間發送簡短的字母和數字消息(最大160個字符)的標準。它和傳呼機的工作方式很相象,但是它帶有文本,而且當今大多數的移動電話都支持SMS。
SMS的一個關鍵方面是,信息通過移動網絡運營商的網絡即時發送,而不要手動連接到Internet服務提供商(Internet Service PRovider)——SMS信息是即時發送的,而電子郵件需要接收者在郵件服務器上接收。而且,如果接收者不在線的話——例如電話關機——SMS信息會被保存在運營商(的服務器上),并在電話再次開機的時候轉發出去。
在裝有Pocket PC 2002 Phone Edition的設備上,你可以像管理電子郵件信息一樣管理SMS消息。SMS消息組件同標準的收件箱(Inbox)應用程序集成在一起,這就讓你能夠像發送和接收電子郵件一樣發送和接收短消息。你甚至能夠將電子郵件作為SMS消息轉發和回復,反過來也可以。
支持SMS的應用程序
很多商業情景都需要某種形式的通知,而SMS是實現用于各種商業事件的通知的極好方法。它可以是銷售人員告知服務工程師某個客戶需要服務,也可以是服務工程師將客戶的一個重要商業事件告知執行人員,或者是執行人員將新的客戶處理規程通知所有同該客戶相關的職員。
SMS另一個有意思的用途是能夠使移動商務(mobile commerce,m-commerce)成為可能,因為SMS常常被用來處理支付交易。為了讓你有個初步的了解,我們會在下面的例子里向你演示如何利用你的Pocket PC 2002 Phone Edition設備發送SMS信息。
SMS發送示例
一個使用微軟® eMbedded Visual Basic®的簡單窗體:
圖1:SMS應用程序示例
在這個窗體里,你可以輸入一個國際移動電話的號碼以及一條文本信息。當你點擊“發送(Send)”按鈕的時候,信息就被發送出去了——就這么簡單!
示例代碼
現在讓我們來看看用于發送SMS信息的核心代碼。首先,你需要聲明多個微軟Windows®的API:
一個用于打開SMS信息組件
一個用于發送SMS信息
一個用于關閉SMS信息組件:
Public Declare Function SmsOpen Lib "SMS" (ByValptsMessageProtocol As String, ByValdwMessageModes As Long, ByRefpsmshHandle As Long, ByRefphMessageAvailableEvent As Long) As Long
Public Declare Function SmsSendMessage Lib "SMS" (ByValsmshHandle As Long, ByValpsmsaSMSCAddress As Long, ByVal psmsaDestinationAddress As String, ByValpstValidityPeriod As Long, ByValpbData As String, ByValdwDataSize As Long, ByVal pbProviderSpecificData As String, ByValdwProviderSpecificDataSize As Long, ByValsmsdeDataEncoding As Long, ByValdwOptions As Long,ByRefpsmsmidMessageID As Long) As Long
Public Declare Function SmsClose Lib "SMS" (ByValsmshHandle As Long) As Long
你還需要聲明一些用于不同API的API常量:
Public Const SMS_MSGTYPE_TEXT = "Microsoft Text SMS Protocol"
Public Const SMS_MODE_SEND = 2 ' Open in send mode
Public Const SMSDE_GSM = 1 ' Use standard GSM encoding
Public Const SMSAT_INTERNATIONAL = 1 ' International number format
Public Const PS_MESSAGE_OPTION_NONE = 0 ' No message options
Public Const PS_MESSAGE_CLASS0 = 0 ' Send immediately
Public Const PSRO_NONE = 0 ' No replacements
Public Const SMS_OPTION_DELIVERY_NONE = 0 ' No delivery options
下面是發送一條SMS信息的完整代碼:
Public Sub SendSMS(ByVal Number As String, ByVal Message As String)
Dim SMSHandleAs Long
Dim SMSEventAs Long
Dim SMSAddressAs String
Dim SMSProviderAs String
' Open SMS Messaging Component
Call SmsOpen(SMS_MSGTYPE_TEXT, SMS_MODE_SEND, SMSHandle, SMSEvent)
' Set Address structure (UDT as string)
SMSAddress = LongToBytes(SMSAT_INTERNATIONAL) & Number
' Set Provider structure (UDT as string)
SMSProvider = LongToBytes(PS_MESSAGE_OPTION_NONE) & _
LongToBytes(PS_MESSAGE_CLASS0) & _
LongToBytes(PSRO_NONE)
' Send message
If 0 = SmsSendMessage(SMSHandle, 0, SMSAddress, 0, Message, _
LenB(Message), SMSProvider, 12, SMSDE_GSM, _
SMS_OPTION_DELIVERY_NONE, 0) Then
MsgBox "Message sent!",vbInformation, App.Title
Else
MsgBox "Could not send message!",vbCritical, App.Title
End If
' Close SMS Messaging Component
Call SmsClose(SMSHandle)
End Sub
首先,SMS信息組件被打開(SmsOpen),其句柄被保存(SMSHandle)。調用其它SMS API的時候需要這個句柄。
準備調用SmsSendMessage的時候需要多個結構或者UDT(用戶定義的類型)。由于eMbedded Visual Basic缺乏對UDT的支持,所以會有一個簡單的字符串用來仿真一個結構。
第一個是一個包含有SMS信息地址的結構。這個地址結構包含有一個指示器,用來表示提供的是什么類型的號碼(在這個是一個國際號碼)以及這個號碼自身。
下一個結構包含有同服務提供商相關的各種選項。這個結構的第一部分表示沒有特別的選項被選中,第二部分表示這條信息應該被立即發送。
最后一部分聲明:不應該做出替換。
在對發送該信息(SmsSendMessage)的調用中,會提供已經準備好的結構,以及信息文本和多個選項。最后,這個句柄被關閉(SmsClose)。
要獲得完整的例子,請參見本文的示例代碼。此外,在Antonio Paneiro的文章《VBCE里的UDT(用戶定義的類型)》里,你可以讀到更多關于這個技術的內容。
結束語
SMS是發送短小和即時文本通知的好方法。隨著Pocket PC 2002 Phone Edition對它的支持,你將能夠讓你的程序“識別SMS”。有了本例里的示例代碼,你就了解了你該做什么。如果接受這樣一種觀點,即移動世界,用移動通信機制和協議的話來說,是“和(both/and)”而不是“或(or/else)”的,那么你就能夠真正地用好每個選項。
新聞熱點
疑難解答