Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

SMS in .Net CE

     Un serviciu de baza folosit de telefoanele mobile (efectuarea apelurilor –articolul ) este trimiterea de SMS – uri (Short Message Service). Acesta permite utilizatorului sa trimita mesaje cu un numar de maxim 160 de caractere de pe un dispozitiv mobil catre altul.

     API-urile managed Windows Mobile includ functionalitati diverse si multe pentru dezvoltatori. Cea mai complexa si cea mai utilizata librarie este Microsoft.WindowsMobile.PocketOutlook, care este foarte usor de folosit. Ea este folosita in lucrul cu Calendar, Contacts, Tasks si SMS.

     Clasa SmsMessage, localizata spatiul de nume Microsoft.Mobile.PocketOutlook, permite trimiterea de sms-uri catre o adresa sau mai multe. Clasa SmsMessage deriva din clasa Message si se aseamana cu clasa EmailMessage, dar cu mai putine proprietati.

     Pentru a putea sa simulam trimiterea sms-urilor cu un emulator, va trebui ca acesta sa fie conectat la retea, lucru pe care l-am realizat in articol API-ul telefonului: apel.


connected

     Vom crea un proiect in care vom adauga doua controale TextBox in care vom introduce numarul de telefon si textul pe care il vom trimite plus un Button care va trimite mesajul.

AppSms

     Adaugam la proiect urmatoarele referinte:

Microsoft.WindowsMobile.dll

Microsoft.WindowsMobile.PocketOutlook.dll

     In cod vom adauga spatiile de nume:

using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;

     In metoda apelata de butonul trimite, vom scrie urmatorul cod, foarte usor de inteles, datorita folosirii clasei SmsMessage.

            try
            {
                SmsMessage sms = new SmsMessage();
                //adaugam numarul de telefon ca recipient
                sms.To.Add(new Recipient(txtNrTel.Text));
                //textul mesajului
                sms.Body = txtMesaj.Text;
                //trimite mesajul
                sms.Send();
                lblSmsPrimit.Text = "Mesajul a fost trimis";
            }
            catch (Exception ex)
            {
                lblSmsPrimit.Text = ex.Message;
            }
        
 

     Ceea ce am scris mai sus constituie o modalitate de a trimite un sms.  Am putea, de exemplu, fara a avea nevoie de mini-interfata construita de noi, sa trimitem un mesaj cu ajutorul clasei MessagingApplication, care va apela forma standard de compunere a unui sms.

            SmsMessage sms2 = new SmsMessage("222", "mesaj");
            //afisam form de compunere a unui mesaj
            MessagingApplication.DisplayComposeForm(sms2);

     Putem cere un raport de confirmare in cazul in care mesajul trimis a ajuns cu succes.

           
            //cerem mesaj de confirmare
            sms2.RequestDeliveryReport = true;

     Pentru primirea unui mesaj trebuie sa folosim o instanta a clase MessageInterception. In evenimentul de Load al formei cream un obiect al acestei clasei.

             //instanta ce se va ocupa de primirea mesajului
            _interceptieSms = new MessageInterceptor(InterceptionAction.Notify);

     Se observa ca am folosit ca parametru al constructorului un membru din enumeratia InterceptionAction si anume Notify. Acest lucru va face ca sms-ul, dupa citirea sa poata fi gasit in continuare in Inbox. Daca foloseam NotifyAndDelete, dupa citire, mesajul ar fi fost sters.

     Constructorul clasei MessageInterceptor are cinci supraincarcari, unele permitand setarea unui thread special care sa se ocupe de mesajul primit. Pentru acest exemplu, vom folosi thread-ul principal.

     Continuam cu crearea evenimentului pentru mesajul primit.

            _interceptieSms.MessageReceived += new MessageInterceptorEventHandler(_interceptieSms_MessagePrimit);

     In metoda vom afisa numarul de telefon si textul mesajului in aplicatia noastra:

        void InterceptieMesajPrimit(object sender, MessageInterceptorEventArgs e)
        {
            //in cazul in care Message nu e SmsMesage
            //si conversia nu este valida, voi primi null
            SmsMessage sms = e.Message as SmsMessage;
            if (sms != null)
            {
                txtMesaj.Text = sms.Body.ToString();
                txtNrTel.Text = sms.From.ToString();
            }   
        }

     In Cellular Emulator, in sectiunea SMS, vom introduce textul si numarul de telefon de la care se va primi mesajul.

SendSms

     In cateva secunde, vom primi sms-ul.

receivedSms

     Exista cazuri in care dorim sa filtram mesajele primite. Acest lucru poate fi realizat cu MessageCondition.

            //nu vom primi mesajele care vor contine Promo
            _interceptieSms.MessageCondition = new MessageCondition(MessageProperty.Body, MessagePropertyComparisonType.Contains, "Promo");

     Daca explorati MessageCondition, veti putea vedea ca exista si alte moduri de a filtra, inclusiv in functie de numarul de telefon. In exemplu nostru, am filtrat mesajele care au in continut cuvantul ”Promo’’.

     Spre deosebire de serviciile Web (care functioneaza pe un model de tip request/response), SMS-ul este “asincron” – mesajele sunt trimise si primite atunci cand este nevoie.Trimiterea si primirea de sms-uri este o mod de comunicare foarte popular.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*