Dispozitivele moderne Windows Mobile includ o varietate de optiuni pentru conectarea la retea , diferenta majora dintre ele fiind data de viteza.
Pentru inceput, vom stabili conexiunea implicita de internet a dispozitivului mobil pe cea folosita de sistemul desktop.
Accesam din Control Panel, Windows Mobile Device Center.
In Connection Settings, stabilim setarile astfel:
In pasul urmator, vom initializa emulatorul pe care il vom folosi. Pornim Device Emulator Manager (Program Files\Microsoft Device Emulator\1.0) – dvcemumanager.
Vom selecta optiunea Connect pentru emulatorul dorit.
Pentru a finaliza legatura dintre dispozitiv si desktop, selectam acum optiunea Craddle.
Dupa acest ultim pas, vom observa ca in Windows Mobile Device Center va aparea mesajul cum ca dispozitivul a fost conectat.
Verificam daca, intr-adevar, dispozitivul se poate conecta la internet, folosind conexiunea din calculatorul desktop cu ajutorul Internet Explorer.
Avem conexiune la internet in cadrul emulatorului ! :)
Pentru a evita ca o aplicatia sa incerce sa determine conexiunile disponibile, Windows Mobile pune la dispozitie Connection Manager.
Connection Manager este responsabil pentru administrarea tuturor conexiunilor la care dispozitivul are access (primeste de la aplicatie doar tipul de conexiune de care are nevoie, iar Connection Manager va identifica conexiunile disponibile, va selecta pe cea optima si o va initia. In unele cazuri, poate face “share” asupra conexiunii pentru mai multe aplicatii.
Acum, ne vom intoarce la cod si vom crea o aplicatie care va arata cum vom crea/incheia o conexiune la retea dintr-o aplicatie managed.
Vom avea nevoie de API Connection Manager nativ.
Pentru acest simplu exemplu, nu vom aveam nevoie de toate cele 11 metode, ci doar cateva dintre ele.
ConnMgrMapURL – reda identificatorul retelei (Internet/Work<intranet>) pentru url-ul specificat.
ConnMgrEstablishConnection – alege conexiunea optima in functie de identificatorul retelei. Apelul acestei metode se va termina indiferent daca incercarea de conectarea a avut loc cu succes sau nu (ConnMgrConnectionStatus va determina statusul conexiunii).
ConnMgrEstablishConnectionSync – alege conexiunea optima in functie de identificatorul retelei. Apelul acestei metode se va termina doar la sfarsitul incercarii de conectare.
ConnMgrReleaseConnection – inchiderea conexiunii.
ConnMgrConnectionStatus – reda statusul conexiunii specificate.
Pentru folosirea acestor metode, vom copia urmatorul cod in clasa in care le vom folosi. Vom avea nevoie de spatiul de nume:
using System.Runtime.InteropServices;
[DllImport("CellCore.dll")] static extern int ConnMgrMapURL(string url, ref Guid networkGuid, int passZero); [DllImport("CellCore.dll")] static extern int ConnMgrEstablishConnection(ConnMgrConnectionInfo connectionInfo, ref IntPtr connectionHandle); [DllImport("CellCore.dll")] static extern int ConnMgrEstablishConnectionSync(ConnMgrConnectionInfo connectionInfo, ref IntPtr connectionHandle, uint dwTimeout, ref ConnMgrStatus dwStatus); [DllImport("CellCore.dll")] static extern int ConnMgrReleaseConnection(IntPtr connectionHandle, int cache); [DllImport("CellCore.dll")] static extern int ConnMgrConnectionStatus(IntPtr connectionHandle, ref ConnMgrStatus status);
In download-ul de la sfarsitul articolului, am atasat un fisier .txt care contine toate metodele, structurile, enumerarile din Connnection Manager.
Pentru metoda care va crea o conexiune, vom scrie urmatorul cod:
private string url = "http://blog.zeltera.eu"; IntPtr hConnection = IntPtr.Zero; private void menuItem1_Click(object sender, EventArgs e) { //identificatorul pentru retea Guid networkGuid = Guid.Empty; //statusul conexiunii ConnMgrStatus status = ConnMgrStatus.Unknown; //stabileste identificatorul in functie de url ConnMgrMapURL(url, ref networkGuid, 0); //instanta ConnMgrConnectionInfo info = new ConnMgrConnectionInfo(networkGuid); ConnMgrEstablishConnectionSync(info, ref hConnection, 0, ref status); label1.Text = "Status conexiune = " + status; }
Reamintim ca atunci cand transmitem un parametru de tip ref unei metode, metoda respectiva va referentia variabila si orice schimbare va va afecta valoarea variabilei.
Pentru inchiderea conexiunii, cream metoda:
private void menuItem3_Click(object sender, EventArgs e) { if (hConnection != IntPtr.Zero) { ConnMgrReleaseConnection(hConnection, 0); hConnection = IntPtr.Zero; } }
API-ul Connection Manager este foarte simplu de folosit si poate fi accesat doar in .Net Compact Framework.
De exemplu, luam pentru detaliere enumerarea valorilor statusului conexiunii. Ele pot fi gasite pe siteul msdn. Numele acestora sunt foarte intuitive, cu ajutorul acestora putem informa foarte usor utilizatorul despre cum decurge incercarea de conectare la retea, erorile aparute, etc.
API-ul Connection Manager este o parte fundamentala a Windows Mobile.
Toate dispozitivele mobile pot accesa reteaua prin intermediul desktop-ului la care sunt conectate prin Microsoft ActiveSync (Windows XP) sau Windows Mobile Device Center (Vista/Windows 7).
In lucrul cu ConnectionManager se recomanda ca, la intervale mai dese de timp, verificarea aplicatiei sa fie facuta pe dispozitivul propriu-zis, nu doar pe emulator.
In urmatorul articol, vom aborda Windows Communication Foundation in Windows Mobile.
Jean Valjean says:
Interesant, dar ceva pentru conectarea calculatorului prin modemul mobilului exista ?
zeltera says:
Cred ca asta se face folosind un driver – ar trebui pus la dispozitie de cel care produce telefonul. Eu am un nokia n97 pe care il folosesc sa imi conectez laptop-ul la internet si pentru asta folosesc nokia pcsuite. Nu stiu pentru alte telefoane cum se face.
Lucian says:
@zeltera
Salut, am dat intamplator de pagina asta cautand “n97 modem internet calculator” si am vazut raspunsul tau. Ai putea sa-mi spui pasii ce trebuie facuti pentru a avea acces la internet pe notebook prin intermediul telefonului ?!?
Precizez ca informatiile nu sunt pentru mine, sunt pentru o amica de-a mea, urmeaza ca raspunsul tau (daca reusesti si ai timp sa-l dai) sa-l “traduc” ei.
Foloseste Windows Xp si probabil programele de la Nokia: suita si Ovi. Conexiune Usb (preferabil) sau wifi.
N-as vrea sa pierzi prea mult timp pe o descriere detaliata, sigur nu va fi nevoie, probabil e de ajuns doar pasii
Mersi mult si bafta cu blogul!
zeltera says:
E destul de simplu, tot ce iti trebuie e un n97, un cablu de date si aplicatia ovi suite. Instalezi ovi suite (dai o cautare pe google si o sa iti gaseasca probabil ceva cat mai apropiat de locatia ta), instalezi aplicatia si urmezi instructiunile pe care ti le da ovi pentru a conecta telefonul la calculator. Odata conectat, ai in meniul Tools comanda Connect to Internet.
Un screenshot cu respectivul meniu:
Cand esti conectat, in partea dreapta a ferestrei alicatiei Ovi apare un panel asemanator cu urmatorul panel:
Bineinteles, conditia pt a avea Internet este sa fie activat serviciul pe telefonul mobil – verifici asta folosind browserul telefonului. Sper sa te fi ajutat explicatiile mele. Numai bine.
Lucian says:
PS. si pentru ca vrei sa faci un “pimp de banner” da-mi niste detalii si vedem ce iese … asa ma revansez si eu ;)
Lucian says:
Salut, multumesc mult pentru raspuns. Nu am reusit sa facem conexiunea pentru ca ne-am impotmolit la configuratia initiala. Cand intri pentru prima oara pe Ovi sunt niste pasi in plus si ne-am cam blocat.
Am incercat de doua ori dar nu am reusit, plus ca imi era destul de greu sa-mi dai seama vorbind la telefon cam cum arata ferestrele si meniurile din Ovi Suite, astfel ca am amanat-o pe data viitoare… pana atunci mai strang niste informatii.
Bafta multa si multumesc inca o data!
zeltera says:
Cu placere. Daca instalarea initiala, care mai simpla decat este nu cred ca se poate face, nu a reusit, e o probleme. Daca totul e ok cu instalarea, conectarea la Internet este doar o functie automata a OVI. Din cate imi amintesc eu, cand am instalat OVI Suite la mine, pana ce mi-a fost detectat telefonul a durat cateva secunde – mai multe, cam 30 – 60 secunde. In prealabil windowsul a detectat telefonul si a pornit automat procesul de “Add new device”. Oricum, instalarea ar trebui sa fie simpla si 100% automata (adica tot ce tre sa faca utilizatorul e sa apese butonul Next).
Tine-ma la curent cu evolutia instalarii/conectarii iar daca ai intrebari, intreaba.