n ultimele decenii, odat cu dezvoltarea tot mai rapid a tehnologiei, piaa a nceput s se concentreze din ce n ce mai mult n jurul conceptului de smartphone (telefon mobil multimedia multifuncional, conectat la o reea GSM sau UMTS). Este o tendin normal, avnd n vedere faptul c traficul de date a devenit tot mai rapid i mai accesibil din punct de vedere al costurilor, smartphone-urile oferind aproape toate funcionalitile cu care este obinuit un utilizator de computer (agend, calendar, navigare GPS, e-mail, browser, editor de text, minicalculator, aparat foto-video i chiar soft-uri de specialitate precum Adobe Photoshop). Treptat, mijloacele clasice de comunicare ntre dispozitivele mobile sunt tot mai puin utilizate, locul lor fiind luat de aplicaii ce comunic via Internet. De exemplu, utiliznd Viber sau Skype, se poate vorbi gratuit oriunde n lume, ba mai mult, se pot iniia apeluri video sau conferine. WhatsApp, Facebook Messenger sau Snapchat substituie SMS-urile i MMS-urile, avnd de asemenea o suit de funcionaliti extra. n sfrit, dac ne referim la schimbul de fiiere, Bump este o alternativ mai rapid i cu o limit de dimensiune mai mare n comparaie cu anticul infrarou sau cu Bluetooth-ul. Cu toate acestea, cel puin la noi n ar, exist nc numeroase zone fr acoperire de Internet, fapt care impiedic renunarea total la vechile mijloace de interaciune. Un alt motiv ar fi consumul foarte mare de baterie cauzat de traficul de mare vitez (prin noile generaii de tehnologie telefonic mobil 3G i 4G). Acest lucrare i propune s trateze mijlocele de interaciune ntre dispozitiviele mobile precum i controlul de la distan al unui dispozitiv prin intermediul altuia (nu neaprat smartphone). Structura lucrrii este prezentat n continuare: 4
Capitolul 1: Introducere conine o scurt introducere n problematica interaciunii dintre dispozitivele mobile i a tehnologiilor existente la momentul actual precum i o descriere sumar a fiecrui capitol n parte; Capitolul 2: Descrierea problemei prezint motivul alegerii temei, detalierea sarcinilor de lucru precum i cteva informaii despre conceptul de redirecionare a apelurilor ctre un alt numr de telefon; Capitolul 3: Abordri existente/posibile cuprinde o prezentare detaliat a mijloacelor existente de interaciune (SMS, Infrarou, Bluetooth i WiFi); Capitolul 4: Descrierea soluiei aici se vor regsi informaii despre platforma Android (accentul fiind pus pe noiuni specifice folosite n dezvoltarea aplicaiei), cazuri de utilizare i detalii de implementare; Capitolul 5: Concluzii i posibiliti de extindere cuprinde o comparare a mijloacelor de interaciune wireless i descrie iteraiile gndite pentru viitoarele versiuni ale aplicaiei; Capitolul 6: Referine bibliografice
5
Capitolul 2 Descrierea problemei
Atunci cnd dou dispozitive vor s comunice ntre ele, trebuie nti s agreeze asupra unui set de reguli comun. Primul punct al acordului este la nivel fizic: stabilirea conexiunii, pe fir sau wireless. Apoi, dimensiunea maxim a datelor trimise la un moment dat: porturile seriale, de exemplu, trimit date de cte un bit n timp ce porturile paralele pot trimite mai muli bii odat. n fine, ultimul lucru de care dispozitivele trebuie s in cont este interpretarea fluxului de bii, pentru a se asigura c mesajul primit este acelai cu cel trimis. Toate acestea conduc la dezvoltarea unui set de comenzi cunoscut sub numele de protocol. Ideea aplicaiei dezvoltate n partea practic a lucrrii a aprut dintr-o necesitate. Mi s-a ntmplat de nenumrate ori s mi uit telefonul ntr-un loc la care s nu mai am acces pentru cteva ore (de exemplu acas sau n main) i s pierd apeluri importante. Avnd n vedere c operatorii de telefonie mobil permit redirecionarea apelurilor ctre un alt numr de telefon fr un tarif suplimentar, soluia a venit destul de natural. Dei nu doresc s intru la acest moment n detalii de implementare, voi anticipa puin coninutul capitolului 4 explicnd pe scurt conceptul de redirecionare i cum anume funcioneaz el: Tehnic, pentru redirecionarea necondiionat a apelurilor spre un alt dispozitiv se apeleaz *21* Numr de deviere #, ##21# pentru dezactivare iar pentru verificarea statusului #21#. Putem ns seta ca redirecionarea s se realizeze doar n anumite condiii:
6
Situaie Activare Dezactivare Status Telefonul nu poate fi localizat **62* Numr de deviere # ##62# *#62# Linia este ocupat **67* Numr de deviere # ##67# *#67# Apelul este nepreluat **61* Numr de deviere # ##61# *#61#
Aceste coduri sunt universale i funcioneaz pentru majoritatea zonelor i furnizorilor de telefonie mobil, excepie fcnd doar continentul nord-american i compania Sprint Nextel [5]. Astfel, singurul lucru rmas de fcut era s iniiez, de la distan, prin intermediul unui alt dispozitiv (dup cum am precizat anterior, nu neaprat smartphone), un astfel de apel special. Singura problem este c nu toate platformele permit acest lucru. Dup cum am vzut puin mai sus, pentru a realiza orice fel de redirecionare trebuie apelat o succesiune de simboluri i cifre care ncepe cu *. iOS-ul, din motive ce in de securitatea clienilor (multe numere cu supratax au un astfel de format), nu permite ca un astfel de eveniment s se produc automat, chiar dac utilizatorul a dat n prealabil aplicaiei permisiunea de a iniia automat apeluri. Acesta este motivul pentru care proof of concept-ul este realizat pentru platforma Android, mult mai customizabil i puin restrictiv.
7
Capitolul 3 Abordri existente/posibile
Acest capitol i propune s descrie amnunit cele mai importante dintre mijloacele existente de interaciune ntre dispozitivele mobile i s compare principalele trei tehnologii wireless: Infrarou, Bluetooth i WiFi.
3.1 SMS SMS (Short Message Service) este un serviciu de mesaje text ce funcioneaz pe telefon, web sau alte sisteme de comunicaii mobile. Acesta utilizeaz protocoale standardizate de comunicare pentru a permite telefoanelor fixe i mobile s fac schimb de mesaje text. SMS-urile, aa cum se folosesc pe dispozitivele moderne, i afl originea n radiotelegrafie, unde pager-ele memo radio foloseau astfel de protocoale. Serviciul a fost definit n 1985, fcnd parte dintr-o serie de standarde impuse de Sistemului Global pentru Comunicaii Mobile (GSM), ca un mijloc de a trimite mesaje de pn la 160 caractere. Dei cele mai multe astfel de mesaje sunt trimise ntre telefoanele mobile, suportul pentru acest serviciu s-a extins i include n prezent i alte tehnologii mobile ca de exemplu reelele ANSI CDMA i Digital AMPS, precum i reelele fixe i prin satelit. Aa cum am menionat mai sus, un SMS poate conine pn la 160 caractere, n cazul n care fiecare caracter este de 7 bii conform alfabetului implicit; mesajele de 8 bii maxim 140 de caractere nu sunt de obicei interpretate de telefoane ca fiind de tip text ci mai degrab ca imagini, sunete de apel sau setri de WAP/GPRS; mesajele de 16 bii maxim 70 de caractere) sunt utilizate pentru mesaje text de tip Unicode(UCS2) ce conin mai multe simboluri i caractere speciale. Exist aa numitele mesaje de clas zero care nu se salveaz n csua de intrri ci apar direct deschise pe ecranul telefonului; astfel 8
de mesaje nu sunt folosite n general de utilizatori ci de operatorii de telefonie mobil pentru a face ct mai vizibile eventualele alerte trimise. Exist dou modaliti n ceea ce privete trimiterea i recepionarea mesajelor: modul text i modul PDU (Protocol Description Unit). Modul text (indisponibil pe unele telefoane) este doar o encodare a fluxului de bii reprezentat de modul PDU. Alfabetele pot diferi i exist mai multe alternative de afiare a unui SMS, n funcie de encodarea aleas. Cele mai comune opiuni sunt "PCCP437", "PCDN", "8859-1", "IRA" i "GSM". Atunci cnd mesajul este citit pe calculator, se poate comuta simplu ntre acestea folosind comanda AT + CSCS. Dac ns este citit pe telefon, acesta va alege automat cel mai potrivit mod de interpretare al biilor. O aplicaie capabil s citeasc mesajele primite poate utiliza modul text sau modul PDU. Dac este selectat modul text, aplicaia este limitat de opiunile de encodare presetate. n unele cazuri ns, asta nu este suficient; folosind modul PDU, orice codificare poate fi implementat [1].
Primirea unui mesaj folosind modul PDU irul de bii PDU conine, pe lang mesajul propriu-zis, o mulime de informaii despre expeditor precum centrul su de servicii SMS sau ora exact a trimiterii mesajului i este structurat n octei hexa-zecimali sau semi-octei zecimali. Urmtorul ir de caractere reprezint ceea ce se primete la trimiterea mesajului hellohello: 07917283010010F5040BC87238880900F10000993092516195800AE8329BFD4697D9EC37 Aceast secven de octei este compus din trei pri: primul octet indic lungimea informaiei SMSC (Short Message Service Center), urmtorii apte reprezint informaia SMSC iar restul compun aa numita parte SMS_DELIVER. Octei Descriere 07 Lungimea informaiei SMSC (n acest caz 7 octei); 91 Tipul de adres al SMSC (91 reprezint formatul internaional pentru numere de telefon); 72 83 01 00 10 F5 Numrul de telefon al centrului de servicii (n semi-octei zecimali): +27381000015; 04 Primul octet al mesajului SMS_DELIVER; 9
0B Lungimea numrului de telefon expeditor (0B hex = 11 dec); C8 Tipul de adres al numrului expeditor; 72 38 88 09 00 F1 Numrul expeditor (n semi-octei zecimali), cu F la final; 00 TP-PID Identificatorul protocolului; 00 TP-DCS Sistemul de codificare a datelor; 99 30 92 51 61 95 80 TP-SCTS Ora expedierii (semi-octei); 0A TP-UDL Lungimea datelor utilizatorului i lungimea mesajului; Cmpul TP-DCS indic date de 7 bii aa c aici lungimea este reprezentat de numrul de septei (0A hex = 10 dec). Dac acesta ar fi indicat date de 8 bii, lungimea ar fi fost egal cu numrul de octei (9). E8329BFD4697D9EC37 TP-UD Mesajul hellohello.
Toi octeii de mai sus sunt hexa-zecimali, cu excepia numrului centrului de servicii, a numrului expeditor i a timestamp-ului care sunt semi-octei zecimali. Ultima parte (cea care conine mesajul) este format din octei hexa-zecimali dar acetia reprezint de fapt date pe 7 bii. Semi-octeii sunt zecimali i astfel, de exemplu, numrul expeditorului se obine simplu prin inversarea primilor 4 bii cu ultimii n cadrul byte- ului (72 38 88 09 00 F1 devine 27 83 88 90 00 1F). Lungimea numrului de telefon este impar (11) aa ca a fost adugat un F la final pentru a se forma corespunztor octeii. Dac analizm timestamp-ul, observm c primele 6 caractere reprezint data, respectiv 29 martie 1999, urmtoarele 6 timpul (15:16:59) iar ultimele dou specific fusul orar [6].
Expedierea unui mesaj folosind modul PDU AT + CMGF = 0 Seteaz modul PDU AT + CSMS = 0 Verific dac modemul suport comenzi de tip SMS AT + CMGS = 23 Trimite mesajul de 23 octei (excluznd cele doua zerouri iniiale) 0011000B916407281553F80000AA0AE8329BFD4697D9EC37 [6] 10
Octei Descriere 00 Lungimea informaiei SMSC. Aici lungimea este 0 ceea ce nseamn c trebuie folosit SMSC-ul stocat n memoria telefonului; acest octet este opional pe unele telefoane trebuie omis (folosindu-se SMSC-ul din memorie); 11 Primul octet al mesajului SMS-SUBMIT; 00 TP-Message-Reference valoarea 00 permite telefonului s stabileasc automat numrul de referin al mesajului; 0B Lungimea numrului de telefon (0B hex = 11 dec); 91 Tipul de adres: 91 reprezint formatul internaional pentru numere de telefon; 6407281553F8 Numrul de telefon (n semi-octei zecimali): +46708251358; la fel ca nainte, lungimea este impar (11) aa ca a fost adugat un F la final pentru a se forma corespunztor octeii; 00 TP-PID Identificatorul protocolului; 00 TP-DCS Sistemul de codificare a datelor: acest mesaj este encodat conform alfabetului implicit pe 7 bii. Dac am avea 04 n loc de 00, cmpul TP-User-Data ar fi interpretat pe 8 bii n loc de 7 (acest identificator se utilizeaz de obicei pentru mesageria inteligent smart messaging); AA TP-Validity-Period Perioada de valabilitate a mesajului: AA nseamn 4 zile; acest octet este de asemenea opional; 0A TP-User-Data-Length Lungimea datelor utilizatorului i lungimea mesajului; Cmpul TP-DCS indic date de 7 bii aa c aici lungimea este reprezentat de numrul de septei (0A hex = 10 dec). Dac acesta ar fi indicat date de 8 bii, lungimea ar fi fost egal cu numrul de octei (9); E8329BFD4697D9EC37 TP-User-Data Aceti octei reprezint mesajul hellohello.
11
3.2 Bluetooth Bluetooth-ul este un set de specificaii (un standard) ce faciliteaz schimbul de date pe distane scurte (prin unde radio cu lungimea de und scurt ntre 2.402 i 2.480 GHz) ntre dispozitive fixe i mobile i construirea reelelor personale fr fir (PAN personal area network).
Inventat de furnizorul de telecomunicaii Ericsson n 1994, tehnologia a fost conceput iniial ca o alternativ wireless a cablurilor de date RS-232 i poate interconecta mai multe dispozitive, depind problemele de sincronizare (dat fiind faptul c exist numeroase dispozitive ce folosesc frecvene ISM, asigurarea c acestea nu vor interfera cu Bluetooth-ul a constituit o parte esenial a procesului de proiectare) [7]. Bluetooth-ul duce practic ideea de reea local (small-area network) la alt nivel prin eliminarea necesitii de intervenie a utilizatorului i meninerea puterii de transmisie la un nivel extrem de sczut pentru a economisi energia bateriei. Pentru a ntelege mai bine, s ne imaginm urmtorul lucru: primii un apel pe telefonul dumneavostr chiar n momentul n care ai parcat n faa casei; i spunei s revin n cinci minute pentru a avea timp s intrai i s v lsai lucrurile; de ndat ce intrai n cas, harta pe care ai primit-o pe telefonul mobil de la sistemul de navigaie al mainii este trimis ctre computerul dumneavoastr deoarece telefonul a captat semnal Bluetooth de la PC i a trimis automat datele ce erau desemnate pentru transfer; cinci minute mai trziu, cnd Clasa Puterea maxim permis (mW) Puterea maxim permis (dBm) Raza (aproximativ) 1 100 mW 20 dBm ~100 metri 2 2,5 mW 4 dBm ~15 20 metri 3 1 mW 0 dBm ~10 metri 12
persoana revine, telefonul fix va suna n locul celui mobil; dei respectivul a apelat acelai numr, fix-ul a captat semnal de la mobil i a redirecionat apelul n mod automat realiznd c suntei acas; fiecare astfel de semnal emis sau captat de mobilul dumneavoastr consum un singur miliwatt, nesemnificativ pentru energia bateriei. Observaie: toate dispozitivele de care am vorbit n exemplul de mai sus trebuie s fie compatibile cu tehnologia Bluetooth pentru a se putea interconecta. n esen, Bluetooth-ul este un standard de reea ce funcioneaz pe dou niveluri: cel fizic (frecvene radio) i cel de protocol, unde dispozitivele trebuie s tie cnd anume se trimit biii, ci pot fi trimii deodat i mai ales s se asigure c mesajul primit este acelai cu cel trimis. Avantajele acestei tehnologii ar fi: independenta de cabluri (wireless), costurile reduse i automatismul. Primele dou sunt bifate i de ctre comunicaiile prin infrarou, care ns nu sunt capabile s interconecteze mai mult de dou dispozitive (one to one technology). Bluetooth-ul a fost gndit s rezolve problemele cu care se confruntau sistemele bazate pe infrarou. Vechiul standard 1.0 avea o vitez maxim de transfer de un megabit pe secund (1 Mbps); de la versiunea 3.0 se pot ns gestiona pn la 24 Mbps [9]. Aminteam mai sus c o parte important a procesului de proiectare a reprezentat-o evitarea interferenelor cu alte dispozitive. Una dintre modalitile prin care acest lucru se realizeaz sunt semnalele foarte slabe (~1 mW) ce se trimit. Prin comparaie, cele mai puternice telefoane mobile pot transmite semnale de 3 wai, adic de 3000 de ori mai mult. Puterea sczut limiteaz raz de actiune la aproximativ 10 metri, suficieni ns pentru a controla dispozitive din camere diferite, avnd n vedere c pereii nu blocheaz undele. Se pot interconecta 8 dispozitive n aceeai raz de 10 metri; dei riscul de a interfera pare mare, e foarte puin probabil. Bluetooth-ul folosete o tehnic numit saltul frecvenelor de spectru dispersat ce face aproape imposibil ca mai mult de un dispozitiv s transmit pe aceeai frecven simultan. Practic, fiecare device folosete 79 de frecvene individuale alese random dintr-un interval desemnat, schimbarea de la una la alta facndu-se in mod regulat. Emitoarele schimb frecvenele de 1600 de ori pe secund, ceea ce nseamn c mai multe dispozitive pot folosi complet o parte limitat a spectrului radio. Din moment ce fiecare transmitor utilizeaz saltul frecvenelor de spectru dispersat n mod automat, e improbabil ca dou s transmit simultan pe aceeai frecven (oricum, interferena ar dura doar o fraciune de secund). 13
Cnd mai multe dispozitive compatibile Bluetooth ajung unele n proximitatea celorlalte, are loc o conversaie electronic cu scopul de a afla dac au date de partajat sau dac unele trebuie s le controleze pe celelalte. Utilizatorul nu trebuie s lanseze nicio comand, schimbul de informaii fcndu-se n mod automat. Odat terminat acest proces, dispozitivele chiar dac fac parte dintr-un sistem informatic sau audio formeaz o reea (Personal Area Network sau piconet). Membrii acesteia au grij s pstreze legtura srind simultan peste frecvenele pe care opereaz alte PAN-uri din apropiere. n configurarea oricrei reele de tip wireless, securitatea este mereu un motiv de ngrijorare. Dispozitivele pot capta cu uurin undele radio din aer, astfel nct cei care trimit informaii sensibile printr-o conexiune fr fir trebuie s ia msuri de precauie pentru a se asigura c datele nu sunt interceptate. Bluetooth-ul ofer cteva moduri de securitate iar productorii de dispozitive l aleg pe cel mai potrivit. n aproape toate cazurile, utilizatorii i pot stabili o list de dispozitive de ncredere cu care pot face schimb de date fr a fi necesar s-i da de fiecare dat permisiunea. Metodele de securitate includ proceduri de autorizare i identificare care limiteaz folosirea serviciilor Bluetooth pentru cei nenregistrai oblignd utilizatorii s ia o decizie contient de fiecare dat cnd deschid un fiier sau accept un schimb de date. Atta timp ct aceste msuri sunt activate pe telefonul utilizatorului (sau orice alt dispozitiv), accesul neautorizat este puin probabil. Utilizatorul poate, de asemenea, s comute pe modul nedetectabil pentru a evita orice conectare cu alte dispozitive. Totui, primii programatori de virui pentru platforme mobile au profitat de conexiunea automat a Bluetooth-ului pentru a trimite fiiere infectate. Oricum, chiar dac virusul ajunge n telefon, utilizatorul trebuie s fie de acord s l deschid i mai apoi s l instaleze, aceti doi pai oprind pn n prezent majoritatea viruilor din a face prea multe stricciuni. Exist trei probleme de securitate specifice tehnologiei Bluetooth i anume: bluejacking, bluebugging i car whisperer. Bluejacking implic trimiterea unei cri de vizit (de fapt, mesaj text) ctre ali utilizatori din raza de 10 metri. Dac cei ce primesc nu i dau seama ce tip de mesaj este, pot permite accidental contactului primit s fie adugat n agend si apoi respectivul poate trimite orice tip de coninut ce va fi deschis automat ntruct provine de la un contact cunoscut. Bluebugging este o problem destul de serioas, deoarece permite hackerilor s acceseze de la distan telefonul unui utilizator i s i foloseasc funcionalitile, inclusiv apelurile i mesajele, fr ca acesta s poat 14
sesiza ce se ntmpl. The car whisperer este un produs software care permite hackerilor s trimit i s primeasc fiiere audio spre, respectiv de la sistemul audio al mainii. Aceste vulnerabiliti sunt inevitabile i apar ca efecte secundare odat cu progresul tehnologic; productorii de dispozitive le rezolv ns prin upgrade-uri de soft pe msur ce ele apar [8]. Atunci cnd vine vorba de versiuni, standardul Bluetooth este defalcat n mai multe norme: IEEE 802.15.1 definete versiunile 1.x, ce puteau atinge viteze de 1 megabit pe secund; IEEE 802.15.2 recomand utilizarea benzii de frecven de 2.4 GHz (utilizat, dup cum vom n urmtorul subcapitol, i de WiFi); totui, aceast norm nu a fost nc aprobat; IEEE 802.15.3 este un standard n curs de dezvoltare ce ar oferi viteze de pn la 20 Mbps; IEEE 802.15.4 este de asemenea n curs de dezvoltare, viznd aplicaiile Bluetooth ce folosesc viteze reduse.
3.3 Infrarou Tehnologia bazat pe infrarou permite dispozitivelor s comunice ntre ele prin semnale wireless cu raz scurt de aciune, putnd transfera fiiere sau alte date digitale n mod bidirecional. Tehnologia de transmisie n infrarou folosit de computere i telefoane mobile este similar cu cea folosit n unitile de control la distan (ex: telecomanda). Adaptoarele de reea n infrarou pot deopotriv primi i transmite date prin porturile aflate pe partea din spate sau lateral a unui dispozitivului. Adaptoarele n infrarou sunt instalate pe anumite laptopuri dar mai ales pe dispozitivele portabile. Pe sistemul de operare Microsoft Windows conexiunile n infrarou pot fi create prin aceeai metod ca i alte conexiuni de reea local. Astfel de reele au fost concepute s suporte conexiune direct ntre doar dou dispozitive i sunt create temporar, n funcie de 15
necesitate. Cu toate acestea, exist extensii ale acestei tehnologii ce suport mai mult de dou dispozitive i chiar reele semi-permanente. Comunicarea prin infrarou funcioneaz doar pe distane foarte scurte. Dispozitivele trebuie plasate la cel mult 5 metri distan, orientate cu emitoarele unul spre cellalt. Spre deosebire de celelate tehnologii wireless (Wi-Fi i Bluetooth), semnalele de reea n infrarou nu pot ptrunde prin perei sau alte obstacole i funcioneaz doar n linia de vedere. Tehnologia infrarou folosit n reele locale exist n trei forme diferite: IrDA-SIR (vitez mic) suport transfer de date de pn la 115 Kbps IrDA-MIR (vitez medie) suport transfer de date de pn la 1.15 Mbps IrDA-FIR (vitez mare) suport transfer de date de pn la 4 Mbps Lumina infraroie (IR) este radiaie electromagnetic cu lungimi de und dincolo de spectrul vizibil. Ochiul uman poate percepe lumina cnd lungimea de und este cuprins ntre 390 i 700 nanometri, cea infraroie avnd ntre 700 nanometri i 1 milimetru (corespunde la un interval de frecven de aproximativ 430THz 300GHz). Acest tehnologie a fost utilizat pe scar larg n comunicaiile fr fir pe lungime scurt, n special n gama de lungimi de und 1530 1565 micrometri, cunoscut sub numele de C-band. Cele mai multe dintre telecomenzile pentru dispozitive electronice folosesc o diod emitoare de lumin n infrarou (LED) pentru a emite radiaiile, acestea fiind apoi concentrate ntr-un fascicul ngust de ctre o lentil de plastic. Informaiile transmise, cum ar fi numrul canalului pe care dorii s mutai, sunt codificate ntr-un semnal ce poate fi apoi emis prin intermediul radiaiilor (i ulterior decodate de ctre receptor), acest proces purtnd numele de modulare. Cea mai comun schem de modulare pentru comunicarea n infrarou se numete modulare de 38 kHz. Exist foarte puine surse naturale de lumin infraroie cu aceast regularitate a semnalului, aa c, un emitor ce transmite date la frecvena de 38 kHz nu trebuie s i fac griji n privina interferrii. La apsarea unui buton al telecomenzii, LED-ul de emisie n infrarou va plpi cu o caden de 38 000 de ori pe secund transmind informaia codificat dispozitivului ce se dorete a fi controlat de la distan. 16
Dac ar fi s legm un osciloscop de LED-ul telecomenzii, acesta va afia un semnal asemeni celui din figura 3.3.1. Acest semnal modulat este exact ceea ce sistemul receptor primete. Aadar, dispozitivul receptor trebuie s demoduleze semnalul pentru a obine o secven binar ce poate fi interpretat de ctre microcontroler. Dup demodulare, semnalul reprezentat n figura 3.3.1 va arata precum cel din figura 3.3.2: Controlnd distana dintre semnalele modulate transmise, undele pot fi citite printr-un pin de input al microcontrolerului i decodificate sub forma unui flux serial de bii [10]. Doar pentru a v face o idee, din punct de vedere hardware, pentru a realiza o comunicare prin infrarou, sunt necesare urmtoarele echipamente (am fcut i o scurt Figura 3.3.1 Figura 3.3.2 17
cercetare asupra preurilor, ntruct am vrut s verific dac este ntr-adevr cea mai ieftin variant de interaciune): Microcontroler ex: Arduino Uno ($24.95) LED infrarou 950 nm ($0.95) Diod receptoare infrarou ex: TSOP38238 ($1.95) Buton ntreruptor ($0.35) Rezistor 330 ($0.95) Telecomand infrarou ce folosete modularizarea pe 38 kHz ($4.95) Totul cost aadar sub $35, la nivel experimental. n cazul dispozitivelor mobile microcontrolerul deja exist, telecomanda nu este necesar deci preul de echipare ar fi de $3 (lsnd la o parte faptul ca productorii i fac propriile componente sau le cumpra en gros la un pre mult mai mic).
3.4 Wi-Fi Wi-Fi este o tehnologie wireless ce permite unui dispozitiv electronic s fac schimb de date sau s se conecteze la internet folosind unde radio la frecvena de 2.4 sau 5 GHz. Wi-Fi Alliance, organizaia ce deine toate patentele legate de aceast tehnologie o definete ca fiind orice reea local fr fir (WLAN wireless local area network) bazat pe standardele Institutului de Inginerie Electric i Electronic IEEE 802.11. Un hotspot reprezint o zon cu o reea wireless accesibil, acest termen fiind de obicei folosit pentru locurile publice. Majoritatea smartphone-urilor sunt ns capabile s creeze un astfel de hotspot, mprind internetul de la operator, prin intermediul tehnologiei WiFi, cu alte dispozitive. Acest proces poart numele de tethering. Un router permite interconecterea unor dispozitive precum computere, telefoane mobile, imprimante, etc. prin intermediul semnalelor wireless sau a cablurilor Ethernet i, de asemenea, conectarea acestora la Internet. Majoritatea ofer o acoperire de aproximativ 30 metri n toate direciile, dei, la fel ca i n cazul radiaiilor infraroii, pereii i uile pot bloca semnalul. Pentru a extinde zona de acoperire se poate folosi un repeater ce preia semnalul i l rspndete n vecintatea lui (orice router poate juca i rol de repeater) [3]. 18
Securitatea este un aspect foarte important deoarece o reea neparolat implic prezena unor utilizatori strini i deci, o vitez mai sczut la Internet. De asemenea, n cazul n care pe reeaua respectiv sunt partajate i anumite date, oricine va avea acces la ele, fr a avea nevoie de permisiuni suplimentare. Factorul decisiv n protejarea reelei este alegerea protocolului de securitate, n conformitate cu standardul actual. The Wired Equivalency Privacy (WEP) a fost primul standard de securitate pentru reelele de arie larg (WAN Wide Area Network). Ideea din spatele acestui protocol a fost s creeze o platform de securitate wireless ce ar face orice reea fr fir la fel de sigur ca o reea tradiional. Hackerii i-au gsit ntre timp suficiente vulnerabiliti astfel nct acum a devenit facil s compromii o reea securizat WEP. Urmtorul protocol standardizat a fost WPA (WiFi Protected Acces) ce folosea o criptare bazat pe conceptul de TKIP (Temporal Key Integrity Protocol), nesigur ns i el la ora actual. Succesorul su, WPA2, este standardul de securitate recomandat actual pentru reele WiFi. Acesta are la baz tot TKIP-ul folosit de WPA dar poate fi configurat s funcioneze i cu un mecanism de criptare mult mai avansat i anume AES (Advanced Encryption Standard) [4]. Pentru a face configurarea mai uoar, a fost introdus o nou metod numit WiFi Protected Setup (WPS). Aceast funcionalitate atribuie practic router-ului un cod PIN unic, care ns nu este randomizat n timp real ci ales de productor. Dei atacurile de pn acum au dat rezultate doar pe cazuri particulare, nu este considerat foarte sigur. Un alt mecanism de securitate de actualitate poart numele de Media Access Control (MAC). Acesta funcioneaz diferit de cele prezentate anterior, nebazndu-se pe o parol cerut de la utilizator ci pe o component hardware. Dat fiind faptului c fiecare computer are o adres MAC unic, acest mecanism filtreaz clienii ce ncearc s se conecteze i le permite doar celor cu adresele specificate la configurarea router-ului. Singura bre este clonarea unui MAC valid n reea; este totui improbabil ca un client strin s posede o astfel de adres. Ultimul punct util vis-a-vis de securitate ar fi schimbarea SSID-ului (Service Set Identifier). Acesta reprezint numele reelei iar cel predefinit poate oferi adversarului informaii imediate precum modelul router-ului folosit. O reea wireless transmite la un nivel de frecven de 2.4 GHz sau 5 GHz, adaptndu-se la cantitatea de informaie ce este trimis. Standardele de reea (802.11) vor varia oarecum n funcie de nevoile utilizatorului, astfel: 19
802.11a transmite datele la un nivel de frecven de 5 GHz. OFDM-ul (Orthogonal Frequency-Division Multiplexing) utilizat mbunteste recepia prin diviziunea semnalelor radio n semnale mai mici, nainte ca acestea s ajung la router. Se pot trimite date cu o vitez de pn la 54 de megabii pe secund; 802.11b transmite datele la un nivel de frecven de 2.4 GHz, ceea ce implic o vitez de transfer a datelor mult mai mic n comparaie cu norma anterioar, de maximum 11 megabii pe secund; 802.11g transmite tot la un nivel de frecven de 2.4 GHz, ns, deoarece folosete o codificare de tipul OFDM, poate trimite date cu viteza de 54 de megabii pe secund; 802.11n cea mai rapid norm, se pot transmite pn la 140 de megabii pe secund, utilizndu-se un nivel de frecven de 5 GHz [11]. Exist cteva tipuri de hardware ce pot fi folosite n implementarea unei reele WiFi, precum: Adaptoarele wireless (adapters) sau controlerele interfeei de reea (NIC Network Interface Controllers) sunt plci de reea cu standardul 802.11 ce permit mainii s se conecteze la o reea wireless. Aceste dispozitive sunt disponibile n numeroase formate: plci PCI (Peripheral Component Interconnect), plci PCMCIA (Personal Computer Memory Card International Association), adaptoare USB (Universal Serial Bus) sau plci CF (Compact Flash). O staie reprezint un dispozitiv ce folosete o astfel de plac de reea; Punctele de acces (denumite i hotspot-uri) pot permite staiilor din apropiere s acceseze o reea pe fir cu care ele sunt conectate direct. Standardul 802.11 definete dou moduri de operare: Modul infrastructural, unde clienii sunt conectai la un punct de acces (implicit pentru plcuele cu standardul 802.11b); Modul ad-hoc, unde clienii sunt conectai unii la ceilali, fr a mai fi nevoie de existena unui punct de acces. Modul infrastructural n acest mod, fiecare staie se conecteaz la un punct de acces printr-o legtur wireless. Modelul format de punctul de acces i staiile localizate n raza de acoperire a acestuia 20
este denumit set de servicii de baz (BSS Basic Service Set). Fiecare astfel de BSS este identificat printr-un BSSID, un identificator pe 6 octei, care, n modul infrastructural, coincide cu adresa MAC a hotspot-ului. Este posibil ca mai multe puncte de acces (sau mai precis seturi de servicii de baz) s fie interconectate printr-un sistem de distribuie, cu scopul de a forma un set de servicii extins (ESS Extended Service Set). Sistemul de distribuie poate fi o reea pe fir, un cablu ntre dou puncte de acces sau chiar o reea wireless. Un set de servicii extins este indentificat n cadrul reelei prin intermediul unui ESSID, un identificator de 32 de caractere (n format ASCII). Deseori prescurtat SSID, acesta afieaz numele reelei i funcioneaz ca un prim nivel de securitate, ntruct este necesar pentru o staie s cunoasc acest identificator pentru a se putea conecta la reeaua extins. Atunci cnd un utilizator migreaz de la un set de servicii de baz la altul (deplasndu- se n cadrul setului de servicii extins), adaptorul wireless este capabil s schimbe automat punctul de acces, n funcie de calitatea semnalului. Punctele de acces comunic ntre ele folosind un sistem de distribuie n scopul de a schimba informaii Figura 3.4.1 Figura 3.4.2 21
despre staii i, dac este necesar, pentru a transmite date de la staiile mobile. Funcionalitatea ce permite staiilor s se mute facil de la un punct de acces la altul poart numele de roaming. Comunicarea cu hotspot-ul Atunci cnd o staie se altur unei celule, celula trimite o cerere de prob pe fiecare canal. Aceast solicitare conine identificatorul ESSID pe care celula este configurat s l utilizeze, precum i volumul de trafic pe care adaptorul wireless l suport. Dac ESSID-ul nu este setat, staia ascult n reea pentru a-l afla. Fiecare punct de acces emite la intervale regulate (aproximativ de 10 ori pe secund) un semnal numit far (beacon) ce conine informaii cu privire la identificatorul setului su de servicii de baz (BSSID), caracteristici i, dac este cazul, identificatorul setului de servicii extins (ESSID). ESSID-ul este emis implicit, ns ,este posibil (i recomandat) ca, din motive de securitate, aceast optiune sa fie dezactivat. Ori de cte ori o cerere este primit, punctul de acces verific identificatorul i volumul de date cerut prin intermediul farului. Dac ESSID-ul trimis se potrivete cu cel al punctului de acces se trimite un rspuns ce conine date de sincronizare i informaii cu privire la sarcina de trafic. n acest fel, staia ce primeste rspunsul poate testa calitatea semnalului trimis de hotspot pentru a determina aproximativ la ce distan se afl. n general, dup cum e i firesc, cu ct un punct de acces este mai apropiat, cu att semnalul este mai puternic i viteza de transfer a datelor crete. Aadar, o staie ce se afl n raza de acoperire a mai multor hotspot-uri (care au acelai SSID) l va alege pe cel ce ofer cel mai bun raport ntre capacitatea i ncrctura traficului curent. Modul ad-hoc n acest mod, clienii main se conecteaz wireless ntre ei cu scopul de a forma o reea peer-to-peer (o reea in care fiecare main se comport ca i client i punct de acces deopotriv). 22
Modelul format de aceste staii este denumit set de servicii de baz independent (IBSS). Aadar, un IBSS este o reea wireless ce conine cel puin dou staii i nu folosete niciun punct de acces. Acesta formeaz o reea temporar ce permite clienilor s fac schimb de date i, asemeni setului de servicii extins din modul infrastructural, este identificat printr-un SSID. ntr-o reea ad-hoc, raza de acoperire a setului de servicii de baz independent este determinat de raza de acoperire a fiecrei staii din reea n parte. Asta nseamn c, dac dou staii din reea sunt una n afara razei de acoperire a celeilalte, ele nu vor putea comunica ntre ele chiar dac vd celelalte staii. Spre deosebire de modul infrastructural, modul ad-hoc nu are un sistem de distribuie care s poat trimite cadre de date de la o staie la alta. Setul de servicii de baz independent este, prin definiie, o reea fr fir restricionat [12].
Figura 3.4.3 23
Capitolul 4 Descrierea soluiei
n cele ce urmeaz, vom prezenta aplicaia la toate nivelurile ei. Pentru nceput vom prezenta cazurile de utilizare cu scopul de a nelege mai bine cum aceasta funcioneaz i de ce este util; vom trece apoi la detaliile de implementare, nu nainte ns de a ne familiariza cu conceptele folosite n dezvoltare (specifice platformei Android).
4.1 Cazuri de utilizare Remote Redirect este o aplicaie dezvoltat pe platforma Android ce permite utilizatorului s i redirecioneze apelurile i mesajele text primite ctre alt numr de telefon, att local, ct i de la distan.
Figura 4.1.1 24
Figura 4.1.1 reprezint diagrama cazurilor de utilizare; toate funcionalitile prezente vor fi explicate pe larg n cele ce urmeaz, mai nti la nivel de utilizare i mai apoi din perspectiva tehnicilor de implementare. La prima utilizare a aplicaiei (imediat dup instalare), vei urma un scurt tutorial pentru a nelege exact cum funcioneaz. Redirecionarea local se poate realiza n momentul n care avei acces fizic la dispozitivul dumneavoastr. Dup cum vedei n Figura 4.1.2, primul pas este s selectai numrul de telefon spre care dorii s se realizeze redirecionarea. Butonul Pick Number va deschide lista de contacte de unde vei putea alege destinatarul. Urmtorul lucru pe care trebuie s l stabilii este tipul redirecionrii: apeluri, mesaje text sau ambele. Ultimul pas este s comutai butonul de status pe Active. n Figura 4.1.3, serviciul este inactiv, utilizatorul avnd selectat contactul spre care vrea s se realizeze redirecionarea (Tim). Utilizatorul poate verifica dac serviciul este activ n trei moduri diferite. n cazul n care se afl nc n aplicaie poate consulta comutatorul de status. Altfel, poate verifica dac n colul din stnga sus se afl pictograma aplicaiei (Figura 4.1.4) sau dac apare n meniul de notificri. n cazul de fa serviciul este activ, toate mesajele text fiind redirecionate pe numrul de telefon al lui Tim <0741 258 963>. Figura 4.1.2 25
Redirecionarea la distan este util cnd nu avei acces la telefonul dumneavoastr i utilizai un alt telefon pentru a activa serviciul, printr-un mesaj cheie. Structura mesajului cheie trebuie s fie urmtoarea: #rdr Parol Tip *Numr de telefon]. Parol un cod tiut doar de dumneavoastr care face imposibil redirecionarea de ctre o persoan neautorizat; la instalarea aplicaiei parola presetat este 12345 dar este de preferat s fie schimbata (putei face acest lucru din setri, accesnd Set password Figura 4.1.5); Tip specific aciunea pe care telefonul o va realiza, dup cum urmeaza: 0 dezactiveaz orice redirecionare activ; 1 redirecioneaz doar apelurile; 2 redirecioneaz doar mesajele text; Figura 4.1.3 Figura 4.1.4 26
3 redirecioneaz i apelurile i mesajele text. Numr de telefon cel pe care dorii s v fie redirecionate mesajele i/sau apelurile (nu trebuie s coincid neaprat cu numrul de pe care trimitei mesajul cheie i poate lipsi pentru tipul 0). De exemplu: #rdr 12345 0 acest mesaj cheie dezactiveaz orice redirecionare anterioar; #rdr 12345 1 0766888999 redirecioneaz toate apelurile ctre numrul specificat. Dup cum am spus mai sus, un lucru esenial nainte de a realiza orice redirecionare este s schimbm parola. Mai exist ns i alte configurri ce trebuiesc fcute, n funcie de zona pe glob i operatorul de telefonie mobil.
Figura 4.1.5 Figura 4.1.6 27
Setarea implicit funcioneaz pentru continentele Europa, Africa i Australia. Se poate comuta pe alte coduri predefinite (pentru America de Nord sau operatorul Sprint Nextel) accesnd din meniul de setri Activation and deactivation codes (Figura 4.1.6). Dac ns codurile operatorului de telefonie mobil nu se regsesc printre cele predefinite, se va selecta opiunea Custom i se vor completa manual n cmpurile de dedesubt ce vor deveni editabile: prefixul i sufixul codului de activare i codul de dezactivare (Figura 4.1.7). Ultima parte a setrilor (ca importan) se leag de notificarea utilizatorului n diferite situaii. Astfel, dac acesta dorete s primeasc o confirmare cum c redirecionarea a fost activat cu succes pe numrul ales trebuie s bifeze csua din dreptul elementului Confirm Activation. Odat aleas aceast opiune devine accesibil o a doua, util n momentul n care numrul de pe care se trimite mesajul cheie nu este acelai cu cel ales pentru redirecionare. Putei deci opta ca sms-ul de confirmare s se trimit pe numrul care a iniiat mesajul cheie sau pe numrul pe care va funciona redirecionarea. Meniul de setri din care se fac toate ajustrile de care am vorbit pn acum se poate accesa din colul din dreapta sus al ferestrei principale (pictograma cu cheie); pictograma cu semnul ntrebrii deschide help-ul, loc unde este prezentat sumar modul de utilizare a aplicaiei. Detaliile cu privire la copyright se gsesc n meniul de setri, la ultimul element al listei numit Licenses. Sistemul de operare Android are implementat un meniu de notificri care poate fi declanat glisnd degetul pe ecranul dispozitivului de sus n jos. Aici se pot gsi Figura 4.1.7 28
apelurile ratate, mesajele i e-mailurile necitite sau orice alte nouti furnizate de aplicaiile instalate ce au permisiunea de a trimite notificri push. Atunci cnd serviciul de redirecionare este activ, n lista de notificri apare un element ce afieaz sumar starea aplicaiei i permite dezactivarea (Figura 4.1.8 sms- urile sunt redirecionate ctre numrul 222).
4.2 Platforma Android Dup cum am explicat pe scurt i n capitolul 2, am ales Android-ul ca sistem de operare suport pentru proof of concept-ul meu ntruct este cel mai customizabil, puin restrictiv i nu n ultimul rnd gratuit aici m refer la taxa de a publica aplicaii pe market-ul nativ al platformei. iOS-ul de exemplu (sistemul de operare folosit de dispozitivele produse de Apple), din motive ce in de securitatea clienilor multe numere cu supratax au un format asemntor cu numrul special ce trebuie apelat pentru redirecionarea convorbirilor Figura 4.1.8 29
nu permite ca un astfel de eveniment s se produc automat, chiar dac utilizatorul a dat n prealabil aplicaiei permisiunea de a iniia automat apeluri. Android este un sistem de operare din familia Unix, bazat pe kernel-ul Linux, cu o interfa utilizator bazat pe manipulare direct, proiectat n primul rnd pentru dispozitive mobile cu ecran tactil (touchscreen), folosind input-uri de tip atingere, ce corespund vag la aciuni din viaa real, alturi de o tastatur virtual. Un aspect foarte important legat de Android l constituie faptul c are codul surs publicat de ctre Google sub licene open-source. Acest lucru a format o comunitate activ de dezvoltatori i entuziati ce folosesc codul surs al proiectului AOSP (Android Open Source Project) pentru a dezvolta i distribui propriile versiuni modificate ale sistemului de operare. Acestea aduc deseori funcionaliti noi i actualizri pentru dispozitive mai repede dect productorul oficial sau operatorul de telefonie mobil, totui, fr a garanta funcionarea la parametri optimi. De asemenea, comunitatea ofer suport continuu pentru dispozitivele mai vechi ce nu mai primesc actualizri oficiale i ajut utilizatorii neexperimentai sa porteze Android pe dispozitive ce oficial ruleaz alte sisteme de operare. Versiunile lansate de comunitate sunt de cele mai multe ori pre- rooted i conin modificri inadecvate pentru utilizatorii neiniiai n acest domeniu, cum ar fi capacitatea de supraturare sau subturare a procesorului. CyanogenMod este versiunea comunitar cea mai popular i st la baza majoritii celorlalte. De-a lungul timpului, productorii de dispozitive i operatorii de telefonie mobil au descurajat orice tentativ de dezvoltare de versiuni paralele a sistemului de operare de ctre o ter parte. Productorii i exprim ngrijorarea cu privire la funcionarea necorespuztoare a dispozitivelor ce ruleaz astfel de versiuni neoficiale i costurile de asisten ce rezult din acest motiv. Mai mult dect att, firmware-urile modificate ofer de multe ori funcionaliti precum tethering-ul, pentru care operatorii ar percepe un tarif suplimentar. De aceea, multe dispozitive au acces restricionat la permisiunile de root (admin) sau bootloader-ul blocat. Chiar i aa, cum versiunile dezvoltate de comunitate au devenit tot mai populare iar n S.U.A. a fost dat chiar o lege n acest sens (devenind legale), productorii au luat poziii din ce n ce mai puin radicale, ajungnd la ora actual s sprijine dezvoltarea lor. Ca urmare a acestui fapt, un numr tot mai mare de dispozitive sunt livrate deblocate, pentru a scpa utilizatorul de ocolirea tuturor restriciilor hardware n cazul n care acesta opteaz pentru instalarea unei versiuni neoficiale (totui, n 90% dintre cazuri, procednd astfel, se pierde 30
garania). Dei productorii au o atitudine tot mai deschis, muli operatori de telefonie comand nc dispozitive blocate, pentru a se asigura de fidelitatea clienilor lor [13].
n partea de sus a kernel-ului Linux se gsesc: middleware-ul, librrii i API-uri scrise n C i soft-ul ce ruleaz ntr-un cadru de aplicaie ce include librrii compatibile Java bazate pe Apache Harmony. Android ruleaz n maina virtual Dalvik; de la versiunea 4.4, este suportat o nou main virtual experimental, ART, care nu este ns activat n mod implicit. Librria standard de C a Android-ului, Bionic, a fost dezvoltat special de Google, ca o derivare a librriei BSD. Bionic conine o suit major de funcionaliti noi, specifice kernel-ului Linux, aflndu-se n prezent ntr-o continu dezvoltare (independent de alte baze de cod surs Android). Principalele avantaje ale folosirii librriei Bionic n locul GNU C (glibc) sunt: modelul diferit de liceniere, diminuarea Figura 4.2.1 Software Stack 31
spaiului ocupat la executare i optimizarea pentru procesoare cu frecvene sczute. Cu scopul de a obine un model de liceniere ct mai adecvat, spre sfritul anului 2012, Google a scrimbat stiva Bluetooth din BlueZ (aflat sub licen GPL) n BlueDroid (licen Apache). Android nu are un sistem nativ de ferestre X n mod implicit, nici nu suport un set complet de librrii standard GNU. Acest lucru a fcut dificil portarea aplicaiilor Linux existentem, pn la versiunea R5 a NDK-ului (Android Native Development Kit) ce furnizeaz suport pentru aplicaii scris n ntregime n C sau C++. Librriile scrise n C pot fi i ele folosite n aplicaii scrise n Java prin injectarea unei mini-librrii (shim) Java i utilizarea JNI-ului (Java Native Interface) [14]. Pentru a putea trece la detaliile de implementare, trebuie s explicm mai nti cteva concepte specifice platformei: 1. Intents & Intent Filters Un intent este un obiect de mesagerie ce poate fi folosit pentru a solicita o aciune din alt component a aplicaiei. Dei intent-urile faciliteaz comunicarea ntre componente n diferite moduri, putem separa trei cazuri de utilizare fundamentale: o Declanarea unei activiti O activitate reprezint un singur ecran al aplicaiei. Putei ncepe o nou instan a unei activiti pasnd un intent ca parametru funciei startActivity(). Acesta descrie activitatea ce urmeaz s porneasc i conine toate datele necesare. Dac dorii s primii un rezultat n momentul n care activitatea se termin, trebuie s apelai metoda startActivityForResult(). Activitatea dumneavoastr va primi rezultatul sub forma unui intent separat, n cadrul callback-ului onActivityResult(). o Declanarea unui serviciu Un serviciu este o component care efectueaz operaiuni n fundal, fr a avea nevoie de o interfa utilizator. Putei porni un serviciu pentru a efectua o operaiune o singur dat (cum ar fi descrcarea unui fiier), pasnd un intent 32
metodei startService(). Acesta descrie serviciul ce urmeaz s porneasc i conine toate datele necesare. n cazul n care serviciul este proiectat cu o interfa client server, v putei lega la serviciu din alt component a aplicaiei pasnd un intent funciei bindService(). o Transmiterea unui broadcast Un broadcast reprezint un mesaj ce poate fi primit de orice aplicaie. Sistemul transmite astfel de mesaje pentru diverse evenimente, cum ar fi atunci cnd sistemul pornete sau cnd dispozitivul ncepe s se ncarce. Utilizatorul poate trimite i el mesaje de tip broadcast ctre alte aplicaii pasnd un intent ctre una din urmtoarele trei metode: sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast(). Din punct de vedere al specificitii, putem de asemenea deosebi dou tipuri de intent- uri: Explicite specific numele componentei ce trebuie s porneasc (mai exact numele complet al clasei). Vei folosi de obicei un intent explicit pentru a porni o activitate sau un serviciu din cadrul propriei aplicaii, deoarece cunoatei numele clasei componentei respective. De exemplu, declanai o nou activitate ca rspuns la o aciune efectuat de utilizator sau pornii un serviciu pentru a descrca un fiier n fundal. Implicite nu denumesc o component specific ns declar o aciune general, ceea ce permite unei componente din alt aplicaie s o efectueze. De exemplu, dac dorii s artai utilizatorului o locaie pe hart, putei utiliza un intent implicit pentru a solicita ca o alt aplicaie capabil s fac acest lucru. Atunci cnd creai un intent explicit pentru a porni o activitate sau un serviciu, sistemul lanseaz imediat componenta specificat. n cazul unui intent implicit, sistemul caut cea mai potrivit component prin compararea coninutului acestuia cu filtrele de intenie (intent filters) declarate n fiierele manifest ale altor aplicaii instalate pe dispozitiv. Dac sistemul gsete o singur potrivire, lanseaz imediat componenta. Altfel, afieaz o fereastr (de tip dialog) prin care utilizatorul poate alege ce aplicaie s fie utilizat. 33
Schema din figura 4.2.2 ilustreaz cum este pasat un intent implicit prin intermediul sistemului pentru a ncepe o nou activitate. Aadar, activitatea A creaz un intent ce conine o descriere a aciunii de efectuat i l paseaz metodei startActivity(). Sistemul caut n toate aplicaiile un intent filter potrivit pentru intent-ul primit. Atunci cnd gsete o potrivire, sistemul pornete acea activitate (n cazul nostru, activitatea B) prin invocarea metodei onCreate() creia i paseaz intent-ul. Un intent filter este o expresie aflat n fiierul manifest al aplicaiei ce specific tipurile de intent-uri pe care componenta accept s le primeasc. De exemplu, prin declararea unui intent filter pentru o activitate, devine posibil ca aceasta s fie deschis de ctre alte aplicaii prin intermediul unui anumit intent. De asemenea, dac nu este declarat niciun filtru pentru o activitate, atunci ea poate fi pornit doar explicit. Din motive de securitate, este recomandat ca pornirea serviciilor s fie facut printr-un intent explicit, fr a declara filtre. Folosind un intent implicit, nu poi fi sigur cine l va prelua, iar utilizatorul nu poate vedea ce serviciu pornete [15]. 2. Broadcast receivers BroadcastReceiver reprezint clasa de baz folosit pentru recepionarea intent-urilor trimise de metoda sendBroadcast(). Putei nregistra dinamic o instan a acestei clase apelnd Context.registerReceiver() sau putei implementa static n fiierul AndroidManifest.xml, folosind tag-ul <receiver>. Figura 4.2.2 34
Extist dou tipuri de broadcast-uri ce pot fi recepionate: Normale trimise cu Context.sendBroadcast() sunt complet asincrone. Toi receptorii funcioneaz ntr-o ordine nedefinit, deseori n acelai timp. Este modul cel mai eficient, dar receptorii nu pot folosi rezultatele sau codul de retur al API-ului. Ordonate trimise cu Context.sendOrderedBroadcast() sunt transmise fiecrui receptor pe rnd. Pe msur ce fiecare receptor i termin task-ul, poate propaga rezultatul spre urmtorul receptor sau poate abandona definitiv recepia. Receptorii pot fi ordonai prin atributul android:priority aparinnd intent filter- ului potrivit; receptorii cu aceeai prioritate vor rula n ordine aleatoare. Chiar i in cazul transmisiilor normale, sistemul poate hotr n unele situaii s transmit fiecrui receptor pe rnd. Mai exact, n cazul receptorilor ce necesit crearea unui proces, doar unul va fi deservit la un moment dat, pentru a evita suprancrcarea sistemului cu procese noi. Chiar i aa, proprietile semantice ale transmisiilor neordonate se pstreaz: receptorii nu pot returna rezultate sau abandona recepia. De reinut este faptul c, dei clasa Intent este folosit pentru transmiterea i recepionarea acestor broadcast-uri, mecanismul folosit aici este complet diferit de cel utilizat la pornirea activitilor. Sub nicio form, un BroadcastReceiver nu va putea vedea sau capta un intent iniiat prin metoda Context.startActivity(); de asemenea, un intent difuzat broadcast, nu va putea nicioadat s declaneze o activitate. Aceste dou operaii sunt foarte diferite una de cealalt la nivel semantic: pornirea unei activiti prin intermediul unui intent este o operaiune de prim-plan (foreground), ce modific interfaa cu care utilizatorul interacioneaz n acel moment, n timp ce difuzarea unui intent este o operaiune de fundal (background), de care n mod normal utilizatorul nu este contient. Dac nu este nevoie s transmitei mesaje broadcast ntre aplicaii, este recomandat folosirea clasei LocalBroadcastManager n locul metodelor mult mai generale amintite mai sus. Acest lucru ajut la o implementare mult mai eficient, neavnd nevoie de comunicare ntre procese, i v permite s evitai eventualele problemele de securitate vis-a-vis de alte aplicaii capabile de transmiterea i recepionarea broadcast-urilor. Observaie: n cazul nregistrrii unui receptor n implementarea metodei Activity.onResume(), el trebuie anulat n cadrul metodei Activity.onPause(); ntruct 35
oricum nu se vor recepiona intent-uri dac aplicaia este inactiv, acest lucru va reduce ncrcarea inutil a sistemului. Nu este recomandat ca anularea receptorului s se fac n interiorul funciei Activity.onSaveInstanceState(), deoarece, n cazul n care utilizatorul manipuleaz stiva n care este reinut istoricul (history stack), aceasta nu va mai fi apelat. Receptorii sunt, prin natura lor, o funcionalitate conceput pentru comunicarea ntre aplicaii. Trebuie astfel avut grij la modul n care alte aplicaii ar putea specula folosirea lor: Namespace-ul Intent este global; astfel, numele aciunilor acestuia i restul stringurilor trebuie scrise ntr-un namespace propriu, pentru a nu intra n coflict cu alte aplicaii; Cnd metoda registerReceiver(BroadcastReceiver, IntentFilter) este utilizat, orice aplicaie poate transmite ctre acest receptor. Pentru a impune o permisiune de trimitere, trebuie s furnizai un parametru nenul (not null) metodei sendBroadcast(Intent,String) sau metodei sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle). Doar receptorii crora le- au fost garantate aceste permisiuni (prin tag-ul <uses-permission> n fiierul Manifest.xml) vor fi capabili s recepioneze broadcast-ul. n sens invers, pentru a impune o permisiune la primire, trebuie s furnizai un parametru nenul n momentul nregistrarii receptorului, fie prin metoda registerReceiver(BroadcastReceiver, IntentFilter) sau, static, declarndu-l n Manifest.xml. Analog, doar broadcast-urile cu permisiuni pot trimite un intent ctre receptor. Cnd un receptor este publicat n manifest-ul aplicaiei i sunt specificate filtre de intenie pentru el, orice alt aplicaie i poate trimite broadcast-uri, indiferent de filtrele specificate. Pentru a preveni acest lucru, receptorul poate fi setat ca indisponibil pentru aplicaii exterioare prin android:exported = "false". Cnd este utilizat metoda sendBroadcast(Intent), n mod normal, orice alt aplicaie n afar de cea curent poate primi aceste emisii. Putei totui controla exact cine s recepioneze, prin setarea permisiunilor, aa cum am explicat puin mai sus. ncepnd cu versiunea Android 4.0 (Ice Cream Sandwich), restricionarea emisiei pentru o singur aplicaiei se poate face i prin Intent.setPackage. 36
Niciuna dintre aceste probleme nu apar dac este folosit LocalBroadcastManager-ul, deoarece intent-urile nu prsesc niciodat procesul curent. Durata de via a unui receptor un obiect de tip BroadcastReceiver este valabil doar pe durata apelului metodei onReceive(Context, Intent). Odat ce se iese din funcie, sistemul consider ca obiectul nu mai este activ. Acest lucru are repercursiuni importante la nivelul implementrii metodei onReceive: orice necesit operaii asincrone nu este disponibil, deoarece pentru acest lucru este necesar ieirea din funcie iar la acel punct BroadcastReceiver-ul nu mai este activ i, astfel, sistemul este liber s termine procesele nainte ca operaia asincron s se fi ncheiat. n particular, nu e recomandat s deschizi ferestre de tip dialog sau s te legi la servicii din cadrul unui BroadcastReceiver. Ca i alternativ, pentru dialog poate fi folosit NotificationManager-ul iar pentru pornirea serviciului comanda Context.startService(). Durata de via a unui proces un proces ce n momentul de fa execut un BroadcastReceiver (ruleaz codul din interiorul metodei onReceive(Context, Intent)) este considerat a fi proces de prim-plan si este meninut prioritar de ctre sistem cu excepia cazurilor extreme de lips de memorie. Odat ce metoda onReceive() se termin de executat, BroadcastReceiver-ul devine inactiv iar procesul ce l gzduiete devine la fel de important ca celelalte componente ale aplicaiei (adic i scade prioritatea). Acest lucru este deosebit de important deoarece dac procesul a gzduit doar un BroadcastReceiver (caz des ntalnit mai ales pentru aplicaiile ce ruleaz n fundal i cu care utilizatorul nu a interacionat recent), atunci la terminarea execuiei funciei onReceive() sistemul va considera procesul ca fiind gol i l va inchide. Astfel, pentru operaiunile de lung durat, se va folosi un serviciu ce nglobeaz i un BroadcastReceiver pentru a menine procesul activ pn ce operaiunea este finalizat [16]. 3. Shared Preferences Sistemul de operare Android ofer dezvoltatorilor mai multe opiuni pentru persistena datelor, n funcie de nevoile specifice: - Shared Preferences: stocheaz tipuri de date primitive (private) ntr-un dicionar de tip cheie-valoare; - Internal Storage: stocheaz date private n memoria dispozitivului; - External Storage: stocheaz date publice ntr-un spaiu extern comun; 37
- SQLite Databases: stocheaz date structurate ntr-o baz de date privat; - Network Connection: stocheaz datele online pe serverul dumneavoastr. Mai mult dect att, Android-ul furnizeaz o modalitatate prin care putei partaja chiar i datele private cu celelalte aplicaii, i anume un furnizor de coninut (content provider). Acesta este o component opional ce permite accesul (citire/scriere) la datele aplicaiei, n funcie de restriciile pe care le impunei [17]. ntorcndu-ne la Shared Preferences, aceasta este o clas ce v permite s salvai i mai apoi s preluai tipuri de date primitive (boolean, int, long, float i string) sub forma unor perechi de tip cheie-valoare. Aceste date vor persista i dac aplicaia crap. Pentru a obine un astfel de obiect, se poate folosi una dintre metodele: - getSharedPreferences() dac avei nevoie de mai multe fiiere de preferine, identificate printr-un nume pe care il specificai prin primul parametru; - getPreferences() dac avei nevoie doar de un fiier per activitate. Pentru a scrie valori, sunt necesari urmatorii pai: - obinei un obiect de tipul SharedPreferences.Editor prin apelarea metodei edit(); - adugai valori prin metodele corespunztoare tipului de date folosit, cum ar fi putBoolean() sau putString(); - comitei noile valori apelnd metoda commit(). Pentru a citi valori, se folosesc tot metode corespunztoare tipului de date vizat de exemplu getFloat() sau getLong() [18].
4.3 Detalii de implementare Acum c principalele concepte folosite n implementare au fost acoperite, putem explica mai amnunit cum anume funcioneaz aplicaia. Am insistat n partea teoretic ce viza descrierea platformei pe obiectele specifice Intent, IntentFilter i BroadcastReceiver ntruct, dup cum vei observa n cele ce urmeaz, sunt principalele instrumente utilizate. 38
Principala funcionalitate a acestei aplicaii este puin atipic, ntruct se realizeaz de la distan, fr ca utilizatorul s interacioneze direct cu dispozitivul su Android. Desigur, aceeai funcionalitate este disponibil i local, dar scenariul n care utilizatorul ar avea nevoie de ea nu este foarte plauzibil. De asemenea, la nivel de implementare, acest caz nu este ctui de puin spectaculos. Exist n activitatea principal obiecte de interfa ce faciliteaz alegerea numrului de telefon n vederea redirecionrii precum i tipul acesteia: la apsarea butonului Pick Number, printr-un intent este deschis o list de contacte iar pentru selectarea tipului este folosit un Spinner, ce conine cele 3 valori standard: Calls, SMS & Both. n cazul redirecionrii la distan, lucrurile se complic. n fiierul manifest este nregistrat un BroadcastReceiver ce ascult toate mesajele primite de dispozitiv i altul pentru funcionalitatea de dezactivare din cadrul notificrilor. Primul, n cadrul funciei onReceive(Context, Intent), parseaz mesajul tocmai primit verificnd dac este de tip KTM (Key Text Message), cu alte cuvinte, dac respect protocolul uzitat de aplicaie (ncepe cu #rdr, conine parola corect, tipul, etc.) i notific emitorul dup caz: Mesaj recepionat Rspuns dup parsare Observaii Hello... 0766888999 Hello... sms oarecare presupunnd c serviciul de redirecionare pentru mesaje text este deja pornit, sms-ul se retrimite dup ce se concateneaz la nceput numrul emitorului; dac serviciul e oprit, nu se ntmpl nimic; #rdr 12345 1 0766888999 Parol greit!!! presupunem c parola utilizatorului este diferit de 12345, cea implicit; #rdr 1 12345 0766888999 Mesaj cheie gresit!!! Structura corecta a mesajului este: #rdr Parola Tip [Numar de telefon] unde tipul trebuie sa fie 0, 1, 2 or 3. mesajul are structura aproape corect, cu excepia faptului c specificarea tipului i a parolei apar n ordine invers; #rdr 12345 1 0766888999 Redirecionarea apelurilor a fost activat cu succes! sau n acest caz, presupunem c parola corect este 12345; cel de-al doilea mesaj este pentru 39
Activarea redirecionrii apelurilor nu s-a putut realiza! momentele n care redirecionarea este refuzat de operator (foarte rar, ns este vital ca utilizatorul s tie dac serviciul a fost sau nu activat cu succes); #rdr 12345 2 0766888999 Redirecionarea mesajelor a fost activat cu succes! aceeai prezumie vis-a-vis de parol; spre deosebire de cazul anterior, redirecionarea se face prin retrimiterea manual a mesajelor (ntruct operatorul nu permite acest lucru automat) i deci nu exist caz de eroare; #rdr 12345 3 0766888999 Redirecionarea apelurilor i a mesajelor a fost activat cu succes! sau Activarea redirecionrii apelurilor nu s-a putut realiza! n caz de eroare la ncercarea de redirecionare a apelurilor sistemul permite totui ca pentru mesaje serviciul s funcioneze n continuare (care dup cum am spus, nu depinde de operator); #rdr 12345 0 Toate redirecionrile au fost dezactivate cu succes! sau Dezactivarea redirecionrii apelurilor nu s-a putut realiza! i aici, de asemenea, singura problem ce poate aprea este legat de apeluri. Observaie: n cazul unui cod de eroare primit de la operator la ncercarea de a activa sau dezactiva redirecionarea apelurilor, sistemul va repeta operaiunea de 3 ori; dac i dup aceste rencercri rezultatul este tot negativ, utilizatorul va fi notificat corespunztor. Pentru fiecare deznodmnt posibil (activare reuit/nereuit sau dezactivare reuit/nereuit), clasa ServiceState nregistreaz cte un BroadcastReceiver ce reacioneaz corespunztor. De exemplu, n cazul n care activarea redirecionrii apelurilor reuete, funcia onReceive() din cadrul receptorului va face, n ordine, urmtorii pai: 40
- seteaz n SharedPreferences 3 cmpuri i anume REDIRECT_NUMBER (numrul spre care se face redirecionarea), CALL_REDIRECT_ACTIVE (true, ntruct activarea a fost ncheiat cu succes) i REDIRECT_ACTIVE (true, de asemenea); - verific dac redirecionarea a fost fcut de la distan i, n caz afirmativ, trimite un sms de ntiinare utilizatorului; - afieaz n lista de notificri un element ce descrie sumar starea aplicaiei i permite dezactivarea serviciului. Activitatea de setri extinde clasa PreferenceActivity, disponibil odat cu versiunea 3.0, Honeycomb iar configurrile sunt salvate tot n SharedPreferences. Ce merit amintit aici este felul n care lista de setri se modific dinamic n timpul interaciunii cu utilizatorul. Anumite setri nu au sens dect n cascad, adic depind de cele precedente. De exemplu, n cazul codurilor de activare i dezactivare, dac este aleas o variant standard (s zicem cea pentru Europa, Australia i Africa), EditText-urile responsabile pentru setarea acestora devin ReadOnly. Dac RadioButton-ul este comutat pe modul personalizat, cmpurile devin din nou active. De asemenea, tot n meniul de setri, se poate opta printr-un CheckBox dac se doresc sau nu mesaje de confirmare dup ce serviciul a fost activat. Dac se doresc, se poate alege de dedesubt, prin intermediul unui RadioButton, dac destinatarul mesajului de confirmare s fie expeditorul mesajului cheie sau cel pe telefonul cruia se face redirecionarea (de cele mai multe ori aceste dou numere coincid). De notat este ns faptul c, dac utilizatorul nu dorete s i fie confirmat activarea, alegerea destinatarului este de prisos, elementul de interfa trebuind inactivat. n momentul n care aceste elemente devin active/inactive n timp real, n funcie de modul n care utilizatorul interacioneaz cu interfaa (n cazul de fa configurnd setrile), se formeaz practic o ierarhie de coninut ce sporete intuitivitatea aplicaiei.
41
Capitolul 5 Concluzii i posibiliti de extindere
n cadrul capitolului 3 al acestei lucrri au fost descrise pe larg cele mai utilizate mijloace actuale de interaciune ntre dispozitivele mobile. Le vom compara n cele ce urmeaz, lsnd ns la o parte SMS-urile deoarece sunt puin aparte, depinznd de existena unui operator GSM. Filtru Infrarou Bluetooth WiFi Numrul maxim de dispozitive ce ce pot comunica simultan ntre ele 2 2 n mod normal, ~40, dar exist i puncte de acces speciale ce suport pn la 200 clieni Viteza maxim teoretic de transfer 4 Mbps 24 Mbps 1 Gbps (standardul 802.11ac) Raz maxim toeretic de acoperire 5 m 10 m, n cazul modulelor cu care sunt echipate dispozitivele mobile (exist ns module mai performante ce acoper pn la 100 m) 32 m, de asemenea, n cazul antenelor de pe dispozitivele mobile (majoritatea punctelor de acces acoper ~100m, iar cele long range cteva sute de km) Pre aproximativ per modul ~$3 ~$10 ~$15 Lungime de und 700 nm 1 mm ~12.5 cm ~12.5 cm Frecven 430 THz
300 GHz 2.4 2.485 GHz 2.4 GHz and 5 GHz 42
Dup cum reiese din tabel, nu exist niciun motiv pentru care comunicarea prin infrarou s mai fie folosit, fiind surclasat la toate capitolele (mai puin la pre, dar diferena e irelevant). Tocmai de aceea, noile generaii de dispozitive mobile nu mai dispun de module infrarou, tehnologiile Bluetooth i WiFi fiind suficiente. La o prim vedere, ar prea c i tehnologia Bluetooth este depit, ns, ceea ce nu reiese din tabel este faptul c aceasta consum de aproximativ 8 ori mai puin baterie dect tehnologia WiFi [2]. Bluetooth-ul este util atunci cnd dispozitivele ce fac schimb de date se afl la o distan relativ apropiat unul de cellalt iar viteza nu reprezint o problem deoarece datele partajate sunt de dimensiuni mici de exemplu transferarea sunetului de la telefon la handsfree sau a biilor de la tastatur i mouse spre staie. WiFi-ul este mai potrivit pentru operarea reelelor deoarece ofer o conexiune mai rapid, o raz de acoperire mai mare i, nu n ultimul rnd, este mai bine securizat (dac este corect configurat) n comparaie cu Bluetooth-ul. Posibiliti de extindere Departe de a fi o aplicaie complex, din punctul meu de vedere Remote Redirect este o aplicaie complet; m refer la faptul c, pn n momentul de fa, nu am avut nicio idee de funcionalitate pe care s o mai adaug. Singurul lucru ce ar mai putea fi redirectat sunt mesajele multimedia (MMS), prea puin folosite ns (doar 0.015% din totalul de mesaje trimise sunt multimedia, restul text). Din punctul de vedere al monetizrii, n momentul actual, aplicaia este prezent pe Google Play Store n dou versiuni: gratuit, cu reclame i premium, fr. Nu exist ns nicio diferen ntre ele la nivel de funcionaliti. ntr-un update viitor, vreau s limitez numrul redirectrilor n versiunea gratuit pentru a constrnge utilizatorul s treac la cea premium la un moment dat. Aplicaia este disponibil n limbile romn i englez, adaptndu-se automat dup limbajul telefonului. Pe viitor se dorete adaugarea suportului pentru nc dou limbi, cel mai probabil francez i german. Principalul obiectiv este ns portarea pe celelalte platforme mobile. Dup cum am explicat n capitolul 2, iOS-ul, din motive ce in de securitatea clienilor, nu permite ca 43
telefonul s iniieze automat apeluri , chiar dac utilizatorul a dat n prealabil aplicaiei aceast permisiune (deoarece multe numere cu supratax ncep cu caracterul *, acesta fiind primul caracter al prefixului de redirectare). Aadar, dintre cele importante, rmn platformele BlackBerry, Windows Phone i, eventual, Firefox OS. Nu n ultimul rnd, se dorete realizarea unei cercetri mai profunde cu privire la codurile (prefixele i sufixele) de redirectare n funcie de zon i operator, pentru a putea fi setate automat de aplicaie, dup ce i se d permisiunea de a localiza telefonul; momentan, acest lucru trebuie configurat manual din setri, mai puin pentru Europa, Australia i Africa unde funcioneaz setrile implicite.
44
Capitolul 6 Referine bibliografice
[1] 3 rd Generation Partnership Project 2 3GPP2 Short Message Service http://www.3gpp2.org/public_html/specs/cs0015-0.pdf [2] Rahul Balani Energy Consumption Analysis for Bluetooth, WiFi and Cellular Networks http://www.nesl.ee.ucla.edu/fw/documents/reports/2007/PowerAnalysis.pdf [3] Andrew S. Tanenbaum Reele de calculatoare. Editura Byblos, 2003 [4] Jonathan Katz and Yehuda Lindell Introduction to Modern Cryptography: Principles and Protocols (Chapman & Hall/CRC Cryptography and Network Security Series) [5] *** Coduri generice GSM http://www.ubique.ro/gsm.html [6] *** Formatul PDU al SMS-urilor http://www.subnets.ru/saved/sms_pdu_format.html [7] *** Tehnologia Bluetooth http://www.bluetooth.com/ [8] *** Securitatea Bluetooth http://electronics.howstuffworks.com/bluetooth4.htm [9] *** Diferena ntre versiunile de Bluetooth http://www.bluetoothreport.com/bluetooth-versions-comparison-whats-the-difference- between-the-versions/ 45
[10] *** Tehnologia bazat pe infrarou https://learn.sparkfun.com/tutorials/ir-communication/all [11] *** Tehnologia Wi-Fi https://www.wi-fi.org [12] *** Modurile de operare ale tehnologiei Wi-Fi http://en.kioskea.net/contents/804-wifi-modes-of-operation-802-11-or-wi-fi [13] *** Sistemul de operare Android http://www.android.com [14] *** Documentaia Android http://developer.android.com/index.html [15] *** Android: Intents and Intent Filters http://developer.android.com/guide/components/intents-filters.html [16] *** Android: Broadcast Receivers http://developer.android.com/reference/android/content/BroadcastReceiver.html [17] *** Android: Data Storage http://developer.android.com/guide/topics/data/data-storage.html [18] *** Android: Shared Preferences http://developer.android.com/reference/android/content/SharedPreferences.html