SMSy, porty COM i C# - czyli wysyłanie wiadomości SMS w .net
03.10.2011 20:30
W ostatnim czasie moja baza klientów, dla których wykonuję usługi poszerzyła się o kilka osób. Wśród typowych zleceń na aplikacje bazodanowe i wizytówki internetowe znalazło się jedno dość nietypowe - dość zaawansowana aplikacji do wysyłania SMS z komputera, przy obsłudze wielu telefonów, z kolejkowaniem i innymi ciekawostkami. Oczywiście - nie miałem dotąd doświadczenia z tematem obsługi telefonu komórkowego z poziomu języka programowania. A stąd już był tylko jeden krok do Google'a/Bing'a, by po wielu godzinach poszukiwań odnaleźć kilka dość ciekawych informacji w tym temacie. Wpis jest przeznaczony dla osób, które są zainteresowane oprogramowaniem współpracy telefonu komórkowego z komputerem.
Kilka przydatnych faktów...
Informacje poniżej mogą być dla niektórych oczywiste, ale dla tych co (jeszcze) nie wiedzą chciałbym nieco usystematyzować zagadnienie: 1) Komunikacja telefonu z komputerem odbywa się według określonego standardu: Oznacza to, że są konkretne rozkazy, które programista wysyła do telefonu 2) Rozkazy te są uniwersalne, niezależnie od modelu telefonu 3) Dwa punkty wyżej są niezależne od tego czy łączymy się przez IR, Bluetooth, bądź też USB 4) To może tylko oznaczać, że po instalacji sterowników do telefonu (Nokia PC/Ovi suite, Samsung Kies, itp) i połączeniu go z komputerem, zobaczymy w menadżerze urządzeń systemu Windows sprzęt podłączony pod COM.
...do zestawu odpowiednia biblioteka...
Teraz czas wreszcie coś zaprogramować. Teoretycznie można komunikować za pomocą odpowiedniego rozkazu (np AT+CPIN="****"). Fanów średniopoziomowości (ukłon dla programistów C) zapraszam do zapoznania się z tą specyfikacją. Nas jednak zainteresuje wygodna biblioteka COM do obsługi tego cuda w języku C#. Biblioteka ta zwie sie GSMComm. ( Strona internetowa z pobieraniem biblioteki )
Oto schemat działania naszego rozwiązania:
Biblioteka ta udostępnia nam wygodne obiekty i metody do komunikacji z naszym telefonem. Aby jej użyć należy dodać referencję do biblioteki w edytorze projektu Visual Studio, a następnie do sekcji usingów zaimportować dwie przestrzenie nazw:
using GsmComm.GsmCommunication; using GsmComm.PduConverter;
Pierwsza odpowiada za komunikację z telefonem, zaś druga za obsługę wiadomości.
Jeżeli wiemy już co do czego służy, to warto zabrać się za praktyczny przykład. W kodzie programu musimy zadeklarować obiekt klasy GsmCommMain. W przykładzie nadam mu nazwę gsm. W konstruktorze tego obiektu podajemy podstawowe parametry komunikacji z wybranym modelem telefonu gsm = new GsmCommMain(nr_portu_com, liczba_bitow_na_sekunde, czas_oczekiwania); Kolejnymi argumentami jest port COM używany przez telefon, liczba bitów na sekundę i czas oczekiwania na odpowiedź urządzenia. Informacje te możemy wyciągnąć z menadżera urządzeń Windows. Dla telefonu Samsung Star II połączonym przez Bluetooth wyglądają one tak:
...i voila!
Teraz nie pozostaje nam nic innego, jak napisanie kilku linijek kodu odpowiedzialnych za wysłanie naszego SMSa.
SmsSubmitPdu pdu = new SmsSubmitPdu(tresc, numer); gsm.SendMessage(pdu);
Obiekt SmsSubmitPdu w konstruktorze zawiera treść wiadomości SMS oraz numer telefonu odbiorcy. Metoda obiektu gsm SendMessage(pdu); wysyła telefonowi rozkaz wysłania wiadomości o zadanej treści i numerze. To wszystko! Bez żadnej filozofii, udziwnień, skomplikowanego kodu.
Na końcu, nie pozostaje mi życzyć nic innego jak wielu pomysłów na ciekawe projekty z użyciem komórki i bacznego kontrolowania stanu konta ;) Do tekstu dołączam archiwum z kodem źródłowym przykładowej aplikacji. ( sms_przyklad_dp.zip )