Click here to Skip to main content
15,867,568 members
Articles / Programming Languages / Visual Basic
Article

.NET Phone Communication Library Part IV - Receive SMS

Rate me:
Please Sign up or sign in to vote.
4.68/5 (18 votes)
10 Dec 20061 min read 340K   8.6K   98   86
Receive SMS using the atSMS library.

Sample Image - phonesmsrecv.jpg

Introduction

In part II of the article, I showed you how to send SMS using a GSM modem which is built into your mobile phone. However, I did not show you how to detect incoming SMS. To detect new SMS received, it is a bit tricky as different mobile phones from different manufacturers may need different configurations. In this article, I am going to show you how to detect new SMS using the open source atSMS library.

How It Works

In order to detect incoming SMS, you must use the "AT+CNMI" command to set the new message indication to the terminal equipment (TE).

Image 2

For the "+CNMI" command, the values are in the format of mode,mt,bm,ds,bfr. In order to receive SMS, mt must be 1. For other values, different handsets may require different values to be set. By default, the atSMS library sets mode and mt to 1 which should be sufficient for most handsets. However, you can always use the CheckATCommands function to check your phone supported values.

Take note also that during my testing, it was noticed that for certain Nokia phones only, Class 2 SMS can be detected. For newer models of Nokia phones, e.g., N70, N80, the "+CNMI" is not supported, and you have no way of detecting incoming SMS.

The Code

By setting NewMessageIndication to True, and if your phone supports "+CNMI", the NewMessageReceived event should be raised.

VB
Imports ATSMS

Public Class MainForm

    Private WithEvents oGsmModem As New GSMModem

    Private Sub MainForm_Load(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles MyBase.Load
        CheckForIllegalCrossThreadCalls = False
    End Sub

    
    Private Sub btnPhone_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnConnect.Click

        If cboComPort.Text = String.Empty Then
            MsgBox("COM Port must be selected", MsgBoxStyle.Information)
            Return
        End If

        oGsmModem.Port = cboComPort.Text

        If cboBaudRate.Text <> String.Empty Then
            oGsmModem.BaudRate = Convert.ToInt32(cboBaudRate.Text)
        End If

        If cboDataBit.Text <> String.Empty Then
            oGsmModem.DataBits = Convert.ToInt32(cboDataBit.Text)
        End If

        If cboStopBit.Text <> String.Empty Then
            Select Case cboStopBit.Text
                Case "1"
                    oGsmModem.StopBits = Common.EnumStopBits.One
                Case "1.5"
                    oGsmModem.StopBits = Common.EnumStopBits.OnePointFive
                Case "2"
                    oGsmModem.StopBits = Common.EnumStopBits.Two
            End Select
        End If

        If cboFlowControl.Text <> String.Empty Then
            Select Case cboFlowControl.Text
                Case "None"
                    oGsmModem.FlowControl = Common.EnumFlowControl.None
                Case "Hardware"
                    oGsmModem.FlowControl = Common.EnumFlowControl.RTS_CTS
                Case "Xon/Xoff"
                    oGsmModem.FlowControl = Common.EnumFlowControl.Xon_Xoff
            End Select
        End If

        Try
            oGsmModem.Connect()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
            Return
        End Try

        Try
            oGsmModem.NewMessageIndication = True
        Catch ex As Exception

        End Try

        btnSendMsg.Enabled = True
        btnSendClass2Msg.Enabled = True
        btnCheckPhone.Enabled = True
        btnDisconnect.Enabled = True

        MsgBox("Connected to phone successfully !", MsgBoxStyle.Information)

    End Sub


    Private Sub btnDisconnect_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnDisconnect.Click
        Try
            oGsmModem.Disconnect()
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical)
        End Try

        btnSendMsg.Enabled = False
        btnSendClass2Msg.Enabled = False
        btnCheckPhone.Enabled = False
        btnDisconnect.Enabled = False
        btnConnect.Enabled = True

    End Sub

   
    Private Sub btnSendMsg_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnSendMsg.Click
        If txtPhoneNumber.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        If txtMsg.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        Try
            Dim msg As String = txtMsg.Text.Trim
            Dim msgNo As String
            If StringUtils.IsUnicode(msg) Then
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.Unicode_16Bit)
            Else
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.GSM_Default_7Bit)
            End If
            MsgBox("Message is sent. Reference no is " & msgNo, _
                    MsgBoxStyle.Information)
        Catch ex As Exception
            MsgBox(ex.Message & ". Make sure your SIM memory" & _ 
                   " is not full.", MsgBoxStyle.Critical)
        End Try

        'Try
        '    Dim storages() As Storage = oGsmModem.GetStorageSetting
        '    Dim i As Integer
        '    txtStorage.Text = String.Empty
        '    For i = 0 To storages.Length - 1
        '        Dim storage As Storage = storages(i)
        '        txtStorage.Text += storage.Name & "(" & _
        '          storage.Used & "/" & storage.Total & "), "
        '    Next
        'Catch ex As Exception
        '    txtStorage.Text = "Not supported"
        'End Try
    End Sub

    Private Sub btnSendClass2Msg_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnSendClass2Msg.Click
        If txtPhoneNumber.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        If txtMsg.Text.Trim = String.Empty Then
            MsgBox("Phone number must not be empty", MsgBoxStyle.Critical)
            Return
        End If

        Try
            Dim msg As String = txtMsg.Text.Trim
            Dim msgNo As String
            If StringUtils.IsUnicode(msg) Then
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.Unicode_16Bit)
            Else
                msgNo = oGsmModem.SendSMS(txtPhoneNumber.Text, msg, _
                        Common.EnumEncoding.Class2_7_Bit)
            End If
            MsgBox("Message is sent. Reference no is " & msgNo, _
                    MsgBoxStyle.Information)
        Catch ex As Exception
            MsgBox(ex.Message & ". Make sure your SIM memory is not full.", _
                   MsgBoxStyle.Critical)
        End Try

        'Try
        '    Dim storages() As Storage = oGsmModem.GetStorageSetting
        '    Dim i As Integer
        '    txtStorage.Text = String.Empty
        '    For i = 0 To storages.Length - 1
        '        Dim storage As Storage = storages(i)
        '        txtStorage.Text += storage.Name & "(" & _
        '             storage.Used & "/" & storage.Total & "), "
        '    Next
        'Catch ex As Exception
        '    txtStorage.Text = "Not supported"
        'End Try
    End Sub


    Private Sub oGsmModem_NewMessageReceived(ByVal e As _
            ATSMS.NewMessageReceivedEventArgs) Handles _
            oGsmModem.NewMessageReceived
        txtMsg.Text = "Message from " & e.MSISDN & ". Message - " & _
                      e.TextMessage & ControlChars.CrLf
    End Sub

    Private Sub btnCheckPhone_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles btnCheckPhone.Click
        MsgBox("Going to analyze your phone. It may take a while", _
                MsgBoxStyle.Information)
        oGsmModem.CheckATCommands()
        If oGsmModem.ATCommandHandler.Is_SMS_Received_Supported Then
            MsgBox("Your phone is able to receive SMS. Message " & _ 
                   "indication command is " & _
                   oGsmModem.ATCommandHandler.MsgIndication, _
                   MsgBoxStyle.Information)
            oGsmModem.NewMessageIndication = True
        Else
            MsgBox("Sorry. Your phone cannot receive SMS", _
                   MsgBoxStyle.Information)
        End If
    End Sub
End Class

In the next article, I will show you how to send vCard, vCalendar, and WAP Push messages using the atSMS library.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Software Developer (Senior)
Malaysia Malaysia
A programmer for a long time, and still learning everyday.

A supporter for open source solutions, and have written quite a few open source software both in .NET and Java.

https://mengwangk.github.io/

Comments and Discussions

 
GeneralRe: How to Delete Sent Messages Pin
mpdesign12-Jul-09 22:09
mpdesign12-Jul-09 22:09 
GeneralRe: How to Delete Sent Messages Pin
elixirdagger1-Jan-12 12:44
elixirdagger1-Jan-12 12:44 
GeneralRe: How to Delete Sent Messages Pin
mpdesign1-Jan-12 12:57
mpdesign1-Jan-12 12:57 
GeneralRe: How to Delete Sent Messages Pin
mpdesign2-Jan-12 23:24
mpdesign2-Jan-12 23:24 
GeneralRe: How to Delete Sent Messages Pin
Member 460625614-Jul-09 2:50
Member 460625614-Jul-09 2:50 
GeneralRe: How to Delete Sent Messages Pin
mpdesign15-Jul-09 0:11
mpdesign15-Jul-09 0:11 
GeneralRe: How to Delete Sent Messages Pin
huangchienlie14-Sep-11 21:20
huangchienlie14-Sep-11 21:20 
GeneralRe: How to Delete Sent Messages Pin
Member 460625614-Jul-09 12:36
Member 460625614-Jul-09 12:36 
Questionmemory full Pin
agahii6-Sep-07 11:07
agahii6-Sep-07 11:07 
AnswerRe: memory full Pin
mpdesign11-Sep-07 0:48
mpdesign11-Sep-07 0:48 
QuestionRe: memory full Pin
agahii12-Sep-07 6:09
agahii12-Sep-07 6:09 
AnswerRe: memory full Pin
mpdesign12-Sep-07 6:13
mpdesign12-Sep-07 6:13 
Generaldelete sms storage Pin
mpdesign28-Aug-07 6:38
mpdesign28-Aug-07 6:38 
GeneralRe: delete sms storage Pin
mpdesign11-Sep-07 0:45
mpdesign11-Sep-07 0:45 
GeneralRe: delete sms storage Pin
kaki4569-Feb-09 0:42
kaki4569-Feb-09 0:42 
GeneralRe: delete sms storage Pin
mpdesign9-Feb-09 2:11
mpdesign9-Feb-09 2:11 
Generalhow to del msg Pin
dahlan1-Aug-09 17:09
dahlan1-Aug-09 17:09 
GeneralRe: how to del msg Pin
mpdesign2-Aug-09 22:09
mpdesign2-Aug-09 22:09 
Generalphone communication part 2 and 3 missing Pin
mpradeepg23-Aug-07 5:10
mpradeepg23-Aug-07 5:10 
QuestionPDU Encoding [modified] Pin
wminore1-Aug-07 6:33
wminore1-Aug-07 6:33 
QuestionReceiving sms using nokia mobiles(symbian OS) Pin
amit_lole26-Jul-07 2:50
amit_lole26-Jul-07 2:50 
GeneralReceiving long sms Pin
h_Peter15-Jun-07 2:02
h_Peter15-Jun-07 2:02 
QuestionWhich cell phone is best for receiving SMS Pin
vinonline55357315-May-07 0:25
vinonline55357315-May-07 0:25 
AnswerRe: Which cell phone is best for receiving SMS Pin
AngeloBestetti15-May-07 4:28
AngeloBestetti15-May-07 4:28 
GeneralLooks like bug in this lib Pin
AngeloBestetti27-Apr-07 0:57
AngeloBestetti27-Apr-07 0:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.