Programul de studii: Sisteme Avansate în Automatică și Tehnologii Informatice [309407]

Departamentul Automatică și Tehnologia Informației

Programul de studii: [anonimizat]:

Șef Lucr. dr. ing. DEMETER Robert

Brașov 2020

Departamentul Automatică și Tehnologia Informației

Programul de studii: [anonimizat] –

Aplicație Android pentru controlul calculatorului de la distanță

Conducător științific:

Șef Lucr. dr. ing. DEMETER Robert

Brașov 2020

[anonimizat] 4

Lista de acronime 7

1 Introducere 8

2 Dezvoltarea aplicațiilor pentru sistemul de operare Android 12

2.1 Sistemul de operare Android 12

2.2 Arhitectura sistemului de operare Android 13

2.3 Principalele componente ale unei aplicații Android 15

2.3.1 Activitățile 15

2.3.2 Intențiile și receptorii de transmisie 17

2.3.3 Serviciile 19

2.3.4 Furnizorii de conținut 21

2.4 Modul de dezvoltare al aplicațiilor Android utilizând mediul de dezvoltare Android Studio 22

3 [anonimizat] 24

3.1 Dezvoltarea clientului ADMote Control 25

3.2 Dezvoltarea serverului ADMote Control 67

3.3 [anonimizat] 72

3.4 Lansarea aplicației ADMote Control pe platforma Google Play 81

3.5 Realizarea mentenanței și date statistice referitoare la aplicație 85

4 Concluzie 97

Bibliografie 99

Rezumat 101

Abstract 102

[anonimizat] 1. Arhitectura sistemului de operare Android.

Figura 2. Ciclul de viață al unei activități.

Figura 3. Modul de colaborare dintre sistemul Android și receptorii de transmisie.

Figura 4. Modul de livrare al intenției implicite.

Figura 5. Ciclul de viață al unui serviciu.

Figura 6. Relațiile dintre furnizorii de conținut și alte componente ale unei aplicații Android.

Figura 7. WelcomeActivity – Activitatea de prezentare a principalelor caracteristici disponibile.

Figura 8. MainActivity – Design-ul principalei activități în cadrul versiunii precedente a aplicației.

Figura 9. MainActivity – [anonimizat].

Figura 10. MainActivity – Design-ul principalei activități în cadrul versiunii actuale a aplicației.

Figura 11. Funcția de comenzi vocale. Comandă vocală nefuncțională. Exemplu.

Figura 12. Bara de navigare în cadrul versiunii curente a aplicației.

Figura 13. [anonimizat].

Figura 14. [anonimizat]. [anonimizat].

Figura 15. Fragmentul de conectare prin utilizarea tehnologiei Bluetooth. Afișarea mesajului de confirmare.

Figura 16. Funcția de conectare utilizând tehnologia Bluetooth. Eroare la conectare.

Figura 17. [anonimizat]-ului.

Figura 18. Interfața grafică a funcției de control a tastaturii. Versiunea actuală a aplicației.

Figura 19. Interfața grafică a funcției de control a mediilor de redare. Versiunea precedentă a aplicației.

Figura 20. Meniul asociat funcțiilor de control al mediilor de redare.

Figura 21. Layout-ul asociat mediilor de redare Netflix și HBO GO.

Figura 22. Layout-urile asociate funcțiilor de control al prezentărilor PowerPoint și al statusului calculatorului.

Figura 23. Layout-ul asociat funcției de control a prezentărilor realizate cu ajutorul serviciului Google Slides.

Figura 24. Layout-ul asociat meniului de prezentare și selectare a funcțiilor de control.

Figura 25. Layout-urile alternative asociate fragmentului de setări al aplicației.

Figura 26. Structura string-urilor din interiorul unui fișier “strings.xml”.

Figura 27. Fișierul “strings.xml” asociat celor 14 limbi disponibile în cadrul aplicației.

Figura 28. Fragmentul asociat setărilor aplicației și fragmentul asociat informațiilor despre aplicație.

Figura 29. Aplicația server în două stadii diferite – Deconectat și Conectat.

Figura 30. Aplicația server asociată conexiunii prin utilizarea tehnologiei Bluetooth,

Figura 31. Meniul principal al site-ului asociat aplicației ADMote Control.

Figura 32. Secțiunea “Acasă” a paginii principale a website-ului.

Figura 33. Secțiunea “Caracteristici” a paginii principale a website-ului.

Figura 34. Secțiunea “Telecomenzi” a paginii principale a website-ului.

Figura 35. Categoria “Toate Telecomenzile” a paginii prin care sunt prezentate telecomenzile disponibile.

Figura 36. Secțiunea “Cum funcționează?” a paginii principale a website-ului.

Figura 37. Categoria “Noțiuni de bază” a paginii de ajutor a aplicației ADMote Control.

Figura 38. Secțiunea “Descarcă” a paginii principale a website-ului.

Figura 39. Secțiunea “Contact” a paginii principale a website-ului.

Figura 40. Consola Google Play – Introducerea datelor asociate paginii descriptive.

Figura 41. Grafic de prezentare a numărului de descărcări din primele 4 luni de existență a aplicației pe platforma Google Play.

Figura 42. Grafic de prezentare a evoluției numărului de descărcări

Figura 43. Google Firebase – Crashlytics – Procentul de utilizatori care nu au întâmpinat probleme la utilizarea aplicației.

Figura 44. Google Firebase – Crashlytics – Numărul de evenimente de tip eroare detectate în decurs de o săptămână.

Figura 45. Google Firebase – Crashlytics – Informații exacte referitoare la problemele detectate în cadrul aplicației.

Figura 46. Google Firebase – Analytics – Informații exacte referitoare la zonele de pe glob unde a fost descărcată aplicația.

Figura 47. Numele aplicației afișat pe magazinul de aplicații Google Play.

Figura 48. Descrierea scurtă și o parte din descrierea completă a aplicației.

Figura 49. Capturile de ecran prezentate pe pagina descriptivă a aplicației

Figura 50. Grafic care prezintă evoluția aplicației în ceea ce privește numărul de descărcări din ultimele 7 luni.

CODURI SURSĂ

Codul 1. Cod sursă pentru funcția de comenzi vocale.

Codul 2. Cod sursă pentru încărcarea și inițializarea cheii de securitate de tipul BKS.

Codul 3. Cod sursă pentru inițializarea conexiunii dintre client și server prin utilizarea socket-ului de tipul SSL.

Codul 4. Cod sursă pentru procesul de comunicare dintre aplicația client și server

Codul 5. Cod sursă pentru procesul de distrugere al socket-ului asociat aplicației client. Închiderea conexiunii dintre client și server.

Codul 6. Cod sursă pentru implementarea funcției de control a mișcării cursorului.

Codul 7. Cod sursă pentru simularea utilizării butoanelor de click stânga și click dreapta.

Codul 8. Cod sursă pentru transmiterea mesajelor de tipul String pentru îndeplinirea funcției de control a tastaturii.

Codul 9. Cod sursă pentru funcțiile de control realizate cu ajutorul clasei Java Robot.

Codul 10. Cod sursă pentru implementarea mesajelor utilizate în comunicare dintre aplicația client și aplicația server.

Codul 11. Cod sursă pentru încărcarea interfeței grafice de utilizator.

Codul 12. Cod sursă asociat serviciului AddThis.

Lista de acronime

3G – Third Generation;

4G – Fourth Generation;

5G – Fifth Generation;

AOSP – Android Open Source Project;

API – Application Programming Interface;

APK – Android Application Package

APP – Application;

ASO – App Store Optimization;

BKS – Bouncy Castle Keystore;

CSS – Cascading Style Sheets;

DIP – Density-Independent Pixels;

DP – Density Pixels;

DVM – Dalvik Virtual Machine;

etc – Et cetera;

FIG – Figura;

GUI – Graphic User Interface;

HTML – HyperText Markup Language ;

IPC – Inter Process Communication;

IP – Internet Protocol;

IPv4 – Internet Protocol version 4;

JKS – Java Keystore;

JVM – Java Virtual Machine;

NFC – Near-field Communication;

NPE – Null Pointer Exception;

RAM – Random Access Memory;

SEO – Search Engine Optimization;

SSL – Secure Sockets Layer;

VoIP – Voice over Internet Protocol;

Wi-Fi – Wireless Fidelity;

XML – Extensible Markup Language;

1 introducere

În zilele noastre, telefonul mobil nu mai poate fi considerat un dispozitiv pe care îl putem utiliza doar pentru apeluri și mesagerie. La începutul anilor 2000, achiziționarea și utilizarea unui telefon care poate fi ținut în buzunar reprezenta un sentiment nou și interesant. Odată cu trecerea timpului tehnologia a avansat, pe parcurs fiind dezvoltate diverse telefoane care au permis oamenilor să realizeze poze și video sau mai apoi să poată accesa internetul. Fiecare generație de telefoane a schimbat modul prin care oamenii își puteau trăi viața, astfel încât în acest moment telefoanele mobile reprezintă centre de informare și comunicare fundamentale pentru viața modernă. [1]

Un studiu realizat în anul 2016 de către compania DScout, prezintă faptul că, în medie, un om atinge ecranul telefonului mobil de 2617 ori pe zi, sau mai precis 145 de minute de utilizare zilnică a telefonului mobil. Din punctul de vedere al evoluției tehnologiei și al modului în care aceasta a fost aplicată societății din care facem parte, ultimii 10 ani pot fi etichetați ca fiind „deceniul telefoanelor inteligente”. [2]

În acest ultim deceniu, numărul dezvoltatorilor de aplicații pentru telefoanele mobile a crescut, astfel încât, în acest moment utilizatorii diferitelor tipuri de telefoane mobile pot găsi în magazinele de aplicații precum Google Play, Apple AppStore, Windows Store sau Amazon AppStore peste 5,9 milioane de aplicații. În prima parte a anului 2020, utilizatorii telefoanelor mobile cu sistemul de operare Android au putut alege între 2,56 de milioane de aplicații, Google Play devenind cel mai accesat magazin de aplicații din întreaga lume. Magazinul de aplicații al companiei Apple numit Apple AppStore a fost al doilea cel mai mare magazin de aplicații cu aproximativ 1,85 de milioane de aplicații disponibile pentru utilizatorii telefoanelor cu sistemul de operare iOS. [3]

Deși au trecut mulți ani de la momentul în care a avut loc lansarea telefonului mobil, este important faptul că și acum sentimentul de achiziționare și utilizare a unui telefon mobil a rămas interesant. Acest lucru se datorează faptului că telefonul este în acest moment un instrument care prin intermediul aplicațiilor ne poate ajuta pe noi, oamenii, să comunicăm mai eficient, să socializăm prin intermediul rețelelor de socializare, să dezvoltăm diferite business-uri prin utilizarea aplicațiilor foarte utile pentru productivitate, marketing sau comunicare, să învățăm mai eficient, și de asemenea să ne relaxăm sau să ne distrăm prin intermediul aplicațiilor din categoria de divertisment sau a diferitelor jocuri. Este adevărat faptul că, în magazinele de aplicații pot exista și anumite aplicații care nu au întotdeauna un impact pozitiv asupra utilizatorilor, dar consider că este mult mai important să observăm partea bună a evoluției tehnologiei în domeniul telefoanelor mobile.

Succesul telefoanelor mobile în ziua de astăzi se datorează în special evoluției rețelelor de telefonie mobilă, și a creșterii vitezei de internet pe mobil. În anul 2007, în momentul în care a fost lansat primul iPhone, rețelele mobile se aflau la a treia generație, bine cunoscută ca și 3G. Această generație de rețele mobile, a ajutat la creșterea unor servicii precum video-conferințele, servicii de streaming audio și video sau a serviciilor VoIP, cum ar fi Skype. Prin apariția telefoanelor inteligente, s-a simțit nevoia creșterii vitezelor de internet, deoarece dezvoltatorii de aplicații pentru aceste noi dispozitive doreau să realizeze noi aplicații care pot ajuta oamenii în diferite activități, însă erau opriți de acea lipsă a unei bune conexiuni de internet pe mobil care să permită oamenilor să utilizeze telefoanele și implicit aplicațiile fără apariția unor probleme de conectivitate. Astfel că, în anul 2009 a fost lansată cea de-a patra generație de rețele mobile cunoscută ca și 4G. Această generație de rețele mobile oferă un acces rapid la internet, astfel încât utilizatorii de telefoane mobile din întreaga lume pot vizualiza videoclipuri care prezintă o calitate de înaltă definiție sau pot realiza conferințe video și audio de cea mai bună calitate și de asemenea pot utiliza serviciile de jocuri. În acest moment se dorește implementarea celei de-a cincea generații de rețele mobile, bine cunoscută ca și 5G. Conexiunea oferită de această nouă generație de rețele mobile, promite că va transforma diferite servicii, de la activități bancare până la medicină. 5G oferă posibiltatea inovațiilor, cum ar fi operații chirurgicale de la distanță, telemedicina și chiar monitorizarea semnelor vitale de la distanță, care ar putea salva vieți. [4]

Observând această evoluție a tehnologiei în domeniul telefoanelor mobile și în special a creșterii utilizării telefoanelor cu sistemul de operare Android, am decis în urmă cu 3 ani să studiez mai în amănunt modul de dezvoltare al aplicațiilor pentru acest sistem de operare și totodată să

dezvolt o aplicație Android pentru controlul calculatorului de la distanță, aplicație ce a constituit lucrarea de licență. Inițial, principalul obiectiv a fost acela de a realiza o aplicație care să ofere utilizatorului posibilitatea de a controla tastatura și mouse-ul calculatorului sau laptopului, într-un mod mai simplu cu ajutorul telefonului mobil și implicit al tehnologiei WiFi. Proiectul a fost constituit atât dintr-o aplicație Android care reprezenta aplicația client, cât și dintr-o aplicație Java care reprezenta aplicația server, o aplicație care putea rula pe sistemul de operare Windows. Conexiunea dintre aceste două aplicații se putea realiza cu ajutorul tehnologiei WiFi.

Cu toate că principalul obiectiv a fost acela de a realiza o aplicație cât mai simplu de utilizat dar care să poată oferi posibilitatea utilizatorului de a controla mouse-ul și tastatura calculatorului sau laptop-ului, aplicației client i-au fost adăugate mai multe funcții precum controlul prezentărilor, controlul diverselor medii de redare sau controlul statusului calculatorului.

Din dorința de a acumula noi cunoștințe în materie de dezvoltare a aplicațiilor pentru platformele mobile, dar și observând potențialul pe care acest tip de aplicație îl are pentru a putea fi pus la dispoziție altor utilizatori, am decis să lucrez în continuare la această aplicație. Astfel că, prin prezenta lucrare doresc a prezenta evoluția acestei aplicații, și mai precis doresc a prezenta noile funcții care au fost introduse în această aplicație, precum conectarea folosind tehnologia Bluetooth sau noile telecomenzi disponibile, dar de asemenea doresc să prezint și modul în care o aplicație poate fi pusă la dispoziție altor utilizatori, sau mai precis modul în care se realizează o testare corectă și eficientă a aplicației pentru a putea fi distribuită utilizatorilor, dar și modul în care am efectuat mentenanța de-a lungul timpului pentru rezolvarea diferitelor probleme care au apărut, dar și pentru a actualiza tehnologiile care au fost implementate în cadrul aplicației.

Este adevărat faptul că, în momentul în care am decis să realizez o astfel de aplicație, pe magazinele de aplicații precum Google Play sau Apple AppStore deja exista o varietate de aplicații de acest tip, aplicații care pot ajuta utilizatorii să își controleze calculatorul sau laptop-ul de la distanță, dar originalitatea acestei lucrări se bazează pe faptul că am reușit să implementez pe lângă funcțiile de bază pe care le deține orice aplicație de acest tip, și noi caracteristici, având o abordare diferită asupra modului de dezvoltare și modului de funcționare al aplicației. Mai precis, diferența dintre aplicația ADMote Control și alte aplicații de acest tip, o reprezintă faptul că, prezenta lucrare este o aplicație disponibilă utilizatorilor în 14 limbi, oferă controlul a 6 tastaturi diferite precum tastatura în limba engleză, germană, franceză, română, poloneză și rusă și de asemenea oferă controlul a 11 medii de redare, dintre care cele mai importante și utilizate fiind: Netflix, YouTube sau HBO GO.

Proiectul ADMote Control este în continuare alcătuit dintr-o aplicație Android, aceasta reprezentând aplicația client, dintr-o aplicație Java, aceasta reprezentând aplicația server, dar și dintr-o pagină web, aceasta reprezentând o metodă de informare a utilizatorilor despre modul de funcționare al aplicațiilor și modul de rezolvare al problemelor care pot apărea în timpul utilizării acestora.

Prezenta lucrare este alcătuită din trei capitole, primul dintre acestea reprezentând introducerea, aceasta fiind partea în care este prezentat un fragment din evoluția tehnologiei telefoanelor mobile, care a fost posibilă prin dezvoltarea rețelelor de telecomunicații, și de asemenea este prezentat motivul pentru care am ales să dezvolt acest tip de aplicație cât și o scurtă prezentare a structurii acesteia.

Al doilea capitol, “Dezvoltarea aplicațiilor pentru sistemul de operare Android” prezintă informații generale referitoare la sistemul de operare Android, informații referitoare la arhitectura Android și principalele componente necesare dezvoltării unei aplicații pentru această platformă dar și modul de dezvoltare al aplicațiilor utilizând mediul de dezvoltare Android Studio.

Al treilea capitol, „ADMote Control – De la idee la aplicație în telefonul sau tableta utilizatorului Android” prezintă procesul de dezvoltare al aplicației cu ajutorul diferitelor tehnologii și a mediilor de dezvoltare, procesul de testare al aplicației și de asemenea procesul de realizare al mentenanței pentru această aplicație sau mai precis rezolvarea diferitelor erori și actualizarea tehnologiilor utilizate. Tot în acest capitol este prezentat modul de lansare al aplicației, modul de realizare a promovării acesteia, dar și date statistice referitoare la descărcarea și utilizarea aplicației dar și date statistice referitoare la erorile apărute în cadrul aplicației și modul eficient de rezolvare al acestora pentru realizarea unei experiențe cât mai bune pentru utilizator în momentul în care acesta interacționează cu aplicația.

Ultima parte a acestei lucrări prezintă concluziile generale în urma dezvoltării aplicației client, server și a paginii web, cât și informații referitoare la caracteristicile ce doresc a fi introduse în viitor în cadrul acestei aplicații, sau mai precis direcțiile viitoare de dezvoltare ale acestui proiect.

2 dezvoltarea aplicațiilor pentru Sistemul de operare android

Sistemul de operare Android

Arhitectura sistemului de operare Android

Principalele componente ale unei aplicații Android

Modul de dezvoltare al aplicațiilor utilizând mediul de dezvoltare Android Studio

Sistemul de operare android

Sistemul de operare Android reprezintă un sistem de operare care a fost dezvoltat de către compania Google, pentru a fi utilizat în principal pentru dispozitive cu ecran tactil, telefoane mobile și tablete. Designul său permite utilizatorilor să manipuleze dispozitivele mobile intuitiv, cu mișcări ale degetelor care reflectă mișcări comune, cum ar fi ciupitul, glisarea și atingerea. De asemenea, Google folosește sistemul de operare Android la televizoare, mașini și ceasuri de mână, fiecare dintre acestea fiind echipate cu o interfață de utilizator unică. [5]

Dezvoltat inițial de compania Android Inc., pe care Google a cumpărat-o în anul 2005, sistemul de operare Android a fost dezvăluit în 2007, iar primul dispozitiv comercial Android a fost lansat în septembrie 2008, acesta fiind HTC Dream, cunoscut și sub numele de T-Mobile G1. Versiunea actuală a sistemului de operare este Android 10, aceasta fiind lansată pe data de 3 septembrie 2019. Codul sursă principal al sistemului de operare Android, este cunoscut sub numele de Android Open Source Project (AOSP), care este licențiat în principal sub licența Apache.

Platforma Android include un sistem de operare bazat pe nucleul Linux, o interfață grafică de utilizator (GUI), un browser web și de asemenea aplicații pentru utilizatori, acestea fiind disponibile pentru descărcare accesând diferite magazine de aplicații. [6]

În momentul actual, pe piața dispozitivelor mobile există peste 24 de mii de telefoane și tablete care utilizează sistemul de operare Android, o mare parte dintre acestea oferind soluții pentru productivitate, jocuri dar și conectivitate 5G. [7]

Arhitectura sistemului de operare android

Sistemul de operare Android, ca orice sistem de operare, are propria sa arhitectură. Arhitectura Android reprezintă o stivă de componente software, toate dintre acestea fiind utilizate cu un singur scop, și anume acela de a asigura funcționalitatea corectă a sistemului de operare Android, astfel încât acesta să poată accepta nevoile dispozitivelor mobile. [8]

Figura 1 Arhitectura sistemului de operare Android

Figura 1 prezintă cele 5 straturi ale arhitecturii sistemului de operare Android, fiecare dintre acestea fiind alcătuite la rândul lor din mai multe programe sau tehnologii, acestea fiind grupate cu scopul de a executa diferitele funcții ale sistemului de operare.

Principalele componente ale arhitecturii sistemului de operare Android, structurate pe 5 straturi sunt:

Aplicațiile

Cadrul sistemului de operare Android

Componente de execuție a codului

Bibliotecile platformei Android

Nucleul Linux

Toate aceste componente sunt importante pentru funcționarea optimă a acestuia, dar cele mai importante dintre acestea sunt nucleul Linux, acesta furnizând telefonului mobil toate funcțiile sale, funcții de bază ale unui sistem de operare, dar și mașina virtuală Dalvik, cunoscută ca DVM, aceasta fiind responsabilă cu executarea aplicațiilor pe platformele mobile. [8]

Stratul superior al arhitecturii Android este reprezentat de aplicații. Aplicațiile native, dezvoltate de Google, cât și aplicațiile care sunt dezvoltate de alte companii, pot fi instalate doar în acest strat al sistemului de operare. Acest strat asociat aplicațiilor Android, rulează pe baza claselor și a serviciilor implementate în aplicația pe care utilizatorul dorește să o instaleze și mai apoi să o deschidă. [8]

Al doilea strat reprezintă cadrul sistemului de operare Android, acesta având rolul de a furniza clasele necesare pentru dezvoltarea aplicațiilor. De asemenea, oferă o abstractizare generică pentru accesul hardware și gestionează interfața utilizatorului și resursele aplicației. Practic, acest strat al arhitecturii Android oferă serviciile prin care putem crea o anumită clasă și prin care putem face acea clasă să fie de ajutor pentru crearea aplicației. Cadrul sistemului de operare Android include servicii precum serviciul de telefonie, servicii de localizare, manager de notificări, servicii NFC, sistem de vizualizare etc., pe care le putem folosi pentru dezvoltarea aplicațiilor conform cerințelor noastre sau ale clienților. [8]

Componentele de execuție a codului alcătuiesc cel de-al treilea strat al arhitecturii Android, acesta fiind o parte foarte importantă a sistemului de operare deoarece conține componente precum: bibliotecile de bază și mașina virtuală Dalvik (DVM). Mașina virtuală Dalvik, este o mașină virtuală bazată pe registre, ca și mașina virtuală Java (JVM). Este concepută și optimizată pentru Android pentru a asigura faptul că un dispozitiv poate rula mai multe instanțe eficient. Se bazează pe nucleul Linux pentru o gestionare cât mai eficientă a memoriei. Bibliotecile de bază din acest strat al arhitecturii Android, ne vor permite dezvoltarea aplicațiilor Android utilizând limbajul de programare Java. [8]

Al patrulea strat este reprezentat de către bibliotecile platformei Android. Acest strat include diferite biblioteci C/C ++ de bază, dar și biblioteci bazate pe Java, cum ar fi: SSL, libc, Graphics, SQLite, Webkit, Media, Surface Manger, OpenGL etc., pentru a oferi suport pentru dezvoltarea aplicațiilor Android. [8]

Nucleul Linux este ultimul strat dar reprezintă un strat de bază al arhitecturii Android. Acesta gestionează toate driverele, cum ar fi: driverele de afișare, driverele de cameră, driverele Bluetooth, driverele audio, driverele de memorie etc., care sunt necesare în principal pentru dispozitivul Android în timpul rulării. Nucleul Linux oferă un strat de abstractizare între hardware-ul dispozitivului și restul stivei. Este responsabil pentru managementul memoriei, administrarea energiei, administrarea dispozitivului, accesul la resurse etc. [8]

Principalele componente ale unei aplicații android

Componentele unei aplicații Android reprezintă principalele elemente utilizate de un dezvoltator în momentul realizării unei aplicații. Principalul scop al acestor elemente este acela de a realiza o legătură a sistemului de operare cu aplicația. Componentele de bază ale unei aplicații Android sunt următoarele:

Activitățile

Intențiile și receptorii de transmisie

Serviciile

Furnizorii de conținut [9]

Activitățile

Activitatea poate fi considerată ca fiind piatra de temelie în dezvoltarea unei aplicații Android. Aceasta oferă spațiu utilizatorului pentru orice fel de interacțiune cu telefonul sau tableta Android. Ca de exemplu, deschiderea unui contact și mai apoi apelarea acestuia reprezintă o interacțiune a utilizatorului cu telefonul sau tableta, această interacțiune având loc printr-o aplicație care la rândul ei este alcătuită dintr-o activitate sau mai multe activități. Activitatea se află în strânsă legătură cu interfața utilizatorului. O aplicație poate fi alcătuită din mai multe activități, fiecare având rolul ei în cadrul aplicației dar și un ciclu de viață bazat pe scopul pentru care a fost implementată. [10]

În cadrul unei activități există 4 stări esențiale, acestea reprezentând principalele elemente ale ciclului de viață al aplicației. Cele 4 stări sunt următoarele:

Lansarea activității

Rularea activității

Distrugerea activității

Terminarea activității [10]

Figura 2 Ciclul de viață al unei activități

Figura 2 prezintă ciclul de viață al unei activități din cadrul unei aplicații Android. Cele 4 stări esențiale ale unei aplicații sunt reprezentate în diagrama de mai sus sub formă de ovale colorate. După cum se poate observa, între cele 4 stări esențiale se regăsesc și diferite funcții de apel, care sunt implementate în cadrul unei activități pentru realizarea unor operații, aceste metode fiind reprezentate sub formă de casete dreptunghiulare.

Intențiile și receptorii de transmisie

Aplicațiile Android pot trimite mesaje către sistemul Android și către alte aplicații Android, dar de asemenea pot și să primească mesaje de transmisie de la sistemul Android sau de la alte aplicații Android. Aceste mesaje sunt trimise în momentul în care apare un eveniment de interes. De exemplu, sistemul de operare Android trimite mesaje de transmisie în momentul în care apar diverse evenimente ale sistemului, cum ar fi momentul când sistemul de operare Android pornește sau dispozitivul începe să se încarce. Aplicațiile pot trimite, de asemenea, mesaje personalizate, cum ar fi notificarea altor aplicații despre ceva ce ar putea fi interesant (de exemplu, o informație cu privire la descărcarea unor date noi pentru a se realiza o actualizare). [11]

Astfel că, receptorii de transmisie pot fi considerați ca fiind receptori pentru aceste evenimente de sistem. Pentru ca utilizatorul să poată fi notificat în momentul în care au fost detectate anumite modificări ale sistemului sau modificări în cadrul aplicației, dezvoltatorul de aplicații Android va trebui să introducă manual în aplicație acești receptori de transmisie, pentru ca ulterior să fie posibilă crearea unei alerte care va putea notifica utilizatorul. [11]

Figura3 Modul de colaborare dintre sistemul Android și receptorii de transmisie

O intenție reprezintă un obiect de mesagerie care poate fi utilizat pentru a solicita o acțiune de la o altă componentă a aplicației. Există două tipuri de intenții:

Intenții explicite

Intenții implicite [12]

Intențiile explicite specifică ce aplicație va satisface intenția, furnizând fie numele pachetului aplicației țintă, fie un nume al clasei de componente complet calificat. De obicei, un dezvoltator de aplicații Android utilizează acest tip de intenție pentru a porni o componentă în propria aplicație, deoarece acesta cunoaște numele clasei activității sau serviciului pe care dorește să îl deschidă. De exemplu, utilizând o intenție explicită se poate crea o activitate nouă în aplicație ca răspuns la o acțiune a utilizatorului sau se poate porni un serviciu pentru a descărca un fișier în fundal. [12]

Intențiile implicite nu denumesc o componentă specifică, ci declară în schimb o acțiune generală pentru a efectua, ceea ce permite unei componente dintr-o altă aplicație să o gestioneze. De exemplu, dacă un dezvoltator de aplicații Android dorește să prezinte utilizatorului o locație pe o hartă, acesta poate utiliza o intenție implicită pentru a solicita ca o altă aplicație capabilă să arate o locație specificată pe o hartă. [12]

Figura 4 Modul de livrare al intenției implicite

Figura 4 prezintă modul de livrare al intenției implicite prin intermediul sistemului pentru a începe o altă activitate. Activitatea A creează o intenție cu o descriere a acțiunii și o transmite la metoda startActivity(). Sistemul de operare Android verifică toate aplicațiile pentru a găsi un filtru de intenție care să fie asemănător cu intenția. Când se găsește o potrivire, sistemul începe activitatea de potrivire (Activitatea B) invocând metoda onCreate() și transmite intenția. [12]

Serviciile

Un serviciu reprezintă o componentă a aplicației care poate efectua operațiuni pe termen lung. Serviciile nu oferă o interfață de utilizator. Odată pornit, un serviciu ar putea continua să funcționeze mult timp, chiar și după ce utilizatorul trece la o altă aplicație. În plus, o componentă a aplicației se poate lega de un serviciu pentru a interacționa cu acesta și chiar pentru a efectua o comunicare inter-proces (IPC). De exemplu, un serviciu poate gestiona tranzacțiile de rețea, reda muzică, efectua intrare și ieșire de fișiere sau poate interacționa cu un furnizor de conținut, toate aceste operațiuni fiind realizate în fundal. [13]

Există 3 tipuri de servicii:

Serviciu de prim-plan

Serviciu în fundal

Serviciu legat

Un serviciu de prim-plan efectuează o operațiune care este vizibilă pentru utilizator. De exemplu, o aplicație audio ar putea folosi un serviciu de prim-plan pentru a reda o piesă. Serviciile de prim-plan trebuie să afișeze o notificare. Acestea continuă să funcționeze chiar și atunci când utilizatorul nu interacționează cu aplicația. [13]

Un serviciu de fundal efectuează o operațiune care nu este observată direct de utilizator. De exemplu, dacă o aplicație folosește un serviciu pentru a-și compacta stocarea, acesta ar fi de obicei un serviciu de fundal. [13]

Un serviciu este legat atunci când o componentă a aplicației se leagă la acesta apelând metoda bindService(). Un serviciu legat oferă o interfață client-server, care permite componentelor să interacționeze cu serviciul, să trimită solicitări, să primească rezultate și chiar să facă acest lucru în cadrul proceselor cu comunicare inter-proces (IPC). Un serviciu legat rulează numai atâta timp cât o altă componentă a aplicației este legată de acesta. Mai multe componente se pot lega la serviciu simultan, dar atunci când toate se dezleagă, serviciul este distrus. [13]

Ciclul de viață al unui serviciu este mult mai simplu decât cel al unei activități. Cu toate acestea, este foarte important ca dezvoltatorul unei aplicații Android să acorde o atenție deosebită modului în care creează și distruge serviciul, deoarece dacă un serviciu nu este creat și nu este distrus corect, acesta poate rula în fundal fără ca utilizatorul să fie notificat. [13]

Ciclul de viață al unui serviciu poate fi gestionat în două moduri. Primul mod de gestionare al ciclului de viață al unui serviciu se realizează prin utilizarea serviciului în derulare. Serviciul este creat în momentul în care o altă componentă apelează metoda startService(). Serviciul rulează apoi la nesfârșit, și pentru ca acesta să fie oprit va trebui apelată metoda stopSelf (). În cadrul unei aplicații există și un alt mod de oprire al acestui serviciu, prin apelarea metodei stopService(), acest apel fiind făcut de către o altă componentă utilizată în aplicație. În momentul în care serviciul este oprit, sistemul îl distruge. [13]

Al doilea mod de gestionare al ciclului de viață al unui serviciu se realizează prin utilizarea serviciului legat. Serviciul este creat atunci când o altă componentă (un client) apelează metoda bindService(). Clientul comunică apoi cu serviciul printr-o interfață IBinder. Clientul poate închide conexiunea prin apelarea metodei unbindService(). Mai mulți clienți se pot lega la același serviciu și atunci când toți se dezleagă, sistemul distruge serviciul, astfel că serviciul nu trebuie să se oprească. [13]

Figura 5 Ciclul de viață al unui serviciu

Figura 5 prezintă ciclul de viață al unui serviciu în derulare dar și al unui serviciu legat. Diagrama din partea stânga prezintă ciclul de viață atunci când serviciul este creat prin apelarea metodei startService() în timp ce diagrama din partea dreapta prezintă ciclul de viață din momentul în care serviciul este creat prin apelarea metodei bindService(). [13]

Furnizorii de conținut

Un furnizor de conținut gestionează accesul la un depozit central de date. Un furnizor face parte dintr-o aplicație Android, care oferă de multe ori propria sa interfață de utilizator pentru lucrul cu datele. Cu toate acestea, furnizorii de conținut sunt destinați în primul rând să fie utilizați de alte aplicații, care accesează furnizorul folosind un obiect de tipul client de furnizor. Împreună, furnizorii și clienții furnizori oferă o interfață standard constantă pentru datele care gestionează, de asemenea, comunicarea între proces și accesul securizat la date. [14]

Un furnizor de conținut prezintă datele aplicațiilor externe ca una sau mai multe tabele care sunt similare cu tabelele găsite într-o bază de date relațională. Un rând reprezintă o instanță a unui tip de date pe care le colectează furnizorul și fiecare coloană din rând reprezintă o bucată individuală de date colectate pentru o instanță. [14]

Figura 6 Relațiile dintre furnizorii de conținut și alte componente ale unei aplicații Android

Figura 6 prezintă relațiile dintre furnizorii de conținut și alte componente ale unei aplicații Android. Un furnizor de conținut coordonează accesul la stratul de stocare al datelor din aplicația Android pentru o serie de API-uri și componente diferite. Principalele funcții ale acestor API-uri sau componente sunt: [14]

Distribuirea accesului la datele aplicației Android cu alte aplicații

Trimiterea datelor unui widget

Returnarea sugestiilor de căutare personalizate pentru aplicația Android prin cadrul de căutare, utilizând clasa SearchRecentSuggestionsProvider

Sincronizarea datelor aplicației cu serverul, prin utilizarea unei implementări a clasei AbstractThreadedSyncAdapter

Încărcarea datelor din interfața de utilizator cu ajutorul unui CursorLoader [14]

Modul de dezvoltare al aplicațiilor Android utilizând mediul de dezvoltare Android Studio

Dezvoltarea aplicațiilor pentru sistemul de operare Android poate fi realizată utilizând diferite limbaje de programare, cele mai utilizate fiind Java, Kotlin și C++. Java este principalul limbaj de programare utilizat de către dezvoltatorii din întreaga lume astfel încât, majoritatea aplicațiilor existente în acest moment pe magazinul de aplicații al companiei Google sunt dezvoltate folosind acest limbaj. Kotlin a fost ales de către compania Google ca fiind cel de-al doilea limbaj de programare ce poate fi utilizat pentru dezvoltarea aplicațiilor Android. Acest limbaj prezintă o evoluție continuă datorită suportului pe care compania Google îl oferă, fapt ce a determinat alegerea acestui limbaj de programare în ultima perioadă, de către foarte multe companii și implicit dezvoltatori pentru proiectele lor. Principalul avantaj al acestui limbaj de programare este faptul că necesită mai puțin cod de tipul “boilerplate”, ceea ce înseamnă că este mult mai simplu de utilizat și de asemenea mult mai simplu de citit. De asemenea, în cadrul acestui limbaj sunt eliminate excepțiile indicatorului nul (NPE) și de asemenea cea mai cunoscută caracteristică a limbajului Kotlin este reprezentată de eliminarea obligativității de a încheia secvența de cod cu semnul de punctuație semi colon (punct și virgulă). [15]

Cel mai bun mod de a dezvolta o aplicație Android este acela de a utiliza mediul de dezvoltare Android Studio, acesta reprezentând un set de instrumente care facilitează dezvoltarea aplicațiilor pentru sistemul de operare Android. Compania Google recomandă utilizarea acestui mediu de dezvoltare, aceasta oferind diferite tutoriale, un număr mare de biblioteci și de asemenea și fragmente de cod necesare unui dezvoltator pentru îmbunătățirea calității unei aplicații. Principalele caracteristici ale mediului de dezvoltare Android Studio sunt reprezentate de prezența unui editor pentru design-ul aplicației, sugestiile oferite dezvoltatorilor pentru ca dezvoltarea aplicațiilor să fie mai eficientă și să se poată elimina riscul aparițiilor de erori în cod, dar de asemenea și caracteristici mai complexe precum implementarea platformei GitHub utilizată pentru lucrul în echipă, sau a stocării în cloud, aceasta fiind implementată într-un mod foarte simplu. [15]

În acest moment, mediul de dezvoltare Android Studio se află la versiunea 4.0. Această versiune prezintă funcții noi, funcții care sunt foarte importante pentru dezvoltarea corectă a unei aplicații Android. Aceste funcții noi sunt următoarele:

Editorul vizual de layout-uri care ajută la crearea de layout-uri complexe și oferă dezvoltatorului posibilitatea de a vizualiza layout-ul creat pe mai multe configurații ale dispozitivelor.

Analiza APK-ului care ajută la analiza dimensiunii fișierului apk pentru a se observa modul în care aplicația va afecta memoria telefonului/tabletei utilizatorului. Fișierul apk reprezintă fișierul de instalare al aplicației, acesta fiind încărcat pe platformele de descărcare de aplicații

Emulator rapid care permite instalarea și rularea aplicației pe mai multe dispozitive fizice pentru a se putea realiza o testare a aplicației pe mai multe configurații ale dispozitivelor. Acest emulator prezintă și funcții necesare testării aplicațiilor care prezintă caracteristici precum realitatea augmentată.

Editor inteligent pentru cod cu ajutorul căruia dezvoltatorul poate scrie un cod mai bun, într-un mod mai rapid, acest editor furnizând și funcții de completare a codului pentru diferite limbaje de programare precum Java, Kotlin, C++.

Profilul în timp real care prezintă statistici în timp real referitoare la modul în care aplicația consumă resursele telefonului/tabletei în momentul în care aceasta este utilizată. [16]

3 ADMOTE CONTROL – DE LA IDEE LA APLICAȚIE ÎN TELEFONUL SAU TABLETA UTILIZATORULUI ANDROID

Dezvoltarea clientului ADMote Control

Dezvoltarea serverului ADMote Control

Dezvoltarea website-ului asociat aplicației ADMote Control

Lansarea aplicației ADMote Control pe platforma Google Play

Realizarea mentenanței și date statistice referitoare la aplicație

ADMote Control reprezintă o aplicație pentru sistemul de operare Android cu ajutorul căreia utilizatorul telefonului sau tabletei Android poate controla calculatorul personal sau laptopul. Ideea inițială a fost aceea de a dezvolta o aplicație Android care să permită controlul tastaturii și al mouse-ului prin intermediul unui dispozitiv Android, utilizându-se tehnologia WiFi. Din dorința de a realiza o aplicație mai complexă din punctul de vedere al caracteristicilor disponibile și totodată ușor de utilizat, pe parcursul dezvoltării acesteia au fost introduse noi caracteristici, acestea oferind posibilitatea utilizatorului de a controla nu doar funcțiile de bază ale unui calculator ci și diferite programe sau platforme, aceste caracteristici nefiind incluse inițial în conceputul aplicației. Pentru ca acest control al calculatorului să poată fi realizat cu ajutorul telefonului sau tabletei, a fost necesară dezvoltarea unei aplicații server, aceasta având rolul de a permite comunicarea telefonului sau al tabletei cu calculatorul sau laptopul. De asemenea, a fost necesară și realizarea unui site web pentru ca utilizatorul aplicației să poată fi informat în ceea ce privește modul de utilizare al aplicației. Datorită faptului că în acest moment ADMote Control este alcătuit din mai multe componente și anume aplicația client, aplicația server și site-ul web, se poate considera faptul că ADMote Control nu mai reprezintă doar o aplicație Android ci un proiect mult mai complex.

3.1 Dezvoltarea clientului ADMote Control

Dezvoltarea aplicației client a început în urmă cu trei ani, plecându-se de la ideea de a dezvolta o aplicație pentru sistemul de operare Android, care să ofere funcții de control al calculatorului prin intermediul unui telefon sau tablete Android, iar realizarea conexiunii dintre cele două dispozitive să fie realizată prin intermediul unei rețele WiFi. Cu toate că inițial s-a dorit realizarea unei aplicații care să includă doar funcții de bază pentru controlul unui calculator, funcții precum controlul mouse-ului sau controlul tastaturii, au fost implementate și funcții noi precum controlul mediilor de redare, controlul prezentărilor sau controlul statusului calculatorului sau laptopului.

Primul pas în dezvoltarea aplicației a fost realizarea unui design cât mai simplu, care să nu conțină foarte multe elemente grafice, dar care să ofere acces utilizatorului într-un mod simplu asupra funcțiilor de conectare și control. Mediul de dezvoltare Android Studio mi-a oferit posibilitatea de a realiza interfața utilizatorului fie prin utilizarea editorului de cod XML, fie prin utilizarea uneltei de editare a layout-ului, această unealtă oferindu-mi posibilitatea de a selecta și personaliza elementele pe care am dorit să le introduc în interfața utilizatorului. Interfața utilizatorului a fost inițial alcătuită din doar câteva elemente grafice precum: câmpuri de editare a textului, câmpuri de vizualizare a textului, butoane simple sau butoane de tip imagine dar odată cu evoluția aplicației, design-ul a devenit mult mai complex, acesta fiind în prezent alcătuit din mai multe elemente grafice, prezentând totodată și o nouă paletă de culori dar și anumite efecte aplicate elementelor grafice, efecte care oferă un plus în ceea ce privește interfața utilizatorului dar și a interacțiunii pe care utilizatorul o are cu aplicația. O structură de elemente grafice constituie un layout, care pentru a oferi elementelor grafice funcționalitatea necesară trebuie asociat cu o componentă Android de tip activitate sau fragment.

După cum am prezentat în precedentul capitol, o activitate reprezintă o componentă de bază a unei aplicații Android, aceasta oferind spațiu utilizatorului pentru orice fel de interacțiune cu telefonul sau tableta Android. Fragmentul reprezintă tot o componentă Android care deține anumite funcționalități ale unei activități, principalele sale caracteristici fiind modularitatea, reutilizarea și adaptabilitatea. [10,17]

Versiunea precedentă a aplicației ADMote Control, prezentată în urmă cu doi ani, a fost alcătuită din șapte fragmente și două activități, fiecare dintre acestea având asociate diferite layout-uri. În momentul de față, aplicația ADMote Control este alcătuită din 3 activități principale și 73 de fragmente, diferența majoră în ceea ce privește numărul de fragmente fiind determinată de evoluția aplicației, care a fost posibilă prin implementarea unor noi caracteristici.

Activitatea principală a aplicației a fost numită “MainActivity.java”, aceasta reprezentând o componentă a aplicației în cadrul căreia sunt efectuate atât operații care se află în strânsă legătură cu elementele grafice asociate layout-ului, cât și operații necesare funcționalității aplicației. Fiind activitatea de bază a aplicației ADMote Control, aceasta a fost utilizată în versiunea precedentă a aplicației dar este utilizată și în momentul de față, în versiunea actuală, aplicația neputând funcționa fără această activitate.

O altă activitate care s-a aflat în componența versiunii precedente a aplicației, a fost activitatea numită “WelcomeActivity.java”. Această activitate conținea layout-uri care prezentau caracteristicile principale ale aplicației astfel încât utilizatorul să poată primi informații încă de la prima interacțiune cu aplicația. În prezenta versiune a aplicației ADMote Control, această activitate care oferea informații cu referire la caracteristicile aplicației nu mai este disponibilă, aceasta fiind eliminată din cauza faptului că reprezenta o practică veche de prezentare a caracteristicilor disponibile, utilizatorii din ziua de astăzi dorind să aibă interacțiune cu aplicația mult mai repede și de asemenea își doresc să descopere singuri aceste caracteristici. Astfel că, din punctul de vedere al experienței pe care utilizatorul ar trebui să o aibă cu aplicația, această abordare nu era una practică. Figura 7 prezintă design-ul realizat pentru layout-ul asociat activității WelcomeActivity, acesta fiind constituit din elemente precum câmp de vizualizare al textului, imagini și butoane simple (cu text).

În prezenta versiune a aplicației, datorită faptului că MainActivity reprezintă principala activitate a aplicației ADMote Control, layout-ul asociat acestei activități este și primul cu care utilizatorul interacționează în momentul deschiderii aplicației. Layout-ul asociat acestei activități este reprezentat de un fișier XML numit “activity_main.xml”, în cadrul căruia este realizat designul principalei activități a acestei aplicații.

Designul realizat în cadrul acestui layout a fost modificat de foarte multe ori, însă chiar dacă au existat multe modificări, acestea au respectat principala schemă a acestui design, schemă care a fost proiectată și implementată încă din prima versiune a aplicației.

Figura 7 WelcomeActivity – Activitatea de prezentare a principalelor caracteristici disponibile

Figura 8 MainActivity – Design-ul principalei activități în cadrul versiunii precedente a aplicației

Figura 8 prezintă design-ul activității MainActivity în cadrul versiunii precedente a aplicației. Acest design nu era constituit din multe elemente grafice, dar acele câteva elemente îndeplineau cu succes obiectivele aplicației. Astfel că, în momentul în care utilizatorul ajungea pe acest ecran al aplicației, în cazul în care nu era conectat la o rețea WiFi, aplicația avea rolul de a-l notifica. Fără existența unei conexiuni WiFi, aplicația nu putea funcționa în așa fel încât să poată îndeplini scopul pentru care a fost dezvoltată, deoarece controlul calculatorului putea fi realizat prin intermediul telefonului, doar dacă se putea crea o conexiune între aceste două dispozitive astfel încât acestea să poată comunica. Dacă o conexiune WiFi era detectată, această notificare care a fost implementată sub forma unui element grafic de tipul „dialog de alertă”, nu mai era prezentată utilizatorului, în schimb acesta putea vizualiza principalele opțiuni din cadrul aplicației și anume opțiunea de conectare, opțiunea de a selecta funcția calculatorului pe care dorește să o controleze dar și o opțiune de a se informa cu privire la modul de conectare și de funcționare al aplicației. Aceste 3 opțiuni erau prezentate utilizatorului sub forma unor butoane de tip imagine, fiecare dintre aceste butoane conținând o pictogramă descriptivă cât și un text care să indice utilizatorului care sunt opțiunile disponibile. Tot în cadrul acestui layout, îi mai erau puse la dispoziție utilizatorului 2 opțiuni, în partea de sus a ecranului. Prima dintre acestea, aflată în colțul stânga al ecranului, prezentată utilizatorului sub forma unei pictograme, reprezintă un meniu care era format din 7 elemente, fiecare dintre acestea reprezentând un mod de tranziție dintre principala activitate și celelalte componente ale aplicației care sunt disponibile fie sub formă de activitate, fie sub formă de fragment. Figura de mai jos prezintă acest meniu, care din punctul de vedere al elementelor grafice din cadrul sistemului de operare Android, reprezintă o bară de navigare.

Figura 9 MainActivity – Principalul meniu al aplicației implementat sub forma unei element de tipul bară de navigare

Cea de-a doua opțiune, aflată în partea dreapta-sus a ecranului este de asemenea reprezentată de o pictogramă, această opțiune oferind utilizatorului posibilitatea de a se reîntoarce la ecranul de start al aplicației, astfel încât să nu mai fie necesară apăsarea tastei de întoarcere la precedentul ecran. În ceea ce privește opțiunea de afișare a meniului din cadrul aplicației, aceasta este prezentă și în versiunea actuală a aplicației ADMote Control, în timp ce opțiunea de reîntoarcere la primul ecran a fost înlocuită cu alte 3 opțiuni mult mai utile în cadrul aplicației.

Figura 10 MainActivity – Design-ul principalei activități în cadrul versiunii actuale a aplicației

Figura 10 prezintă design-ul principalei activități în cadrul versiunii actuale a aplicației ADMote Control, acest design fiind constituit pe baza layout-ului din prima versiune a aplicației. Astfel că, principalele elemente ale acestui layout, elemente utilizate și în precedenta versiune au fost modificate atât din punctul de vedere al paletei de culori și a efectelor care oferă o interfață grafică mai de actualitate dar și din punctul de vedere al funcționalității sau mai precis al opțiunilor disponibile în cadrul activității în momentul în care utilizatorul interacționează cu aplicația prin selectarea acestora. În precedenta versiune a aplicației, utilizatorului i se puneau la dispoziție tot 3 elemente grafice sub forma unor butoane de tip imagine care prezentau atât o pictogramă descriptivă cât și un text care indica funcția acelui buton. În noua versiune a aplicației textul aplicat acestor butoane a fost eliminat, acestea având în componență doar pictogramele descriptive.

De asemenea, funcțiile celor 3 butoane au fost modificate, diferența dintre precedenta versiune și actuala versiune fiind dată de funcțiile pe care le îndeplinesc aceste butoane. În precedenta versiune cele 3 butoane realizau o tranziție între activitatea principală și 3 caracteristici ale aplicației implementate sub forma a 3 elemente de tip fragment. În cadrul acestor 3 fragmente erau implementate caracteristicile de conectare prin WiFi, de selectare a funcției ce se dorește a fi controlată în cadrul aplicației și de ajutor pentru a se realiza cu succes conectarea la server. În versiunea actuală a aplicației funcția de ajutor pentru realizare a conexiunii a fost eliminată de pe activitatea principală și înlocuită cu funcția de realizare a conexiunii utilizându-se tehnologia Bluetooth.

În ceea ce privește elementele din partea de sus a ecranului principal al aplicației, acestea au fost parțial modificate, astfel că singura opțiune care a fost prezentă în precedenta versiune dar este prezentă și în actuala versiune este reprezentată de opțiunea de deschidere a meniului principal, aceasta fiind în continuare reprezentată de o pictogramă și se află tot în partea stânga-sus a ecranului. Opțiunea de reîntoarcere la principala activitate a aplicației, opțiune disponibilă în precedenta versiune, a fost înlocuită de 3 alte elemente, care de asemenea sunt reprezentate sub forma unor pictograme. Două dintre aceste pictograme au fost implementate cu scopul de a realiza o redirecționare din cadrul aplicației către alte servicii, mai multe detalii despre aceste 2 opțiuni vor fi prezentate în următoarele subcapitole.

Al treilea element aflat în partea dreapta-sus a ecranului, reprezentat de o pictogramă sub forma unui microfon, reprezintă o funcție a aplicației prin care se oferă utilizatorului posibilitatea de a folosi aplicația și implicit caracteristicile aplicației utilizând vocea. Astfel că, utilizatorul poate trimite aplicației diferite comenzi vocale, aceasta le primește, le analizează și le execută. De exemplu, în momentul în care utilizatorul va selecta pictograma asociată comenzilor vocale, pe ecranul telefonului sau tabletei va fi afișat un dialog care îl va întreba pe utilizator care este comanda ce se dorește a fi executată, iar dacă acesta va rosti cuvântul „Wi-Fi”, aplicația va realiza o redirecționare de la activitatea principală, la fragmentul unde poate fi realizată conexiunea dintre telefon și calculator prin intermediul conexiunii WiFi.

case REQUEST_SPEECH:
if (resultCode == RESULT_OK) {
ArrayList<String> matches = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

assert matches != null;
String mostLikelyThingHeard = matches.get(0);
// toUpperCase() este utilizat pentru a face comparația de șiruri egală
if (mostLikelyThingHeard.toUpperCase().equals("WI-FI")) {
fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left);
fragmentTransaction.replace(R.id.main_container, new ConnectFragment());
fragmentTransaction.addToBackStack(null).commit();
getFragmentManager().popBackStack();

Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.admote_control_title);
mToolbar.setBackgroundColor(Color.parseColor("#161616"));
}

Codul 1 Cod sursă pentru funcția de comenzi vocale

Aceste comenzi vocale sunt implementate în cadrul activității MainActivity, dar sunt disponibile utilizatorului indiferent dacă acesta se află pe activitatea principală sau dacă a selectat o altă caracteristică a aplicației. În prezent, aplicația poate recunoaște 52 de comenzi vocale. După cum este prezentat în Codul 1, comenzile vocale au fost implementate în activitatea principală, MainActivity, sub formă de ArrayList. Mai precis, pentru fiecare comandă vocală a fost realizată o implementare a codului ce poate fi executat odată ce comanda a fost primită, analizată și înțeleasă. În cazul în care utilizatorul va trimite o comandă care nu face parte din acel ArrayList, pe ecranul telefonului va fi returnat un mesaj de tipul Toast care va indica faptul că, comanda nu a fost înțeleasă și astfel nu va putea fi executată deoarece nu există niciun cod atribuit acesteia.

Un mesaj de tipul Toast reprezintă un element grafic, care oferă un feedback simplu despre o operație realizată în cadrul aplicației, acest feedback va fi afișat sub forma unui mic pop-up. Acest mesaj nu necesită un spațiu mare pe ecran pentru a putea fi afișat, activitatea curentă putând să rămână vizibilă iar utilizatorul poate interacționa în continuare cu aceasta. Aceste mesaje de tipul Toast dispar automat după un timp. [18]

Figura 11 prezintă modul în care utilizatorul este notificat în cazul în care comanda vocală pe care o trimite aplicației nu este recunoscută. După cum se poate observa, mesajul de tip Toast apare în partea de jos a ecranului, ocupând doar un spațiu foarte mic, însă oferă utilizatorului o notificare astfel încât acesta să fie informat de faptul că această comandă vocală nu există și că va trebui sa încerce din nou.

Figura 11 Funcția de comenzi vocale. Comandă vocală nefuncțională. Exemplu.

Bara de navigare este în continuare prezentă în cadrul aplicației, însă și aceasta a fost modificată din punctul de vedere al design-ului, culoarea de fundal dar și culoarea textului fiind modificate pentru a putea fi îndeplinite cerințele pe care le-am stabilit din punctul de vedere al design-ului, dorind ca tema de design să fie una mai întunecată, astfel încât să predomine culorile mai închise care cu ajutorul efectelor aplicate elementelor grafice să poată alcătui o interfață de utilizator mult mai plăcută. În figura 12, este prezentată bara de navigare, astfel încât se poate observa noul design și de asemenea pot fi observate și opțiunile disponibile în acest meniu care au fost multiplicate, astfel încât în acest moment utilizatorul poate selecta modul prin care dorește să realizeze conectarea, prin WiFi sau Bluetooth, poate selecta telecomanda pe care dorește să o controleze, numărul acestor telecomenzi crescând de asemenea, sau poate selecta și alte opțiuni precum accesarea setărilor aplicației, informaților despre aplicație sau a paginii de ajutor.

Figura 12 Bara de navigare în cadrul versiunii curente a aplicației

3.1.1 Funcțiile de conectare utilizând tehnologiile WiFi și Bluetooth

Noua versiune a aplicației a adus și modificări în ceea ce privește conectarea dintre aplicația client și aplicația server. La nivelul aplicației client, aceste modificări au apărut atât la interfața utilizatorului cât și la partea de funcționalitate. Versiunea precedentă a aplicației a inclus doar conectarea folosind tehnologia Wi-Fi, dar din dorința de a oferi utilizatorului mai multe metode de conectare am implementat cu succes și conectarea folosind tehnologia Bluetooth.

Pentru accesarea funcțiilor de conectare utilizatorul are 3 opțiuni disponibile, acestea fiind următoarele:

Selectarea modului de conectare utilizând butoanele de tip imagine prezente pe activitatea principală a aplicației

Selectarea modului de conectare utilizând opțiunile disponibile în meniul aplicației implementat sub forma unei bare de navigare

Selectarea modului de conectare utilizând funcția de comenzi vocale

Figura 13 Fragmentul de conectare folosind tehnologia Wi-Fi

Figura 13 prezintă fragmentul în care poate fi realizată conexiunea prin utilizarea tehnologiei Wi-Fi. Acest fragment are asociat un fișier de tipul XML numit “fragment_connect.xml”, acesta reprezentând layout-ul prin care este constituită interfața prin care utilizatorul poate realiza conexiunea cu ajutorul tehnologiei Wi-Fi. Acest layout este constituit din mai multe elemente grafice precum câmpuri de afișare a textului, câmpuri de editare a textului, butoane simple sau butoane de tip imagine. O parte din aceste elemente grafice au fost utilizate și în versiunea precedentă a aplicației, dar au fost modificate parțial sau total astfel încât să poată corespunde cu cerințele de design ale noii versiuni. Dintre aceste modificări aduse design-ului asociat fragmentului de conectare pot enumera: schimbarea culorii fundalului într-una mai închisă, schimbarea culorii și mărimii textului dar și al fontului asociat acestuia, schimbarea culorii butoanelor simple prin aplicarea unui efect care se declanșează în momentul în care utilizatorul va apăsa pe acel buton sau introducerea unui element de tipul RelativeLayout cu scopul de a oferi informații utilizatorului referitoare la resursele necesare pentru a putea fi realizată conexiunea dintre aplicația client și aplicația server, sau mai precis pentru informarea utilizatorului cu referire la pagina web care poate fi accesată pentru a primi mai multe detalii despre aplicația ADMote Control.

Primul pas care trebuie efectuat pentru realizarea conexiunii este acela de a introduce în câmpurile de editare a textului, adresa IP și portul disponibil pentru conectare. Adresa IP necesară pentru realizarea conexiunii reprezintă adresa IPv4 a rețelei Wi-Fi, aceasta putând fi găsită în diferite moduri, recomandarea oferită utilizatorului fiind deschiderea serverului ADMote Control, primul câmp de text afișând adresa IPv4 necesară conexiunii, sau accesarea comenzii “ipconfig” în cadrul „command prompt”.

Serverul ADMote Control a fost realizat în așa fel încât adresa IPv4 necesară conexiunii să poată fi afișată, însă în unele situații adresa afișată poate fi diferită, de cele mai multe ori acest lucru fiind influențat de prezența unei mașini virtuale. Astfel că, pentru afișarea IP-ului necesar realizării conexiunii, utilizatorul fie va trebui să dezactiveze acea mașină virtuală, fie va trebui să acceseze comanda “ipconfig” în cadrul interfeței „command prompt”. Un alt detaliu foarte important în ceea ce privește introducerea IP-ului și a portului și acceptarea acestora de către aplicația client, este introducere caracterului “punct” în cazul adresei IP, și utilizarea unui port alcătuit din doar 4 cifre. Acest lucru este necesar deoarece în cadrul proiectului a fost creată o clasă Java numită “ValidateIP”, prin intermediul căreia se realizează validarea adresei IP și a portului utilizat. Pentru fiecare dintre aceste detalii de conectare au fost stabilite anumite condiții, astfel că pentru validarea adresei IP a fost utilizat un regex Java care realizează o verificare a corectitudinii adresei IPv4, iar pentru port validarea constă în faptul că acesta trebuie să fie alcătuit din 4 cifre dar să fie mai mare de 1023.

În ceea ce privește portul necesar realizării conexiunii, acesta poate fi găsit în momentul deschiderii serverului ADMote Control. Interfața grafică a serverului conține un câmp de text care generează automat un port disponibil pentru realizarea conexiunii. Controlul simultan a mai multor laptop-uri sau calculatoare nu poate fi realizat prin utilizarea aceluiași dispozitiv Android, însă controlul calculatorului cu ajutorul mai multor telefoane sau tablete este posibil. Acest lucru este posibil prin deschiderea de mai multe ori a serverului ADMote Control pe calculator sau laptop, fiecărei dintre aceste instanțe deschise fiindu-i atribuit un nou port, sau mai precis, pentru fiecare instanță a serverului portul va fi incrementat cu 1. De exemplu, daca portul generat la prima accesare a serverului este 3040, iar utilizatorul decide să deschidă din nou serverul, pentru a doua instanță portul generat va fi 3041, astfel că primul dispozitiv Android poate realiza conectarea folosind portul 3040, iar cel de-al doilea folosind portul 3041.

Figura 14 Fragmentul de conectare folosind tehnologia Wi-Fi. Diferite stadii ale funcției de conectare prin Wi-Fi

Figura 14 prezintă diferitele stadii ale funcției de conectare prin WiFi. Prima imagine prezintă momentul în care conexiunea este realizată cu succes. Anumite elemente din cadrul interfeței utilizatorului sunt modificate pentru ca utilizatorul să fie informat despre faptul că în acest moment conexiunea este activă. Astfel că, odată cu realizarea cu succes al acestui eveniment de conectare, câmpul care este asociat statusului conexiunii este modificat din “N/A” în “Conexiune activă”, pictograma care ilustra faptul că nu există nicio conexiune între cele două aplicații este modificată cu o pictogramă de culoare verde, iar IP-ul și portul care au fost utilizate sunt salvate astfel încât daca utilizatorul va dori să utilizeze același calculator care este conectat la aceeași rețea Wi-Fi, să nu mai fie nevoit să introducă din nou datele de conectare. De asemenea, în momentul în care conexiunea este realizată cu succes, utilizatorul va fi notificat și prin intermediul unui mesaj de tipul Toast “Conexiunea cu serverul a fost realizată cu succes”.

În momentul în care utilizatorul dorește să oprească această conexiune dintre cele două aplicații, acesta va trebui să selecteze butonul asociat acestei funcției de deconectare. În momentul în care acest buton este apăsat, serverul este notificat de faptul că se dorește deconectarea clientului, astfel că acesta va trimite un mesaj de confirmare către client, iar deconectarea se va realiza cu succes.

Cea de-a doua imagine prezintă momentul în care utilizatorul decide să deconecteze clientul ADMote prin apăsarea butonului “Resetare/Deconectare”, în acest moment în care se realizează deconectarea clientului, unele elemente grafice sunt de asemenea modificate. Astfel că, pictograma verde care indica faptul că, conexiunea este activă va fi înlocuită cu pictograma inițială, cea care ilustrează faptul că nu există nicio conexiune activă, și de asemenea statusul conexiunii reprezentat de un câmp de editare a textului va fi schimbat din „Conexiune Activă” în “Deconectat”. Totodată, utilizatorul va primi și o notificare printr-un mesaj de tipul Toast, acest mesaj fiind: “Conexiunea cu serverul a fost pierdută!”.

Cea de-a treia imagine prezintă momentul în care utilizatorul decide să se conecteze prin introducerea unui IP și a unui port, sau să reconecteze utilizând aceleași detalii de conectare, însă de această dată conectarea este incertă și durează mai mult deoarece există anumite probleme fie pe dispozitivele unde rulează clientul și serverul ADMote Control, fie pe dispozitivele sau la cablurile care asigură conexiunea de internet. Problemele care pot apărea în momentul conectării sunt de mai multe tipuri, dar printre cele mai des întâlnite se află: introducerea unei adrese IP incorecte sau a unui port incorect, lipsa unei conexiuni de internet sau o problemă temporară a serviciului de internet, existența unei mașini virtuale pe calculatorul unde rulează serverul ADMote Control, absența serverului de pe calculatorul care se dorește a fi controlat sau utilizarea incorectă a serverului, acest lucru incluzând atât copierea greșită a informațiilor sau incapacitatea de pornire a acestuia în momentul în care se dorește a se realiza conexiunea prin rețeaua Wi-Fi. Astfel că, în momentul în care conexiunea dintre client și server este incertă, statusul conexiunii care va fi afișat utilizatorului va fi “Conectare…”, și de asemenea pictograma inițială va fi modificată cu o pictogramă sub forma unui semn de întrebare care va ilustra faptul că, conexiunea este incertă și poate dura o perioadă până când va fi realizată cu succes. În acest moment în care se dorește a se realiza conectarea, interfața utilizatorului va fi blocată pentru 2 minute, astfel încât utilizatorul să nu mai poată modifica detaliile de conectare. Dacă după un anumit timp, cum ar fi 1 minut și 20 de secunde, conexiunea va fi realizată cu succes, interfața utilizatorului va fi deblocată și elemente grafice vor fi modificate astfel încât să fie prezentat utilizatorului faptul că din acest moment poate controla calculatorul cu ajutorul dispozitivului Android. De asemenea, interfața utilizatorului va fi deblocată și după ce aceste 2 minute vor trece, iar utilizatorul va fi notificat despre faptul că nu s-a putut realiza o conexiune între aplicația client și aplicația server. Dacă se va dori introducerea altor detalii sau întreruperea procesului de conectare pentru accesarea altei aplicații, aplicația ADMote Control va trebui oprită fie prin eliminarea acesteia din meniul aplicațiilor în derulare, fie prin accesarea setărilor telefonului de unde poate fi realizată oprirea forțată a oricărei aplicații.

În cadrul noii versiuni a aplicației, conexiunea prin tehnologia Wi-Fi nu este realizată într-un mod foarte diferit de cel utilizat în precedenta versiune. Protocolul care a fost ales pentru realizarea conexiunii în prezenta versiune este același, și anume TCP/IP, iar componentul cel mai important pentru realizarea conexiunii este socket-ul.

Dacă în precedenta versiune a aplicației am ales să utilizez socket-urile simple, cele care nu oferă o securitate a mesajelor sau a datelor care sunt transmise de la client la server și de la server la client, pentru noua versiune a fost necesară implementarea socket-urilor SSL, deoarece acestea fac posibilă criptarea datelor care sunt transmise de la client la server și de la server la client. Chiar dacă utilizatorului îi este recomandată utilizarea unei rețele Wi-Fi private, pentru că aceasta oferă o securitate a datelor prin utilizarea unei parole și a unui certificat, am considerat foarte important și modul de conectare din cadrul aplicației care trebuie de asemenea să ofere securitate pentru schimbul de mesaje dintre aplicația client și aplicația server.

Pentru a se putea realiza implementarea socket-urilor SSL, a fost necesară crearea a două chei de securitate, și anume o cheie de tipul BKS pentru aplicația client, iar o cheie de tipul JKS pentru aplicația server. Aplicația client a fost realizată prin utilizarea de cod Java, dar în ceea ce privește cheia de securitate, platforma Android nu suportă decât cheia de tipul BKS.

Astfel că, pentru realizarea acestor două chei de securitate a fost utilizată aplicația Portecle, aceasta reprezentând o aplicația cu o interfață a utilizatorului foarte ușor de folosit cu ajutorul căreia se poate crea, administra, examina diferite tipuri de chei de securitate și certificate de securitate. [19]

BKS reprezintă un format de chei de securitate furnizat de către Bouncy Castle, un furnizor de biblioteci criptografice Java. Acest format de chei de securitate este similar cu JKS, acesta reprezentând un format de chei de securitate furnizat de către Oracle. [20]

Fișierele BKS pot conține chei publice, inclusiv certificate, precum și chei private. Fișierele BKS se bazează pe criptarea bazată pe parolă pentru a oferi protecție de confidențialitate și integritate conținutului cheilor de securitate. [21]

JKS, cunoscut și ca Java Keystore reprezintă un depozit de certificate de securitate – fie certificate de autorizare sau certificate de chei publice – plus cheile private corespunzătoare, utilizate de exemplu în criptarea SSL. Datele înscrise în aceste depozit sunt protejate de o parolă pentru aceste chei de securitate. O intrare în acest depozit de chei este identificată de un alias și alcătuit din chei și certificate care formează un lanț de încredere. [22]

Partea de conectare prin utilizarea tehnologiei Wi-Fi este realizată în cadrul aplicației ADMote Control într-un thread separat, deoarece thread-ul principal este utilizat pentru operațiile ce se desfășoară la nivelul interfeței de utilizator. Astfel că, pentru evitarea oricăror probleme care pot apărea în momentul în care utilizatorul interacționează cu aplicația, conectarea și menținerea conexiunii de-a lungul timpului în care aplicația rulează, este realizată cu ajutorul clasei AsyncTask.

Aceasta reprezintă o clasă abstractă care este utilizată cu scopul de a se putea realiza o manevrare mult mai eficientă a thread-ului asociat interfeței principale a utilizatorului. Clasa AsyncTask permite realizarea operațiilor de lungă durată care de obicei sunt realizate în fundal, iar mai apoi afișarea rezultatelor pe thread-ul asociat interfeței de utilizator fără a afecta thread-ul principal. [23]

În cadrul proiectului, pentru realizarea conexiunii dintre client și server prin utilizarea socket-urilor SSL, a fost necesară crearea unei clase Java numita „CreateConnection.java”, în această clasă având loc toate operațiile necesare realizării cu succes a conexiunii. Conținutul clasei AsyncTask este moștenit de către clasa "CreateConnection.java”, metoda principală utilizată pentru realizarea operațiilor este metoda doInBackground(String… params), în acestă metodă având loc în fundal diferite operații precum declararea și inițializarea cheii de securitate BKS, declararea și inițializarea socket-ului SSL dar și trimiterea mesajelor de conectare către server și recepționarea mesajelor care conțin răspunsul pe care acesta îl returnează aplicației client.

Procesul de conectare nu este unul foarte complicat, conexiunea putând fi realizată prin urmărirea anumitor pași foarte importanți. Primul dintre aceștia este reprezentat de declararea și inițializarea cheii de securitate de tipul BKS. Fișierul “admotecontrol.bks”, care reprezintă fișierul creat pentru îmbunătățirea securității datelor, a fost introdus în folderul asociat proiectului, astfel încât să poată constitui o resursă din cadrul aplicației care poate fi utilizată cu scopul de a oferi securitate datelor necesare conectării și funcționării optime a aplicației din punctul de vedere al schimbului de mesaje necesar pentru controlul calculatorului. După cum este prezentat în codul de mai jos, pentru ca fișierul „admotecontrol.bks” să poată fi utilizat ca o resursă necesară securității datelor, în timpul încărcării și inițializării acestuia este necesară introducerea parolei care a fost setată pentru acea cheie de securitate, astfel încât să fie permisă utilizarea acestei chei în cadrul aplicației.

Codul 2 Cod sursă pentru încărcarea și inițializarea cheii de securitate de tipul BKS

Codul 3 Cod sursă pentru inițializarea conexiunii dintre client și server prin utilizarea socket-ului de tipul SSL

Codul 3 prezintă inițializarea conexiunii dintre clientul și serverul ADMote Control, utilizându-se socket-ul de tip SSL. Socket-ul asociat clientului este creat pe baza detaliilor de conectare care sunt preluate din câmpul de editare a textului unde utilizatorul trebuie să introducă adresa IPv4 și portul afișat în interfața serverului. Pentru ca cele două componente majore ale proiectului să poată comunica este necesară realizarea unei strângeri de mâini sau mai precis a unui acord dintre client și server cu referire la cheia de securitate, astfel că atât clientul cât și serverul vor trebui să primească acceptul de a utiliza cheia de securitate, acest accept fiind primit în momentul în care se constată faptul că atât cheia introdusă ca resursă pentru aplicația client cât și cheia introdusă ca resursă pentru aplicația server, conțin aceleași detalii descriptive ale entității care le-au creat și doresc a le utiliza, dar reușesc să se și autentifice utilizând parola setată de respectiva entitate în momentul constituirii acelei chei de securitate.

Procedura de conectare este aceeași atât în momentul în care utilizatorul introduce manual datele de conectare cât și în momentul în care utilizatorul decide să realizeze conectarea dintre client și server cu ajutorul datelor de conectare deja salvate în interfața de conectare din cadrul aplicației client.

În momentul în care conexiunea a fost realizată cu succes, se poate începe procesul de comunicare sau mai bine spus de schimb de mesaje dintre aplicația client și aplicația server. Mesajele pe care cele două componente le pot schimba între ele sunt de mai multe tipuri, cum ar fi: String, Float, Double, Long și Int. Această abordare a modului de realizare a comunicării dintre aplicația client și aplicația server este prezentată și în Codul 4.

Codul 4 Cod sursă pentru procesul de comunicare dintre aplicația client și aplicația server

În momentul în care conexiunea este resetată sau clientul este deconectat, socket-ul asociat aplicației client va fi deconectat dar și distrus împreună cu obiectele care asigură stream-ul de date de intrare și de ieșire. Această operație are loc în etapa de închidere a clientului ADMote Control sau mai precis cu ajutorul metodei onDestroy(), lucru care este ilustrat și în figura de mai jos.

Codul 5 Cod sursă pentru procesul de distrugere al socket-ului asociat aplicației client. Închiderea conexiunii dintre client și server.

O altă îmbunătățire adusă proiectului ADMote Control a fost implementarea funcției de conectare prin utilizarea tehnologiei Bluetooth. Am dorit să implementez această nouă funcție deoarece am considerat că ar fi foarte utilă pentru persoanele care doresc să controleze calculatorul de la distanță prin intermediul dispozitivului Android dar nu pot să își conecteze dispozitivul la o rețea Wi-Fi, fie că aceasta are un semnal slab, fie că este inexistentă în locația unde se află utilizatorul în acel moment. Controlul calculatorului prin intermediul unei conexiuni Bluetooth nu este diferit de controlul calculatorului prin intermediul unei conexiuni Wi-Fi. Procesul de comunicare rămâne același, având la bază schimbul de mesaje dintre aplicația client și aplicația server. Spre deosebire de modul de conectare utilizând o rețea Wi-Fi unde a fost necesară implementarea socket-urilor SSL, pentru conectarea și controlul calculatorului utilizând tehnologia Bluetooth nu a mai fost necesară adăugare unei chei de securitate.

Primul pas pentru stabilirea unei conexiuni între aplicația client și aplicația server este realizarea împerecherii celor două dispozitive care urmează să comunice. Pentru a se putea realiza această împerechere este necesară activarea tehnologiei Bluetooth pe ambele dispozitive. Această împerechere poate fi făcută atât în modul clasic, prin utilizarea setărilor telefonului și calculatorului de unde utilizatorul poate selecta dispozitivul cu care se dorește a se realiza împerecherea, dar și prin accesarea interfeței grafice care a fost implementată în cadrul aplicației ADMote Control. Interfața grafică a fragmentului de conectare prin intermediul tehnologiei Bluetooth poate fi accesat în două moduri, ca și fragmentul de conectare prin intermediul tehnologiei Wi-Fi, și anume fie prin selectarea butonului de tip imagine prezent pe activitatea principală a aplicației, fie prin accesarea opțiunii de conectare prin Bluetooth prezentă în meniul aplicației implementat sub forma unei bare de navigare.

Figura 15 Fragmentul de conectare prin utilizarea tehnologiei Bluetooth. Afișarea mesajului de confirmare.

Imaginea din partea stângă a figurii 15 prezintă interfața grafică a funcției de conectare prin utilizarea tehnologiei Bluetooth. Această interfață prezintă un fundal de culoare închisă și este alcătuită din mai mult elemente precum: câmp de afișare a textului acesta reprezentând un titlu al fiecărei secțiuni din cadrul interfeței (Dispozitive Asociate respectiv Dispozitive Disponibile), două elemente de tip ListView care sunt populate cu informații referitoare la dispozitivele care deja sunt asociate cu dispozitivul Android cât și informații referitoare la dispozitivele disponibile pentru realizarea împerecherii, aceste dispozitive fiind afișate în cadrul acestei interfețe grafice odată ce butonul “Scanare pentru dispozitive noi” va fi selectat de către utilizator. În momentul în care utilizatorul va selecta un dispozitiv care a fost detectat ca fiind un dispozitiv disponibil pentru a se realiza împerecherea, pe ecranul dispozitivului Android cât și pe ecranul calculatorului sau laptop-ului va fi afișat un dialog care va întreba utilizatorul daca este de acord să se realizeze împerecherea între aceste dispozitive și de asemenea va ruga utilizatorul să introducă un cod de securitate pe dispozitivul Android, cod care este generat de către calculatorul sau laptopul care se dorește a fi controlat. Dacă împerecherea a avut loc cu succes, conexiunea dintre cele două dispozitive va deveni activă iar calculatorul sau laptopul va fi afișat în secțiunea de dispozitive asociate, astfel încât utilizatorul să poată realiza conectarea mult mai repede la următoarea utilizare a aplicației. Totodată, dacă cele două dispozitive vor putea să înceapă să comunice utilizatorul va fi notificat prin afișarea unui mesaj de tipul Toast care prezintă mesajul “Conectat la: Id-ul dispozitivului”, după cum poate fi observat în imaginea din partea dreaptă a figurii 15.

Figura 16 prezintă momentul în care conexiunea dintre aplicația client și aplicația server este incertă, iar în final eșuează, utilizatorul fiind notificat prin intermediul unui mesaj de tipul Toast. În momentul în care conexiunea este incertă, utilizatorul va fi notificat prin afișarea unui mesaj de tipul Toast “Connecting…”, acesta ilustrând faptul că de această dată realizarea conexiunii durează mai mult decât de obicei. Dispariția acestui mesaj este automată și va fi realizată în două cazuri, fie în momentul în care conexiunea este realizată cu succes si astfel utilizatorul va fi notificat prin apariția mesajului de confirmare a conexiunii, prezentat în figura 15, fie în momentul în care conexiunea eșuează, moment în care utilizatorul va fi notificat prin apariția unui mesaj de tipul Toast “Unable to connect to this device”, acest moment fiind prezentat în a doua imagine din cadrul figurii 16.

Figura 16 Funcția de conectare utilizând tehnologia Bluetooth. Eroare la conectare.

După terminarea implementării acestor funcții, au fost realizate și teste pentru a se observa dacă există probleme sau întârzieri în momentul realizării conexiunii sau pe parcursul controlului calculatorului. Conectarea s-a realizat cu succes pentru ambele moduri de conectare, însă conectarea cu ajutorul tehnologiei Bluetooth a fost realizată mult mai rapid decât în cazul conectării cu ajutorul tehnologiei Wi-Fi, fapt determinat și de rețelele Wi-Fi utilizate în momentul testului sau de utilizarea lățimii de bandă a rețelei în acel moment. Am observat faptul că în momentul în care rețeaua nu este utilizată de alte programe sau aplicații, conexiunea prin intermediul rețelei Wi-Fi cât și controlul calculatorului odată ce conexiunea este realizată cu succes, funcționează foarte bine, neexistând întârzieri în executarea comenzilor pe care aplicația client le trimite aplicației server. Cât despre controlul calculatorului prin intermediul tehnologiei Bluetooth, nu au existat întârzieri în transmiterea și recepția mesajelor de către aplicațiile client și server.

Fiecare mod de conectare oferă utilizatorului atât avantaje cât și dezavantaje în momentul utilizării aplicației. Modul de conectare prin Wi-Fi oferă utilizatorului posibilitatea controlului calculatorului chiar dacă dispozitivul Android se află la o distanță mare de calculator sau laptop, conexiunea rămânând activă atât timp cât conexiunea Wi-Fi este disponibilă, iar din punctul de vedere al dezavantajelor pot spune că singurul dezavantaj este acela de a exista o întârziere în momentul în care are loc comunicarea dintre dispozitive, acest lucru fiind determinat de posibilitatea ca rețeaua utilizată să fie slabă din punctul de vedere al calității semnalului sau să fie supra-aglomerată, prin prezența mai multor dispozitive conectate simultan. În ceea ce privește conexiunea prin utilizarea tehnologiei Bluetooth, principalul avantaj este acela că schimbul de mesaje necesar controlului calculatorului sau laptopului este realizat mai rapid decât în cazul rețelei Wi-Fi, dar acest dezavantaj al rețelei Wi-Fi poate fi rectificat prin abonarea utilizatorului la un serviciu mai bun de internet sau conectarea la o rețea cu o lățime de bandă mai bună, iar din punctul de vedere al dezavantajelor conexiunii dintre aplicația client și aplicația server realizată cu ajutorul tehnologiei Bluetooth, pot spune că cel mai vizibil este acela că serviciul Bluetooth nu poate funcționa dacă există o distanță prea mare între dispozitivul Android și calculatorul sau laptopul ce se dorește a fi controlat.

3.1.2 Telecomenzi disponibile în cadrul aplicației ADMote Control

Ideea inițială de la care s-a pornit dezvoltarea aplicației a fost aceea de a realiza o aplicație care să ofere utilizatorului posibilitatea de a putea controla principalele componente al calculatorului și anume mouse-ul și tastatura, cu ajutorul telefonului sau tabletei Android. Datorită faptului că această idee părea a fi mult prea de bază și că nu exista niciun element care să ofere originalitate proiectului, am hotărât să implementez pe lângă funcțiile de bază referitoare la controlul mouse-ului și tastaturii, și noi funcții precum controlul mediilor de redare, controlul prezentărilor sau controlul statusului unui calculator.

Prima versiune a aplicației, lansată în urmă cu 2 ani, oferea utilizatorului posibilitatea de a controla mouse-ul, tastatura, 4 medii de redare (YouTube, Windows Media Player, BSPlayer și VLC Player), prezentările realizate în aplicația PowerPoint dar și statusul calculatorului. Toate aceste funcții de control au fost implementate pe baza aceluiași principiu și anume al schimbului de mesaje dintre aplicația client și aplicația server. Mai precis, în momentul în care utilizatorul aplicației client selectează un element de tipul buton din cadrul unei interfețe grafice asociate cu o telecomandă, este trimisă o comandă către server, comandă care va fi analizată, înțeleasă și mai apoi executată. Pentru executarea unei comenzi, odată ce aceasta a fost înțeleasă, este utilizată în cadrul aplicației server, o clasă Java numită Robot, această clasă acționând ca o tastatură sau ca un mouse virtual, simulând acțiunile care pot fi executate cu ajutorul acestor componente ale unui calculator. Fiecărei telecomenzi care asigură funcția de control al unei componente a calculatorului sau al unei aplicații care rulează pe calculator, îi este asociat un fragment unde sunt implementate comenzile pe care aplicația client le trimite aplicației server, dar și o interfață grafică, constituită din mai multe elemente cu ajutorul cărora utilizatorul poate controla calculatorul sau laptopul.

Codul 6 Cod sursă pentru implementarea funcției de control a mișcării cursorului

Prima telecomandă implementată a fost telecomanda care asigură funcția de control al mouse-ului. Din punctul de vedere al implementării, aceasta este alcătuită dintr-un fragment numit „MouseFragment.java” și dintr-o interfață grafică numită “fragment_mouse.xml”. Acestă telecomandă asigură controlului cursorului, controlul butoanelor click stânga și click dreapta, dar și controlul rotiței utilizate pentru derularea unei pagini, a unui document sau în alte scopuri. Pentru a putea fi realizat controlul cursorului, a fost necesară implementarea în cadrul interfeței grafice, a unui element de tipul ImageView, acest element reprezentând mouse pad-ul, aceasta fiind suprafața cu ajutorul căreia se poate realiza mișcarea cursorului.

Codul 6 prezintă codul Java implementat pentru a putea fi realizată funcția de control al mișcării cursorului. Această mișcare a cursorului face parte dintr-o serie de mai multe acțiuni care au fost implementate cu ajutorul unui obiect numit MotionEvent, acest obiect fiind folosit pentru a raporta evenimentele de mișcare realizate cu ajutorul unui mouse, stilou, deget sau a unui dispozitiv de tipul trackball. [24]

Cu ajutorul obiectului MotionEvent au fost implementate mai multe acțiuni prin care a fost realizată simularea principalelor gesturi utilizate pentru mișcarea cursorului. Primul gest al oricărui utilizator de touchpad este acela de a atinge touchpad-ul cu degetul, acesta fiind gestul inițial. Astfel că, în momentul în care utilizatorul atinge ecranul telefonului, va avea loc o acțiune numită ACTION_DOWN prin care sunt atribuite două valori variabilelor de tipul Float numite initX și initY, aceste valori reprezentând poziția inițială a degetului pe ecranului telefonului. Cel de-al doilea gest al utilizatorului este acela de a mișca degetul pe touchpad, sau în cazul controlului prin intermediul telefonului de a mișca degetul pe ecranul telefonului, aceasta reprezentând o nouă acțiune numită ACTION_MOVE, fapt care va determina atribuirea a două valori variabilelor de tipul Float numite disX și disY, aceste valori reprezentând mișcarea cursorului în direcția X sau în direcția Y. Dacă aceste două valori sunt diferite de 0, vor fi trimise 3 mesaje către aplicația server și anume un mesaj de tipul String “MOUSE_MOVE” prin care i se va comunica serverului faptul că prin intermediul clasei Java Robot va fi necesară simularea mișcării mouse-ului, și alte două mesaje de tipul Float prin care vor fi transmise serverului valorile care reprezintă direcția X și direcția Y în care trebuie să se realizeze mișcarea cursorului.

Acțiunea numită ACTION_MOVE este constituită pentru a putea fi aplicată atât mișcării cursorului cât și a acțiunii de derulare utilizându-se rotița mouse-ului. Astfel că, dacă utilizatorul va folosi doar un singur deget în momentul în care atinge ecranul, această acțiune va fi considerată mișcarea cursorului pe ecranul calculatorului, iar dacă utilizatorul va utiliza două degete în momentul în care atinge ecranul și dacă va mișca aceste două degete doar pe axa Y, adică de sus în jos sau de jos în sus, această acțiune va fi consideră derularea utilizând cursorul mouse-ului. În acest caz serverul va primi două mesaje, primul dintre acestea fiind un mesaj de tipul String „MOUSE_WHEEL”, prin care i se va comunica faptul că prin intermediul clasei Java Robot va fi necesară simularea utilizării rotiței mouse-ului, iar cel de-al doilea va fi un mesaj de tipul Float prin care va fi transmisă serverului valoarea care reprezintă direcția Y asociată acțiunii de derulare prin utilizarea rotiței mouse-ului.

În cadrul aceluiași fragment au fost implementate și două butoane de tip imagine cu ajutorul cărora sunt îndeplinite alte două funcții ale mouse-ului și anume click-ul stânga respectiv click-ul dreapta. Implementarea comenzilor care sunt trimise către server pentru a putea fi îndeplinite aceste funcții este realizată prin crearea în cadrul acestui fragment a 4 metode în cadrul cărora este creat mesajul care va fi trimis către server, acesta fiind de tipul String, și de asemenea se va realiza trimiterea mesajului de la client la server. Dintre cele 4 metode create, 2 sunt responsabile pentru trimiterea mesajelor în cazul în care conexiunea a fost realizată prin Wi-Fi, iar celelalte 2 sunt responsabile pentru trimiterea mesajelor în cazul în care conexiunea a fost realizată prin Bluetooth, implementarea acestor metode putând fi observată în Codul 7.

Codul 7 Cod sursă pentru simularea utilizării butoanelor de click stânga și click dreapta

Din punctul de vedere al design-ului, interfața grafică a funcției de control a mouse-ului a fost modificată de mai multe ori, fiind eliminate anumite elemente sau adăugate noi elemente pentru a îndeplini funcțiile implementate sau cu scopul de a informa utilizatorul. Interfața grafică utilizată în prima versiune a aplicației, a reprezentat o interfață de bază, cu puține elemente, acest lucru fiind determinat și de numărul de funcții implementate în acel moment. Vechiul layout era constituit dintr-un element de tipul ImageView, acesta reprezentând suprafața asociată mouse pad-ului, și din două butoane de tip imagine, acestea reprezentând butoanele prin care utilizatorul putea utiliza click-ul stânga și click-ul dreapta. În partea stângă a figurii de mai jos este prezentată interfața grafică din versiunea precedentă a aplicației, în timp ce în partea dreaptă a figurii de mai jos este prezentată interfața grafică a versiunii actuale a aplicației, putând fi observate noile elemente adăugate acestui layout.

Figura 17 Evoluția layout-ului asociat fragmentului de control al mouse-ului

Noul design asociat fragmentului de control al mouse-ului a fost modificat atât din punctul de vedere al culorilor, cât și din punctul de vedere al elementelor grafice. Prima diferență dintre versiunea precedentă și versiunea actuală a aplicației în ceea ce privește elementele grafice, este înlocuirea imaginii din mijlocul ecranului cu 3 elemente de tip text care au rolul de a informa utilizatorul cu referire la modul de utilizare al spațiului care reprezintă mouse pad-ul. A doua diferență este adăugarea a 6 butoane de tip text pentru a oferi utilizatorului posibilitatea de a comuta într-un mod mai simplu de la funcția de control al mouse-ului la funcția de control al tastaturii. A fost necesară implementarea a 6 butoane de tip text, deoarece în versiunea curentă a aplicației, utilizatorul poate controla 6 tastaturi diferite, și anume tastatura în limba engleză, aceasta fiind tastatura de bază, plus alte 5 tastaturi asociate altor limbi precum română, rusă, poloneză, franceză și germană.

Funcția de control al tastaturii a fost realizată pe baza aceluiași principiu de comunicare între aplicația client și aplicația server, prin schimbul de mesaje, în cazul acesta mesajele fiind numai de tipul String, acest lucru putând fi observat în Codul 8.

Codul 8 Cod sursă pentru transmiterea mesajelor de tipul String pentru îndeplinirea funcției de control a tastaturii

Interfața grafică asociată funcției de control a tastaturii a fost împărțită în două secțiuni, partea de jos a interfeței fiind rezervată elementelor grafice necesare pentru realizarea unei tastaturi customizate care să cuprindă literele, cifrele dar și caracterele speciale, în timp ce partea de sus a fost rezervată celorlalte funcții ale tastaturii precum tastele Shift, Caps Lock, Alt etc. , dar și a unor comenzi care pot fi realizate cu ajutorul tastaturii, comenzi precum: copierea, lipirea, selectarea totală a textului, deschiderea managerului de programe și multe altele.

Inițial, aplicația a fost constituită doar dintr-o singură tastatură, cea de bază, care nu conține caractere speciale, sau mai bine spus tastatura asociată limbii engleze, dar prin faptul că aplicația a fost descărcată și de persoane care de cele mai multe ori utilizează și alte caractere, caractere asociate altor limbi, am decis să implementez alte 5 noi tastaturi. Este adevărat faptul că și prin intermediul tastaturii asociate limbii engleze utilizatorii pot controla alte tastaturi precum tastatura asociată limbii române, însă această modalitate este mult mai dificilă, deoarece în general caracterele asociate limbilor străine pot fi utilizate prin apăsarea unor caractere speciale, mulți dintre utilizatori necunoscând acest lucru. Astfel că, aplicația ADMote Control oferă un mod mai simplu de utilizare a unei tastaturi asociate altei limbi, deoarece caracterele asociate acelei limbi sunt deja afișate în interfața de utilizator, iar în momentul în care utilizatorul va selecta acel element grafic de tip buton, asociat respectivului caracter, pe ecranul calculatorului sau laptopului va fi afișat caracterul pe care utilizatorul a dorit să îl scrie. Pentru a putea controla o tastatură asociată altei limbi, utilizatorul va trebui să instaleze în cadrul sistemului de operare, pachetul de limbi pe care dorește să îl utilizeze.

Figura 18 Interfața grafică a funcției de control a tastaturii. Versiunea actuală a aplicației.

Figura 18 prezintă interfața grafică a funcției de control a tastaturii din cadrul versiunii curente a aplicației, această nouă interfață grafică fiind realizată pe baza interfeței grafice din versiunea precedentă, principalele modificări aduse acesteia fiind schimbarea culorii de fundal și realizarea unor butoane customizate din punctul de vedere al culorilor și al efectului care poate fi vizualizat în momentul în care utilizatorul interacționează cu aplicația. Pe lângă elementele grafice care asigură controlul tastaturii asociate diferitelor limbi, elemente care sunt disponibile în cadrul tuturor layout-urilor, utilizatorului i se oferă și posibilitatea de a comuta de la un tip de tastatură la altul, prin utilizarea butonului de activare sau dezactivare a unei anumite limbi.

Modul de comunicare dintre aplicația client și aplicația server, realizat prin schimbul de mesaje, a făcut posibilă și evoluția altor caracteristici ale aplicației, acestea nefiind incluse în ideea inițială de dezvoltare a aplicației.

Prima dintre aceste caracteristici, este reprezentată de funcția de control al mediilor de redare. Versiunea precedentă a aplicației, a oferit utilizatorului posibilitatea de a controla 4 medii de redare, unul dintre acestea fiind YouTube, un serviciu de streaming online și de vizionare a videoclipurilor, iar celelalte 3 reprezentând programe care necesită instalarea pe calculator sau laptop, programe precum Windows Media Player, VLC Player, BSPlayer.

Fiecare mediu de redare a fost asociat unui Fragment, care la rândul său a avut asociat un layout. Fiecare layout a fost alcătuit din mai multe butoane de tip imagine, prin intermediul acestor elemente grafice utilizatorul putând controla mediul de redare selectat.

Inițial, s-a dorit realizarea unei singure interfețe grafice care să conțină mai multe butoane prin care să poată fi controlate funcțiile asociate unui media player, dar acest lucru nu a fost posibil deoarece fiecare media player are asociat un set de scurtături, sau mai bine spus un set de controale ce pot fi realizate cu ajutorul tastaturii, iar de cele mai multe ori aceste scurtături sunt diferite de la un mediu de redare la altul. Astfel că, a fost necesară o abordare diferită pentru această situație, rezultatul fiind crearea mai multor interfețe grafice. Pentru a se putea implementa această funcție de control a mediilor de redare, a fost necesară realizarea unei cercetări în ceea ce privește scurtăturile care sunt puse la dispoziție utilizatorului de către compania care a dezvoltat acel program sau serviciu online, prin intermediul acestei cercetări descoperind faptul că unele medii de redare pun la dispoziție mai multe scurtături pentru utilizatori, dar și faptul că unele medii de redare prezintă funcții de control care nu pot fi regăsite în alte medii de redare, fapt care a și determinat realizarea unor layout-uri customizate din punctul de vedere al butoanelor de tip imagine, aceste butoane fiind selecționate și implementate pe baza scurtăturilor disponibile. Toate cele 4 medii de redare implementate în versiunea precedentă au prezentat funcții de control de bază precum redare și pauză, oprire, derulare înainte și înapoi, modificarea volumului sau selectarea următorului video sau a următoarei melodii, diferențele dintre acestea fiind reprezentate de funcțiile diferite, un exemplu fiind funcția de activare a căutării în cazul utilizării mediului de redare asociat serviciului YouTube, funcție care nu este disponibilă în cadrul celorlalte medii de redare. Fiecărui element grafic de tipul buton din cadrul unei interfețe grafice, i-a fost asociată o comandă de control alcătuită dintr-un mesaj care poate fi trimis serverului în momentul în care utilizatorul selectează acel buton.

Figura 19 Interfața grafică a funcției de control a mediilor de redare. Versiunea precedentă a aplicației.

Figura 19 prezintă interfața grafică a două dintre mediile de redare implementate în prima versiune a aplicației, și anume mediul de redare asociat serviciului YouTube, respectiv mediul de redare al sistemului de operare Windows, numit Windows Media Player. Această interfață grafică a fost de asemenea una de bază, nefiind alcătuită din elemente grafice complexe. Utilizatorul putea selecta mediul de redare pe care dorea să îl controleze fie prin selectarea pictogramei asociate mediului de redare, aceste pictograme aflându-se în partea de sus a ecranului, fie prin derularea stânga-dreapta, gest cu ajutorul căruia se putea realiza tranziția dintre mediile de redare disponibile.

În cadrul versiunii actuale a aplicației ADMote Control, au fost implementate pe lângă cele 4 medii de redare existente, alte 8 medii de redare, acestea fiind asociate fie cu servicii de streaming online, fie cu programe care necesită instalate pentru a putea fi controlate. Astfel că, în acest moment utilizatorul poate controla mediile de redare asociate serviciilor de streaming video YouTube, Netflix, HBO GO, Crunchyroll și Twitch, serviciilor de streaming audio Spotify, Google Music și Soundcloud, dar și programelor din categoria de redare video-audio, acestea fiind Windows Media Player, VLC Player, BSPlayer și Winamp.

Datorită faptului că în acest moment în cadrul aplicației există 12 medii de redare diferite, a fost necesară crearea unui meniu, prin intermediul căruia utilizatorul să poată vizualiza mediile de redare disponibile și totodată să poată selecționa mediul de redare pe care dorește să îl controleze.

Acest meniu este alcătuit dintr-un element grafic de tipul ListView, acesta reprezentând o componentă a kit-ului de dezvoltare Android, prin intermediul căruia poate fi afișată o listă de elemente, utilizatorul având opțiunea de a derula pagina pentru a vizualiza toate opțiunile disponibile în cadrul acelei liste, și de asemenea poate selecta oricare dintre aceste opțiuni, selectarea reprezentând un mod prin care utilizatorul interacționează cu aplicația și totodată un mod de realizare a unei tranziții dintre activități și fragmente sau vice-versa. [25]

Fiecare opțiune adăugată în lista asociată acestui meniu este reprezentată de logo-ul fiecărui mediu de redare, fiecare logo fiind implementat sub forma unei pictograme. Acest tip de implementare a fost posibilă prin utilizarea unui obiect de tipul Adaptor. Un adaptor gestionează modelul datelor și îl adaptează pentru fiecare opțiune implementată într-o listă. Astfel că, fiecare rând adăugat unei liste are asociat un layout prin care poate fi prezentată data asociată acelei opțiuni. [25]

Figura 20 prezintă meniul asociat funcțiilor de control al mediilor de redare, putând a fi observată implementarea elementului grafic de tipul ListView dar și implementarea obiectului de tip Adaptor pentru crearea fiecărui rând din cadrul acestei liste. Layout-ul asociat fiecărui rând este alcătuit din două pictograme, prima dintre acestea fiind o pictogramă sub forma unui lacăt, iar cea de-a doua pictogramă reprezintă logo-ul mediului de redare asociat acelui rând. Pictograma sub formă de lacăt a fost adăugată deoarece funcția de control al mediilor de redare în cadrul versiunii curente a aplicației ADMote Control, este o funcție premium, ce necesită a fi deblocată. Astfel că, în momentul în care utilizatorul va selecta oricare dintre mediile de redare, pe ecranul telefonului va apărea o alertă de tip dialog prin intermediul căreia utilizatorul va fi informat despre faptul că funcția pe care dorește să o acceseze este o funcție premium, care poate fi deblocată prin două metode, și anume vizionarea unei reclame, funcția fiind deblocată temporar sau prin achiziționarea serviciului, astfel încât funcția să rămână deblocată permanent.

Figura 20 Meniul asociat funcțiilor de control ale mediilor de redare

În momentul în care utilizatorul fie va urmări un anunț, fie va achiziționa serviciul de deblocare al funcției de control a mediilor de redare, în cadrul aplicației va fi salvată acțiunea pe care utilizatorul a realizat-o, acest lucru fiind necesar pentru a se putea evita anumite situații prin care utilizatorul să fie dezamăgit din cauza unei experiențe neplăcute apărute în timpul utilizării aplicației. În acest caz, o situație neplăcută care ar putea apărea în timpul utilizării aplicației ar fi menținerea statusului de opțiune blocată asupra mediului de redare, chiar dacă utilizatorul a urmărit un anunț sau a achiziționat serviciul de deblocare. Această procedură de deblocare a funcțiilor a fost implementată nu doar pentru mediile de redare cât și pentru alte funcții de control din cadrul aplicației.

Salvarea acțiunilor pe care utilizatorul le-a realizat în momentul în care a interacționat cu aplicația este posibilă datorită unei interfețe numite SharedPreferences. Această interfață este implementată în cadrul aplicațiilor Android pentru a se putea realiza accesarea și modificarea unui anumit set de preferințe. Datele asociate acestor seturi de preferințe pot fi returnate în cadrul unei activități sau a unui fragment prin utilizarea unei funcții numite getSharedPreferences(). [26]

În cazul aplicației ADMote Control, acest set de preferințe a fost implementat pentru a putea fi reținute anumite acțiuni pe care utilizatorul le-a realizat în cadrul aplicației, acțiuni precum vizionarea unei reclame, achiziționarea unui serviciu, accesarea unei anumite componente pentru prima oară sau schimbarea limbii asociată aplicației. Pentru realizarea unei preferințe sau a unui set de preferințe, a fost necesară declararea unei variabile de tipul SharedPreferences, căreia i s-a atribuit o valoare inițială, aceasta reprezentând valoarea din momentul în care nu a fost realizată acțiunea care necesită salvată. În momentul în care acțiunea este îndeplinită, este necesară modificarea valorii acelei variabile astfel încât salvarea să poată fi realizată cu succes. Editarea valorii unei preferințe poate fi făcută cu ajutorul editorului de preferințe, funcțiile principale de realizare a unei modificări fiind commit() respectiv apply(). [26]

Figura 21 Layout-ul asociat mediilor de redare Netflix și HBO GO

Figura 21 prezintă layout-ul asociat mediilor de redare care a fost deblocate, astfel că în acest moment utilizatorul poate controla serviciul sau programul deblocat cu ajutorul telefonului sau tabletei. Interfața grafică a funcției de control atât pentru mediile de redare deja implementate cât și pentru cele noi, a fost realizată pe baza vechiului layout, caracteristicile principale precum numărul butoanelor, forma acestora, sau poziția acestora fiind în continuare utilizate, aducându-se doar anumite modificări în ceea ce privește culoarea fundalului care a fost schimbat din culoarea albă într-o culoare mai închisă, dar și în ceea ce privește culoarea și efectul aplicat butoanelor pentru a putea fi realizată o interfață mult mai plăcută utilizatorului dar la fel de bună din punct de vedere funcțional. Utilizatorul poate trece de la un mediu de redare la altul prin două metode, prima dintre acestea fiind derularea stânga-dreapta, gest prin care se va realiza tranziția dintre fragmente sau prin selectarea pictogramei asociate mediului de redare, aceste pictograme fiind dispuse în partea de sus a ecranului, acestea având atât o funcție de informare cât și una de acces.

Pe lângă funcțiile de control al mouse-ului, tastaturii sau a mediilor de redare, în prima versiune a aplicației ADMote Control, au mai fost implementate încă două funcții și anume funcția de control al prezentărilor realizate cu ajutorul programului PowerPoint, respectiv funcția de control al statusului calculatorului. Ca și celelalte funcții, acestor două funcții le-au fost asociate un fragment pentru implementarea codului necesar funcționării, iar fragmentelor le-au fost asociate layout-uri pentru realizarea interfeței utilizatorului. Principiul de funcționare a fost același, bazându-se pe transmiterea mesajelor de tipul String de la aplicația client către aplicația server. Din punctul de vedere al interfeței utilizatorului, cele două funcții au fost alcătuite din doar 4 butoane fiecare, oferind utilizatorului doar funcțiile de bază pentru controlul prezentărilor precum pornirea prezentării, selectarea următorului sau precedentului diapozitiv și terminarea prezentării, în timp ce funcția de control al statusului calculatorului oferind posibilitatea utilizatorului de a afișa meniul de selectare al statusului, parcurgerea opțiunilor disponibile și mai apoi selectarea opțiunii dorite pentru modificarea statusului.

Figura 22 Layout-urile asociate funcțiilor de control al prezentărilor Powerpoint și al statusului calculatorului

Actuala versiune a aplicației ADMote Control încă include aceste funcții de control, singurele modificări aduse acestor funcții fiind legate de design-ul interfeței utilizatorului, prin modificarea culorii fundalului și prin adăugare unor noi butoane de tip imagine, care prezintă un efect în momentul în care utilizatorul interacționează cu interfața grafică. Noua interfață a utilizatorului pentru aceste două funcții este prezentată în figura 22.

De asemenea, în cadrul versiunii curente a aplicației a mai fost implementată încă o nouă funcție de control, similară celei pentru controlul prezentărilor PowerPoint, însă de acestă dată funcția de control a fost implementată pentru un serviciu oferit de Google, numit Google Slides, acesta fiind de asemenea utilizat pentru crearea prezentărilor. Astfel că, în acest moment utilizatorii aplicației ADMote Control pot controla atât prezentările realizate în PowerPoint cât și prezentările realizate cu ajutorul serviciului Google Slides.

Figura 23 Layout-ul asociat funcției de control a prezentărilor realizate cu ajutorul serviciului Google Slides

Design-ul asociat interfeței grafice utilizate pentru controlul prezentărilor realizate cu ajutorul serviciului Google Slides, nu este foarte diferit de cel al funcției de control a prezentărilor realizate cu ajutorul programului PowerPoint, singura diferență fiind culoarea butoanelor de tip imagine, care de această dată este albastră în loc de portocaliu. Design-ul asociat noii funcții de control implementate poate fi observat în figura 23.

Datorită faptului că numărul funcțiilor de control din cadrul aplicației a crescut, dar și a dorinței de a oferi utilizatorului încă o modalitate de a selecta funcția pe care dorește să o controleze, într-un mod mult mai simplu, aplicației i-a mai fost adăugat un meniu în care sunt prezentate funcțiile de control disponibile, acestui meniu fiindu-i atribuit un fragment numit “ChooseOptionsFragment.java”.

Figura 24 Layout-ul asociat meniului de prezentare și selectare a funcțiilor de control

Figura 24 prezintă layout-ul asociat meniului din cadrul versiunii curente a aplicației. Opțiunea de prezentare și selectare a funcțiilor de control este alcătuită din două elemente, primul dintre aceste fiind reprezentat de o pictogramă descriptivă, iar cel de-al doilea element reprezentând un text descriptiv cu referire la acea funcție. Trei dinte aceste funcții de control sunt inițial blocate, deoarece acestea sunt funcții premium, dar odată ce sunt deblocate vor putea fi utilizate.

3.1.3 Caracteristici noi ale aplicației ADMote Control

În cadrul noii versiuni a aplicației ADMote Control, noile funcții de conectare sau control nu au fost singurele implementate. Pe lângă acestea, au mai fost adăugate noi caracteristici cu scopul de a îmbunătăți calitatea aplicației, sau mai bine spus pentru a oferi utilizatorului un mod mult mai plăcut de a interacționa cu aplicația.

Prima dintre modificările aduse aplicației a fost realizarea de layout-uri alternative, acest lucru fiind necesar pentru ca aplicația să poată fi utilizată pe mai multe tipuri de dispozitive, fără a fi nevoie de a se realiza mai multe fișiere de instalare. Astfel că, în momentul în care utilizatorul descarcă și deschide aplicația, va fi recunoscută automat dimensiunea ecranului, iar fișierele asociate interfeței de utilizator vor fi încărcate pe baza configurației telefonului sau tabletei. Dimensiunea ecranului dispozitivelor Android poate varia, astfel că în prezent majoritatea telefoanelor prezintă un ecran de minim 5 inch, unele modele ajungând să aibă ecranul chiar de 8 sau 9 inch, acestea făcând parte din categoria dispozitivelor pliabile, iar în cazul tabletelor dimensiunea ecranului poate porni de la 7 inch și poate ajunge la 10.1 inch. [27]

Este adevărat faptul că există mai multe metode de realizare a unui layout flexibil care ulterior să fie disponibil pentru mai multe tipuri de dispozitive. Metoda cea mai des întâlnită este aceea de a utiliza un element grafic numit ConstraintLayout acesta făcând parte din kit-ul de dezvoltare specific aplicațiilor Android. ConstraintLayout permite specificare poziției și a mărimii fiecărui element grafic în funcție de relațiile spațiale cu alte elemente grafice. În acest mod, toate elementele grafice pot fi mutate și se pot sincroniza în funcție de dispozitivul pe care rulează aplicația. [27]

În momentul în care am decis să dezvolt aplicația astfel încât aceasta să fie disponibilă pentru mai multe tipuri de dispozitive, am încercat să utilizez această metodă de realizare a unui layout flexibil. Problema pe care am întâlnit-o și care m-a făcut să schimb modul de implementare a acestei caracteristici a aplicației, a fost acela că în ciuda faptul că elemente grafice pot fi sincronizate în funcție de dispozitivul pe care rulează aplicația, acestea nu puteau acoperi spațiul util al unui layout. De exemplu, pentru un anumit dispozitiv textul era afișat la o mărime acceptabilă, în timp ce pe alte dispozitive acesta era mult prea mic, această problemă apărând și în cazul butoanelor simple sau a celor de tip imagine.

De aceea, am decis utilizarea unei alte metode de implementare a layout-urilor pentru mai multe tipuri de dispozitive, această metodă fiind realizarea de layout-uri alternative. Această metodă constă în realizarea fișierelor asociate layout-ului pentru fiecare tip de dispozitiv Android. Această implementare este realizată pe baza unor calificative de configurare, acestea reprezentând spațiul de ecran disponibil pentru interfața utilizatorului asociată aplicației. Cel mai ușor de utilizat calificativ de configurare pentru realizarea layout-urilor alternative este calificativul „cea mai mică lățime”, acesta permițând realizarea layout-urilor pentru ecrane care au o lățime minimă, măsurată în pixeli independenți de densitate, cunoscuți în dezvoltarea aplicațiilor Android ca și DP sau DIP. [27]

Din punctul de vedere al lățimii minime a ecranelor, dispozitivele Android sunt împărțite în mai multe categorii:

360dp – ecran mic al telefonului

384dp – ecran mediu al telefonului

411dp – ecran mare al telefonului

600dp – ecran specific tabletei de 7 inch

720dp – ecran specific tabletei de 8.9 inch

800dp – ecran specific tabletei de 9 inch

900dp – ecran specific tabletei de 10.1 inch [27]

Layout-urile alternative create în cadrul aplicației ADMote Control au fost realizate ținându-se cont de aceste categorii de dispozitive. Este adevărat faptul că, o implementare de acest tip, din punctul de vedere al timpului care necesită alocat pentru constituirea layout-urilor nu este cel mai potrivit, deoarece crearea și mai apoi modificarea fiecărui fișier asociat interfeței utilizatorului poate costa mult timp, însă din punctul de vedere al modului de poziționare și sincronizare a elementelor grafice acestă metodă este mult mai potrivită datorită faptului că elementele pot fi customizate pe baza layout-ului, în acest fel neexistând probleme în ceea ce privește dimensiunea sau poziționarea anumitor elemente, aceste probleme apărând mult mai des în cazul utilizării modului ConstraintLayout.

Figura 25 Layout-urile alternative asociate fragmentului de setări al aplicației

Figura 25 prezintă layout-urile alternative create pentru fragmentul de setări al aplicației, acesta fiind alcătuit din fișierul principal “fragment_settings” plus alte 7 fișiere, acestea reprezentând layout-urile asociate fiecărui tip de dispozitiv. În dreptul fiecărui fișier este specificată categoria de dispozitive pentru care este disponibil layout-ul, data când au avut loc ultimele modificări dar și mărimea fișierului.

Pentru unele funcții ale aplicației, pe lângă crearea layout-urilor alternative, a fost nevoie și de crearea unor layout-uri care să fie atât specifice unui tip de dispozitiv dar și a unei limbi incluse în aplicație. Acest lucru a fost necesar, deoarece aplicația ADMote Control este disponibilă în prezent, în 14 limbi, această modificare adusă aplicației reprezentând de asemenea o nouă caracteristică disponibilă în versiunea curentă. Cele 14 limbi în care este disponibilă aplicația sunt: Engleză, Română, Franceză, Germană, Poloneză, Daneză, Suedeză, Norvegiană, Spaniolă, Portugheză, Italiană, Rusă, Ucrainiană și Turcă. Deoarece aplicația a început să fie utilizată și de persoane din alte țări, am considerat faptul că o prezentare a aplicației în mai multe limbi ar constitui un plus, pentru că astfel utilizatorul va putea înțelege mult mai ușor care sunt caracteristicile principale ale aplicației dar și modul de utilizare al acestora.

În momentul în care utilizatorul descarcă și deschide aplicația, aceasta va realiza o verificare în dispozitivul utilizatorului pentru a determina limba utilizată de acesta pentru celelalte funcții sau aplicații ale telefonului sau tabletei. Pe baza verificărilor care au loc în momentul deschiderii aplicației, vor fi încărcate fișierele asociate limbii care este utilizată pe respectivul dispozitiv. În cazul în care telefonul sau tableta utilizatorului sunt setate în alte limbi decât cele 14 disponibile în aplicație, atunci fișierele grafice asociate aplicației care vor fi încărcate, vor fi cele asociate limbii principale a aplicației și anume limba engleză.

Figura 26 Structura string-urilor din interiorul unui fișier “strings.xml”

Implementarea mai multor limbi în cadrul acestei aplicații a fost realizată prin traducerea fiecărui element de tipul String din cadrul aplicației. În cadrul unui proiect realizat pentru platforma Android, este recomandată adăugarea tuturor elementelor de tip text într-un fișier numit “strings.xml”. Fiecare text va avea un id unic, acesta putând a fi utilizat oriunde în cadrul aplicației, modul acesta de implementare find ilustrat în figura 26.

Dacă se dorește traducerea aplicației într-o altă limbă, atunci, va fi necesară crearea unui alt fișier numit “strings.xml”, dar se va specifica faptul că toate string-urile ce vor fi adăugate în acest fișier vor fi specifice unei alte limbi decât cea principală, structura fișierelor “strings.xml” asociate limbilor din cadrul aplicației fiind prezentată în figura 27.

Figura 27 Fișierul “strings.xml” asociat celor 14 limbi disponibile în cadrul aplicației

Pentru a veni în ajutor utilizatorului, în cazul în care telefonul este setat într-o anumită limbă dar se dorește utilizarea aplicației într-o limbă total diferită, au fost implementate în cadrul meniului de setări, opțiuni prin care se poate realiza modificarea limbii asociate aplicației doar printr-o singură apăsare de buton. Acest meniu de setări este de asemenea o nouă caracteristică implementată pentru aplicația ADMote Control, pe lângă opțiunile de schimbare a limbii, utilizatorul mai poate modifica și anumite caracteristici ale modului de vizualizare a aplicației, acesta fiind prestabilit în modul full screen, astfel că utilizatorul poate dezactiva modul full screen, poate șterge cache-ul salvat pentru acestă aplicație, și de asemenea poate modifica preferințele asociate reclamelor afișate în aplicație.

O altă caracteristică importantă, adăugată în noua versiune a aplicației o reprezintă implementarea unui fragment de informații. În cadrul acestui fragment, utilizatorul poate vizualiza informații asociate conexiunii care a fost efectuată, informații precum SSID-ul rețelei Wi-Fi pe care o utilizează (în cazul în care se realizează o conexiune utilizându-se această tehnologie) și adresa IP utilizată pentru realizarea conexiunii, dar de asemenea acest fragment de informații prezintă și mai multe modalități prin care utilizatorul poate contacta dezvoltatorul în cazul unei probleme sau dacă dorește a-i oferi feedback despre aplicație. Tot prin intermediul acestui fragment utilizatorul este informat cu referire la site-ul oficial al aplicației, sau cu referire la pagina de ajutor a aplicației, acestă pagină conținând diferite informații despre cum poate fi realizată conexiunea dintre aplicația client și aplicația server, sau despre cum pot fi utilizate funcțiile de control din cadrul aplicației ADMote Control.

Figura 28 Fragmentul asociat setărilor aplicației și fragmentul asociat informațiilor despre aplicație

Figura 28 prezintă interfețele utilizatorului pentru fragmentele asociate setărilor aplicației dar și a informațiilor despre aplicație. Implementarea acestor noi caracteristici ale aplicației s-a realizat treptat, acestea nefiind introduse în aplicație în același timp, însă și după ce acestea au fost implementate, s-au realizat modificări asupra design-ului, interfața utilizatorului în acest moment fiind cea ilustrată în figura 28. Modificări asupra design-ului dar și a codului necesar pentru îndeplinirea funcțiilor din cadrul acestor fragmente vor mai exista, dorind a adăuga mai multe limbi pentru această aplicație dar și anumite funcții noi prin care utilizatorul să își poată personaliza interfața aplicației dar și interacțiunea cu aceasta.

3.2 Dezvoltarea serverului ADMote Control

Acest tip de aplicație prin care se dorește realizarea unei telecomenzi prin care să poată fi controlat calculatorul sau laptopul cu ajutorul telefonului sau tabletei necesită pe lângă o componentă care să acționeze ca un client și o componentă care să acționeze ca și server. Principiul de funcționare al acestui tip de proiect se referă la realizarea unui schimb de mesaje între două aplicații, una care trebuie să ruleze pe dispozitivul Android, iar cealaltă pe calculator sau laptop. Astfel că, a fost necesară realizarea unei aplicații de tip server cu ajutorul căreia să se poată realiza comunicarea dintre cele două dispozitive. Pentru implementarea aplicației server au existat mai multe variante, una dintre acestea fiind utilizarea mediului de dezvoltare Microsoft Visual Studio și implicit a limbajul de programare C#. Cu toate acestea, am decis să realizez serverul cu ajutorul limbajul de programare Java, deoarece am considerat faptul că va exista o compatibilitate mai mare între cele două aplicații, datorită faptului că Java este un limbaj oficial al mediului de dezvoltare Android Studio. Un alt motiv pentru care am ales să dezvolt serverul cu ajutorul limbajului de programare Java, a fost acela că în cadrul acestui limbaj există o clasă numită Robot, cu ajutorul căreia pot fi simulate acțiunile de apăsare a unei taste sau mișcarea mouse-ului, astfel că, implementarea putea fi mai ușor de realizat. Mediul de dezvoltare utilizat pentru realizarea server-ului a fost Eclipse, iar datorită faptului că această implementare a fost de lungă durată și în continuare sunt realizate modificări asupra serverului, au fost utilizate mai multe versiuni ale acestui mediu de dezvoltare.

În cadrul serverului a fost realizată o clasă Java unde are loc implementarea clasei Robot, prin intermediul căreia sunt simulate diferitele acțiuni ce pot fi realizate cu ajutorul tastaturii sau mouse-ului. Fiecărei acțiuni îi este asociată o funcție unde sunt simulate acțiuni precum apăsarea unei taste și apoi eliberarea acesteia, sau mișcarea mouse-ului într-o anumită direcție, dar de asemenea sunt realizate și combinații de taste pentru anumite tipuri de comenzi.

Codul 9 prezintă această implementare a funcțiilor de control cu ajutorul clasei Robot, pentru fiecare simulare a utilizării unei taste având loc 2 acțiuni. Prima dintre acestea este reprezentată de comanda „keyPress”, prin intermediul acestei comenzi având loc acțiunea de apăsare a unei taste sub forma unui eveniment numit KeyEvent. Cea de-a doua acțiune este reprezentată de comanda „keyRelease”, prin intermediul acestei comenzi având loc acțiunea de eliberare a unei taste sub forma aceluiași eveniment numit KeyEvent. Între aceste două comenzi este setată și o întârziere de 10 ms pentru a putea fi simulată corect apăsarea și eliberarea unei taste sau a mai multor taste.

public void literaq() {

robot.keyPress(KeyEvent.VK_Q);

robot.delay(10);

robot.keyRelease(KeyEvent.VK_Q);

}

public void literaw() {

robot.keyPress(KeyEvent.VK_W);

robot.delay(10);

robot.keyRelease(KeyEvent.VK_W);

}

public void literae() {

robot.keyPress(KeyEvent.VK_E);

robot.delay(10);

robot.keyRelease(KeyEvent.VK_E);

}

public void literar() {

robot.keyPress(KeyEvent.VK_R);

robot.delay(10);

robot.keyRelease(KeyEvent.VK_R);

}

Codul 9 Cod sursă pentru funcțiile de control realizate cu ajutorul clasei Java Robot

message = (String) MainScreenController.objectInputStream.readObject();

int keyCode;

if (message != null) {

switch (message) {

case "LEFT_CLICK":

mouseControl.leftClick();

break;

case "RIGHT_CLICK":

mouseControl.rightClick();

break;

case "DOUBLE_CLICK":

mouseControl.doubleClick();

break;

case "MOUSE_WHEEL":

float scrollAmount =

(float) MainScreenController.objectInputStream.readObject();

mouseControl.mouseWheel(scrollAmount);

break;

case "MOUSE_MOVE":

float x = (float) MainScreenController.objectInputStream.readObject();

float y = (float) MainScreenController.objectInputStream.readObject();

Point point = MouseInfo.getPointerInfo().getLocation();

float nowx = point.x;

float nowy = point.y;

mouseControl.mouseMove((int) (nowx + x), (int) (nowy + y));

break;

Codul 10 Cod sursă pentru implementarea mesajelor utilizate în comunicarea dintre aplicația client și aplicația server

Fiecare funcție care simulează utilizarea unei taste, a mouse-ului sau a unor combinații de taste este asociată unor comenzi de tipul String, Int, Float, Long sau Char, care vor fi executate în momentul în care aplicația client va trimite o comandă către server. De exemplu, dacă utilizatorul realizează cu succes conexiunea dintre aplicația client și aplicația server și mai apoi dorește să controleze funcțiile mouse-ului precum click stânga, click dreapta, scroll-ul sau mișcarea mouse-ului, aplicația client va trimite aplicației server anumite comenzi, pe care aceasta le va analiza, le va înțelege și le va executa. Executarea acestor comenzi se referă defapt la apelarea funcțiilor cu ajutorul cărora se realizează simularea utilizării mouse-ului, cu ajutorul clasei Robot. Această metodă de implementare a comenzilor mouse-ului este prezentată în Codul 10.

Inițial, aplicația server putea fi rulată doar cu ajutorul mediului de dezvoltare Eclipse, deoarece acesta nu prezenta o interfață grafică. Datorită deciziei de a pune la dispoziție această aplicație și altor utilizatori a fost necesară realizarea unei interfețe grafice pentru utilizatori astfel încât aplicația server să poată fi pornită și de alți utilizatori și de asemenea anumite detalii să fie oferite utilizatorului. Printre aceste detalii oferite utilizatorului se regăsesc: adresa IPv4 necesară conexiunii, portul generat de către server sau statusul conexiunii.

Interfața grafică a fost realizată cu ajutorul unui program numit Scene Builder, acest program fiind constituit dintr-o mulțime de elemente grafice cu ajutorul cărora se poate realiza o interfață grafică pentru aplicațiile realizate cu ajutorul limbajului de programare Java. Interfața grafică a fost adăugată în cadrul proiectului sub forma unui fișier de tipul .fxml, formatul acestui fișier fiind asociat aplicațiilor Java de tipul JavaFX, aceasta reprezentând o bibliotecă specifică aplicațiilor care conțin o interfață grafică de utilizator. [28]

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainScreen.fxml"));

Parent root = (Parent) fxmlLoader.load();

MainScreenController mainScreenController = (MainScreenController) fxmlLoader.getController();

mainScreenController.setMainScreenController(mainScreenController);

Scene scene = new Scene(root);

stage.setResizable(false);

stage.setScene(scene);

stage.setTitle("ADMote WiFi Server");

stage.setOnCloseRequest(e -> {

Platform.exit();

System.exit(1);

});

stage.show();

}

Codul 11 Cod sursă pentru încărcarea interfeței grafice de utilizator

Codul 11 prezintă modul în care fișierul „MainScreen.fxml” este încărcat în cadrul aplicației server pe baza comenzilor specifice aplicațiilor de tipul JavaFX. După ce fișierul este încărcat vor fi setate anumite detalii ale interfeței grafice precum titlul sau dimensiunea ferestrei, în acest caz dimensiunea ferestrei nu poate fi modificată, aceasta fiind prestabilită, urmând ca după ce aceste detalii să fie setate, fereastra asociată interfeței utilizatorului să fie afișată prin apelarea funcției .show();

Figura 29 Aplicația server în două stadii diferite – Deconectat și Conectat

Figura 29 prezintă cele două stadii în care se află aplicația server. Imaginea din partea stângă prezintă momentul în care nu există o conexiune activă între aplicația client și aplicația server. Detaliile foarte importante pentru conectare precum adresa IP necesară conexiunii și portul necesar conexiunii sunt oferite utilizatorului în cadrul acestei interfețe grafice. În acest stadiu, primele 3 câmpuri de text sunt de culoare roșie, iar cel de-al patrulea câmp prezintă faptul că serverul așteaptă realizarea unei conexiuni, textul fiind de culoare albastră. În momentul în care conexiunea se realizează cu succes, culoarea tuturor câmpurilor de text va fi modificată în verde, iar în cazul celui de-al patrulea câmp va fi afișată adresa IP care este utilizată pe dispozitivul Android pe care rulează aplicația. Acest stadiu al aplicației este prezentat în imaginea din partea dreaptă din cadrul figurii 29. În cazul în care utilizatorul dorește să oprească această conexiune realizată între client și server, va avea două opțiuni, prima dintre acestea fiind închiderea serverului prin apăsarea butonului de închidere din colțul dreapta-sus, sau selectarea butonului “Reset Connection” daca dorește terminarea conexiunii dar nu dorește să închidă serverul.

Pe baza aceluiași principiu de utilizare a fost implementat un nou server, acesta având rolul de a face posibil controlul calculatorului sau laptopului prin intermediul unui dispozitiv Android în momentul în care se dorește sau este necesară realizarea unei conexiuni folosind tehnologia Bluetooth. Din punctul de vedere al funcționalității, noul server realizat nu este diferit de serverul asociat conexiunii prin Wi-Fi, funcțiile de simulare a acțiunii tastelor sau mouse-ului fiind disponibile integral și în cadrul acestui server asociat conexiunii Bluetooth. Comunicarea dintre aplicația client și aplicația server se realizează în același mod, prin schimbul de mesaje între cele două componente ale proiectului, singura diferență fiind modul de conectare. Primul pas în realizarea conexiunii dintre aplicația client și aplicația server prin tehnologia Bluetooth este împerecherea celor două dispozitive. Aceasta poate fi realizată atunci când serverul rulează dar și în momentul în care acesta nu este utilizat. După ce împerecherea dispozitivelor este realizată cu succes, utilizatorul va trebui să aleagă în cadrul aplicației client numele calculatorului sau laptopului cu care s-a realizat împerecherea, iar atât timp cât serverul rulează, conexiunea va fi realizată cu succes, făcând posibil controlul calculatorului sau laptopului cu ajutorul telefonului sau tabletei Android.

Din punctul de vedere al interfeței de utilizator, aplicația server asociată conexiunii Bluetooth este de bază, aceasta nefiind alcătuită din elemente care să ofere utilizatorului detalii, singura informație oferită utilizatorului este aceea că serverul va rula în background, iar dacă este necesar, utilizatorul poate accesa pagina de ajutor a aplicației pentru a primii mai multe informații despre modul de conectare sau de utilizare al acesteia. Figura de mai jos prezintă interfața de utilizator a serverului ADMote Control necesar pentru conexiunea realizată cu ajutorul tehnologiei Bluetooth.

Figura 30 Aplicația server asociată conexiunii prin utilizarea tehnologiei Bluetooth

3.3 Dezvoltarea website-ului asociat aplicației ADMote Control

Dezvoltarea unui website care să fie asociat aplicației ADMote Control a devenit un lucru foarte important pentru acest proiect, în momentul în care am decis să pun la dispoziție aplicația și altor utilizatori de telefoane sau tablete Android. În primul rând, realizarea unui website a fost necesară deoarece aplicația ADMote Control include și un server care trebuie descărcat pe calculator sau laptop, astfel că prin intermediul website-ului, utilizatorul poate descărca cele două servere necesare realizării conexiunii. Pe lângă această caracteristică, prin intermediul website-ului, utilizatorul poate fi informat despre modul în care trebuie realizată conexiunea, poate rezolva anumite probleme ce pot apărea în timpul utilizării aplicației, și de asemenea poate afla care sunt funcțiile de control disponibile și modul de utilizare al acestora.

Pentru realizarea site-ului au fost utilizate limbajele HTML, CSS și JavaScript, iar pentru rularea acestuia în faza de dezvoltare a fost utilizat programul XAMPP.

Din punctul de vedere al design-ului a fost utilizat un șablon care a fost achiziționat de pe un site al unei companii specializate în crearea de șabloane pentru website-uri, acesta fiind mai apoi modificat prin eliminarea unor componente care alcătuiau tema originală a acestui șablon, respectiv adăugarea unor noi componente. Aceste modificări au fost realizate atât asupra codului specific fișierelor .html, dar și fișierelor .css, cele din urmă fiind utilizate pentru specificațiile fiecărui element grafic care este utilizat pentru constituirea unui design. Elementele grafice din cadrul acestui șablon au fost poziționate și sincronizate astfel încât din punctul de vedere al modului de vizualizare, acesta să fie compatibil cu mai multe tipuri de dispozitive, sau mai precis website-ul să aibă proprietatea de a fi responsive. Această proprietate a fost asociată acestui șablon prin atribuirea unei alte proprietăți asupra tuturor elementelor grafice, și anume proprietatea ca elementele grafice să fie centrate.

Din punctul de vedere al conținutului, website-ul este alcătuit dintr-o pagină principală unde sunt prezentate principalele funcții ale proiectului ADMote Control, această pagină fiind alcătuită din elemente grafice de tip buton (text sau imagine) prin intermediul cărora utilizatorul poate accesa alte secțiuni ale website-ului precum secțiunea de descărcare a server-ului, secțiunea asociată informațiilor referitoare la modul de conectare și utilizare al aplicației, secțiunea de vizualizare a telecomenzilor disponibile dar și secțiunea de verificare a termenilor și condițiilor respectiv a politicii de confidențialitate a proiectului. Fiind pagina principală a website-ului, aceasta este și prima pagină cu care interacționează utilizatorul. Pentru ca acesta să poată accesa secțiunile website-ului mult mai repede, a fost implementat și un meniu care poate fi accesat prin selectarea unei pictograme, aceasta fiind situată în partea dreapta-sus a ecranului. Figura 31 prezintă opțiunile disponibile în cadrul acestui meniu.

Figura 31 Meniul principal al site-ului asociat aplicației ADMote Control

După cum poate fi observat și în figura 31, pagina principală a website-ului este împărțită în mai multe secțiuni. Prima dintre acestea, secțiunea numită “Acasă” este cea cu care utilizatorul interacționează prima dată, aceasta fiind alcătuită din header-ul aplicației care la rândul său este alcătuit din logo-ul site-ului în partea stânga-sus și din pictograma asociată meniului, în partea dreapta-sus, din titlul website-ului plus o descriere de tip text și o imagine descriptivă care ilustrează 3 tipuri de dispozitive, două dintre acestea, telefonul și tableta fiind dispozitivele pe care poate rula aplicația client, iar laptopul fiind dispozitivul pe care poate rula aplicația server.

Figura 32 Secțiunea “Acasă” a pagini principale a website-ului

Tot în această secțiune a paginii principale au fost implementate și două butoane de tip text, unul dintre acestea realizând redirecționarea către pagina de download a serverului, în timp ce al doilea buton realizează o redirecționare către pagina de download a aplicației client. Figura 32 prezintă structura secțiunii “Acasă” a paginii principale, elementele grafice prezentate în prezentul dar și în precedentul paragraf fiind ilustrate în această imagine.

Figura 33 Secțiunea “Caracteristici” a pagini principale a website-ului

Figura 33 prezintă componentele secțiunii “Caracteristici”, această secțiune prezentând principalele funcții ale aplicației ADMote Control, astfel încât utilizatorul să își poată crea o idee cu referire la modul în care aplicația îl poate ajuta. Imaginea care constituie figura 33 prezintă doar o parte a secțiunii “Caracteristici”, funcțiile prezentate în cadrul acestei secțiuni fiind mai numeroase.

Figura 34 Secțiunea “Telecomenzi” a pagini principale a website-ului

Figura 34 ilustrează secțiunea de accesare a paginii web prin care sunt prezentate utilizatorului lista de telecomenzi disponibile în cadrul aplicației ADMote Control. În momentul în care utilizatorul va selecta opțiunea “Lista completă de telecomenzi”, acesta va fi redirecționat pe o pagină web unde va putea observa telecomenzile disponibile, acestea fiind împărțite pe diferite categorii. Categoria principală este aceea în care sunt prezentate toate telecomenzile disponibile, aceasta fiind prezentată în figura de mai jos.

Figura 35 Categoria “Toate Telecomenzile” a paginii prin care sunt prezentate telecomenzile disponibile

Figura 35 prezintă categoria prin intermediul căreia sunt prezentate toate telecomenzile din cadrul aplicației. Fiecărei telecomenzi îi este asociată o secțiune formată dintr-un text care prezintă funcția ce poate fi controlată, și o imagine descriptivă. În momentul în care utilizatorul va selecta oricare dintre aceste opțiuni, acesta va fi redirecționat pe o altă pagină unde sunt prezentate mai multe detalii despre acea telecomandă, detalii precum: caracteristicile principale ale acelei telecomenzi, platforma pe care poate fi utilizată dar și o captură de ecran prin care utilizatorul își poate crea o idee despre acea telecomandă.

Figura 36 Secțiunea “Cum funcționează?” a pagini principale a website-ului

Cea de-a patra secțiune a paginii principale este reprezentată de secțiunea “Cum funcționează?”, prin intermediul acesteia utilizatorul putând accesa pagina de ajutor a website-ului, unde va putea găsi mai multe informații despre modul în care poate descărca aplicația client și aplicația server, despre modul în care poate realiza conexiunea dintre acestea dar și informații despre cum poate utiliza anumite funcții ale aplicației sau cum pot fi rezolvate anumite probleme care apar în timpul utilizării acesteia. Figura 36 ilustrează această secțiune, aceasta fiind constituită dintr-un element grafic de tip text care reprezintă titlul secțiunii dar și dintr-un element grafic de tip buton prin care poate fi realizată tranziția dintre pagina principală și pagina de ajutor.

Figura 37 prezintă categoria asociată paginii de ajutor a aplicației, categorie prin intermediul căreia utilizatorul poate accesa informații referitoare la modul de instalare al aplicațiilor client și server, la modul de realizare al conexiunii dintre cele două aplicații dar și la modul de utilizare al comenzilor vocale.

Figura 37 Categoria “Noțiuni de bază” a paginii de ajutor a aplicației ADMote Control

Această pagină de ajutor poate fi accesată atât prin utilizarea site-ului, cât și prin intermediul aplicației client, unde există anumite elemente grafice prin care se poate realiza tranziția dintre aplicația client și pagina de ajutor, aceste acțiuni fiind implementate pentru ca utilizatorul să poată accesa această pagină importantă, indiferent de dispozitivul pe care îl utilizează. În momentul în care utilizatorul va selecta oricare dintre opțiunile asociate acestei categorii a paginii de ajutor, acesta va fi redirecționat pe o altă pagină a website-ului unde vor fi prezentate mai multe informații cu referire la ceea ce îl interesează pe utilizator în acel moment.

Figura 38 prezintă secțiunea prin intermediul căreia utilizatorul website-ului poate accesa pagina de unde poate fi descărcată aplicația ADMote Control, această pagină fiind pagina asociată magazinului de aplicații Google Play. Această secțiune este prezentă pe toate paginile asociate acestui website, deoarece în acest mod utilizatorul poate descărca mult mai rapid aplicația, nefiind nevoie de reîntoarcerea la prima pagina a website-ului. Dacă utilizatorul accesează această pagină cu ajutorul unui dispozitiv Android, acesta va fi redirecționat direct în aplicația asociată magazinului de aplicații Google Play și va putea descărca imediat aplicația, însă dacă acesta va accesa pagina utilizând un calculator sau un dispozitiv diferit de cel de tipul Android, pagina aplicației va fi deschisă cu ajutorul unui browser.

Figura 38 Secțiunea “Descarcă” a pagini principale a website-ului

Figura 39 prezintă secțiunea prin intermediul căreia utilizatorul poate accesa paginile în care sunt prezentați termenii și condițiile utilizării aplicației ADMote Control dar și politica de confidențialitate.

Figura 39 Secțiunea “Contact” a pagini principale a website-ului

Realizarea acestor două pagini a fost necesară deoarece din moment ce aplicația a fost lansată astfel încât să poată fi descărcată și de către alți utilizatori ai dispozitivelor cu sistem de operare Android, există anumite informații care trebuie specificate utilizatorului dar de asemenea există și o nevoie de a proteja anumite date ale dezvoltatorului sau clarificate anumite aspecte prin care utilizatorul să înțeleagă faptul că pentru anumite acțiuni dezvoltatorul nu poate fi tras la răspundere. Cele mai importante aspecte clarificate prin intermediul termenilor și condițiilor respectiv a politicii de confidențialitate se referă la furtul de identitate respectiv la costuri care pot fi generate prin utilizarea aplicației. Mai precis, în cazul furtului de identitate, am adus la cunoștință utilizatorilor faptul că deși aplicația are un certificat de securitate implementat, este recomandată utilizarea unei rețele WiFi private, iar în cazul în care utilizatorul nu respectă acest aspect și utilizează o rețea WiFi publică, iar datele sale personale sunt compromise în timp ce acesta utilizează aplicația ADMote Control, nu este vina dezvoltatorului aplicației. De asemenea, am adus la cunoștință utilizatorului faptul că în cazul în care acesta utilizează un serviciu de internet care poate genera costuri suplimentare, nu poate exista o responsabilitate din partea dezvoltatorului aplicației ADMote Control în cazul în care aplicația a utilizat date mobile care au generat cost suplimentar. În ceea ce privește tipul dispozitivelor care sunt utilizate pentru rularea acestei aplicații, a fost adus la cunoștință utilizatorului faptul că dezvoltatorul aplicației nu poate fi acuzat în cazul în care sistemul de operare Android asociat dispozitivului a fost modificat iar telefonul sau tableta a fost afectată de un virus sau malware în timpul utilizării aplicației. Aplicația este verificată de către compania Google, scanată împotriva virușilor, astfel că singura metodă prin care dispozitivul Android poate fi afectat de un virus sau malware fiind din cauza faptului că telefonul sau tableta nu primesc actualizări de securitate.

În ceea ce privește politica de confidențialitate a aplicației, principalele aspecte trate în cadrul paginii care prezintă această politică sunt strâns legate de utilizarea datelor personale. Utilizatorului îi este adus la cunoștință faptul că în cadrul aplicației sunt implementate servicii care sunt puse la dispoziție de către alte companii, aceste servicii putând a colecta date despre utilizator, date precum: locația dispozitivului pe care acesta îl utilizează, adresa IP, tipul dispozitivului, aceste date fiind în general date anonime. Prin utilizarea aplicației, se consideră faptul că utilizatorul a acceptat aceasta politică, și că este de acord ca aceste date anonime să fie prelucrate pentru îmbunătățirea calității acestui proiect.

În cadrul secțiunii “Contact”, utilizatorului îi este pusă la dispoziție o opțiune numită “Contactează-ne”, opțiune care odată selectată va deschide principalul client de mail-uri instalat pe calculatorul sau laptop-ul utilizat, astfel încât în cazul în care utilizatorul are o întrebare referitoare la acest proiect sau dorește a trimite un feedback despre aplicație, acest proces să aibă loc într-un mod foarte simplu.

Tot în cadrul acestei secțiuni, utilizatorului îi sunt puse la dispoziție anumite opțiuni de urmărire pe rețelele de socializare, dar și un mod de contact prin intermediul aplicației Messenger în cazul în care acesta dorește să transmită o anumită informație despre acest proiect sau dacă are anumite nelămuriri. Pentru ca aplicația să poată fi prezentată persoanelor din mai multe țări ale lumii, a fost necesară realizarea unei pagini asociate aplicației pe mai multe platforme de socializare, cele mai importante fiind Facebook și Instagram. Aceste opțiuni de urmărire pe rețelele de socializare sunt disponibile de asemenea și în partea de sus a paginii, în cadrul secțiunii “Acasă”. Pentru implementarea acestui serviciu prin care utilizatorul poate urmări activitatea aplicației prin intermediul rețelelor de socializare, a fost utilizat un serviciu numit „AddThis”, implementarea fiind realizată pentru fiecare pagină a acestei pagini web, codul utilizat fiind defapt un script specific limbajului de programare JavaScript. Codul implementat pentru afișarea acestei opțiuni fiind prezentat în Codul 12.

<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5c9563088cc005f8"></script>

Codul 12 Cod sursă asociat serviciului AddThis

Implementarea website-ului a reprezentat un pas important în dezvoltarea acestui proiect, deoarece prin intermediul acestuia a fost posibilă atât informarea utilizatorilor în ceea ce privește modul de utilizare al aplicației cât și informarea utilizatorilor despre funcțiile disponibile în cadrul aplicației. Acest website, sau mai bine spus implementarea acestui website reprezintă unul dintre principalii factori care au ajutat la evoluția acestui proiect. În opinia mea, un website trebuie să reprezinte o unealtă de informare dar în același timp și o unealtă de promovare. Astfel că, prin intermediul website-ului a fost posibilă și creșterea numărului de utilizatori ai aplicației, însă cea mai importantă a fost creșterea numărului de utilizatori care au ales să utilizeze aplicația pentru mai mult timp.

Prin intermediul următoarelor două subcapitole ale prezentului proiect vor fi prezentate informații referitoare la procesul de lansare al aplicației pe magazinul de aplicații Google Play, dar de asemenea vor fi prezentate și date statistice acumulate de-a lungul acestui an în care aplicația a fost disponibilă utilizatorilor Android. Astfel că, prin prezentarea acestor informații, va putea fi observat impactul pe care realizarea acestui website l-a avut asupra proiectului ADMote Control.

3.4 Lansarea aplicației ADMote Control pe platforma Google Play

Google Play, cunoscut inițial și menționat de Google ca Android Market, este magazinul și portalul oficial al companiei Google, pentru aplicații, jocuri și alte conținuturi pentru telefonul, tableta sau alte dispozitive bazate pe sistemul de operare Android. Magazinul Google Play a depășit 1 milion de aplicații în iulie 2013 și are în prezent peste 2,8 milioane de aplicații adăugate de dezvoltatori independenți sau de companii din întreaga lume. Unele aplicații din cadrul acestei platforme utilizează anumite capacități hardware ale unui dispozitiv, cum ar fi senzorii de mișcare (pentru jocuri dependente de mișcare) sau camera frontală (pentru apeluri video online). [29]

În urmă cu 3 ani, în momentul în care am decis să realizez acest proiect pentru dispozitivele asociate sistemului de operare Android, nu pot spune că am știut sau crezut imediat, faptul că în următorii ani voi dezvolta o aplicație care la un moment dat va ajunge să fie disponibilă altor utilizatori din întreaga lume. Această idee a apărut odată cu finalizarea studiilor de licență, moment în care am hotărât faptul că această aplicație poate reprezenta o componentă a unui proiect mult mai complex, dar totodată util pentru alți utilizatori de dispozitive Android.

Pentru ca această idee să poată fi pusă în practică, a fost necesară îmbunătățirea anumitor componente ale aplicației, adăugarea de noi funcții de control și de asemenea modificarea design-ului aplicației astfel încât aceasta să poată fi disponibilă pe mai mult tipuri de dispozitive. Acest proces de îmbunătățire a aplicației s-a realizat pe parcursul a 10 luni, timp în care a fost realizată o versiune inițială a aplicației, o versiune care putea fi pusă la dispoziție utilizatorilor Android, deoarece aceasta conținea o formă stabilă de realizare a unei conexiuni, atât cu ajutorul tehnologiei Wi-Fi cât și cu ajutorul tehnologiei Bluetooth, dar și o listă de funcții de control foarte folositoare pentru viitorul utilizator al aplicației.

Înainte de lansarea aplicației pe platforma Google Play, am constat faptul că deși principala componentă a acestui proiect era aplicația Android, totuși mai exista o a doua componentă foarte importantă și anume aplicația server, componentă fără de care nu se putea realiza conexiunea dintre dispozitivul Android și calculator sau laptop. Astfel că, a fost necesară realizarea unui website, care să ofere utilizatorului posibilitatea de a descărca aplicația server dar de asemenea să ofere și informații despre cele două aplicații. Inițial, fișierele site-ului au fost încărcate pe un site realizat gratuit cu ajutorul unei platforme care oferea un subdomeniu și hosting gratuit, această decizie fiind luată deoarece nu consideram faptul că este momentul potrivit pentru achiziționarea unui domeniu privat.

Pentru ca aplicația să poată deveni publică pe platforma Google Play, a fost necesară crearea unui cont de dezvoltator, prin intermediul căruia în acest moment poate fi încărcat un număr nelimitat de aplicații pentru sistemul de operare Android.

Lansarea aplicației nu a reprezentat un proces foarte simplu, mai mulți pași au trebuit urmați pentru ca acest proces să aibă loc cu succes.

Primul dintre acești pași a fost acela de a crea o versiune de lansare a aplicației, sau mai precis de a crea un fișier executabil ce poate fi încărcat pe platforma Google Play, astfel încât să poată fi descărcat și de alți utilizatori. Această operațiune de construire a fișierului executabil, a fost realizată în cadrul mediului de dezvoltare Android Studio.

Fișierul executabil pentru o aplicație Android poate fi de două tipuri: .apk sau .aab. Acestea reprezintă principalele formate de fișiere executabile care pot fi utilizate în momentul în care se realizează exportarea fișierelor asociate aplicației, într-un singur fișier executabil. Fișierele de tip .apk conțin toate fișierele din cadrul unui proiect, acest fișier fiind deja semnat cu certificatul asociat aplicației, acest certificat reprezentând modul de identificare al aplicației în momentul în care aceasta este încărcată pe platforma Google Play. Cel de-al doilea tip de fișier și anume .aab reprezintă un format recent adăugat pentru distribuirea aplicațiilor Android. Deosebirea dintre acest tip de fișier și fișierele .apk este aceea că în cadrul unui fișier executabil de tipul .aab este inclus doar codul compilat și resursele utilizate în cadrul aplicației. Astfel că, în cazul în care proiectul conține clase, interfețe sau resurse neutilizate acestea nu vor fi exportate în cadrul versiunii finale. Această procedură de includere doar a resurselor utilizate are ca principal scop reducerea dimensiunii fișierului executabil generat. [30]

În cazul aplicației ADMote Control, s-a încercat generarea ambelor tipuri de fișiere și s-a realizat o testare a aplicației atât în momentul în care aceasta a fost instalată pe dispozitivul de test cu ajutorul fișierului de tip .apk cât și în momentul în care s-a utilizat fișierul de tip .aab. Aplicația a putut fi instalată prin intermediul ambelor fișiere, însă în momentul testării aplicației care a fost instalată cu ajutorul fișierului .aab s-au detectat anumite probleme la string-urile care au fost realizate pentru schimbarea limbii aplicației. În momentul în care utilizatorul selecta din cadrul meniului de setări o altă limbă decât cea în care a fost instalată aplicația, schimbarea limbii nu avea loc. Această problemă a fost cauzată de faptul că fișierul de tip .aab a fost generat fără ca toate resursele de tip string să fie introduse în fișierul executabil. Astfel că, observând acest tip de problemă care poate apărea în timpul generării unui fișier de tipul .aab, am ales să utilizez fișierul de tip .apk ca fișier executabil.

Odată ce fișierul executabil a fost generat, acesta poate fi încărcat pe platforma Google Play, însă lansarea unei aplicații pe această platformă nu reprezintă doar încărcarea unui fișier executabil ci și realizarea unei pagini personalizate care să conțină titlul aplicației, o scurtă descriere, o descriere mai amănunțită dar și video sau imagini descriptive. Figura de mai jos prezintă secțiunea din cadrul consolei Google Play unde poate fi realizată introducerea datelor asociate paginii descriptive a aplicației ADMote Control.

Figura 40 Consola Google Play – Introducerea datelor asociate paginii descriptive

Platforma Google Play permite dezvoltatorului să realizeze încărcarea fișierului executabil în 3 moduri. Primul dintre acestea reprezintă modul de testare Alpha, acesta oferind dezvoltatorului posibilitatea de a introduce aplicația în magazinul de aplicații însă aceasta să fie disponibilă doar anumitor persoane, în general acestea reprezentând un grup de testeri din cadrul unei companii sau o listă de testeri independenți. În momentul în care încărcarea aplicației are loc cu succes, testeri vor fi notificați printr-un e-mail și vor putea descărca aplicația urmând a descoperi posibilele bug-uri din cadrul acesteia. Dacă acești testeri vor descoperi anumite probleme asupra anumitor funcții ale aplicației, va fi necesară rezolvarea bug-urilor, reconstruirea fișierului executabil dar și reîncărcarea acestuia pe platforma Google Play. Reîncărcarea se poate face în oricare dintre cele 3 categorii de aplicații. Cel de-al doilea mod de încărcare al fișierului executabil este reprezentat de modul de testare beta, acesta oferind dezvoltatorului posibilitatea de a introduce aplicația în magazinul de aplicații, însă de această dată aceasta va fi disponibilă pentru testare pentru mai mulți utilizatori din întreaga lume. În cazul în care vor fi detectate probleme, utilizatorii pot trimite un feedback dezvoltatorului iar acesta va remedia problemele astfel încât aplicația să poată fi lansată în mod oficial. Lansarea în mod oficial este cel de-al treilea mod de încărcare al aplicației, acesta oferind dezvoltatorului posibilitatea de a face cunoscută aplicația tuturor utilizatorilor de dispozitive Android, versiunea aplicației încărcată în acest mod fiind cea remediată, cea care nu prezintă erori. [31]

În ceea ce privește aplicația ADMote Control, încărcarea acesteia pe platforma Google Play a fost realizată prin utilizarea a două dintre cele trei moduri în precedentul paragraf. Fiind un proiect personal, nu am dorit să îl ofer către testare altor utilizatori de dispozitive Android, astfel că testarea tuturor funcțiilor a fost realizată fie prin utilizarea dispozitivelor reale sau virtuale fie prin utilizarea anumitor servicii de testare automată, servicii precum Jenkins. Utilizarea modului de testare Alpha a fost necesară în momentul implementării anumitor funcții noi ,care pentru a putea fi testate necesitau încărcarea unui fișier executabil în cadrul acestei categorii de aplicații pentru testare internă.

În momentul lansării, aplicația ADMote Control a fost adăugată direct pe canalul de lansare, testarea fiind deja realizată cu ajutorul dispozitivelor de test. În momentul adăugării fișierului executabil, au fost introduse alte câteva date, precum versiunea aplicației și o scurtă descriere a prezentei versiuni, în timp ce anumite date precum permisiunile necesare pentru utilizarea aplicației sau cerințele minime de rulare a aplicației au fost populate automat de către serviciile Google prin scanarea fișierului încărcat.

Serviciile Google implementate în platforma Google Play au realizat o verificare a aplicației pentru a se putea stabili dacă aplicația este în regulă sau dacă există abateri de la regulamentul de încărcare al aplicațiilor. Neexistând probleme, aplicația a fost lansată în câteva ore, fapt care a determinat și lansarea primei versiuni oficiale a website-ului, utilizându-se un sub-domeniu gratuit oferit de către o firmă de hosting. Alegerea de a utiliza un sub-domeniu gratuit în schimbul unui domeniu privat a fost necesară deoarece în momentul lansării aplicației nu exista nicio garanție că aplicația va avea succes.

În primele luni de existență, aplicația nu a avut un număr foarte mare de descărcări însă datorită actualizărilor ulterioare și aplicării anumitor tehnici de marketing a fost posibilă creșterea utilizatorilor. Numărul de descărcări a fost redus în aceste luni din cauza mai multor factori, precum lipsa recenziilor, apariția erorilor sau inexistența unei strategii de promovare. Astfel că, în aceste luni a fost necesară realizarea mai multor actualizări pentru remedierea problemelor, dar și cercetarea în ceea ce privește modul în care o aplicație Android poate evolua fără a fi nevoie de o investiție inițială. Următorul sub-capitol va prezenta modul prin care au fost realizate actualizările aplicației, noile servicii implementate care au ajutat la evoluția aplicației dar și date statistice referitoare la aceasta.

Realizarea mentenanței și date statistice referitoare la aplicație

După cum am explicat în capitolul precedent, evoluția aplicației a reprezentat și reprezintă în același timp un continuu proces de implementare de noi servicii, noi funcții sau de noi strategii. În primele luni de existență pe magazinul de aplicații Google Play, aplicația nu a avut un număr mare de descărcări, acest lucru fiind influențat de mai mulți factori, însă prin descoperirea problemelor și prin remedierea acestora, aplicația a început să devină cunoscută.

Figura 41 prezintă un grafic prin intermediul căruia este prezentată situația numărului de descărcări în primele 4 luni de existență a aplicației, numărul maxim de descărcări, și anume 64, fiind atins în luna mai 2019, fiind urmat de un declin iar mai apoi de o ușoară creștere.

Figura 41 Grafic de prezentare a numărului de descărcări din primele 4 luni de existență a aplicației pe platforma Google Play

În aceste 4 luni, observând numărul redus de descărcări a avut loc o serie de actualizări ale aplicației, principalele aspecte modificate fiind legate de design-ul acesteia. Design-ul aplicației, deși îl consideram în regulă în acel moment, pot spune că a constituit principalul punct slab al aplicației. Combinația de culori asociată elementelor grafice ale aplicației nu era cea mai potrivită, astfel că s-au realizat destul de multe modificări. Pe lângă combinația de culori care nu era cea mai reușită, probleme au existat și la elementele grafice de tip text care nu erau poziționate foarte bine în cadrul tuturor layout-urilor. Din punctul de vedere al funcționalității aplicației, problemele nu au fost foarte numeroase, dar acestea au existat din cauza fragmentelor de cod asociate claselor Java ale proiectului, fragmente care erau asociate cu anumite elemente grafice. În principal, erorile apărute făceau referire la anumite probleme rezultate din netratarea anumitor excepții precum excepția pointerului nul asociată anumitor variabile. Acest tip de erori asociate excepției pointerului nul sunt cel mai des întâlnite în programare, nu numai în cazul aplicațiilor Java sau aplicațiilor pentru dispozitive mobile.

Datorită acestor modificări aduse aplicației, începând cu luna septembrie 2019, numărul de descărcări ale aplicației a început să crească, acesta ajungând la sfârșitul lunii septembrie la 132 de descărcări. Deși nu pare un număr foarte mare, acesta a constituit începutul evoluției aplicației din punctul de vedere al numărului de descărcări. Creșterea a continuat, iar la sfârșitul lunii octombrie numărul de descărcări a ajuns la 243. Figura de mai jos ilustrează graficul prin care este prezentată creșterea numărului de descărcări în aceste 2 luni.

Figura 42 Grafic de prezentare a evoluției numărului de descărcari din lunile Septembrie și Octombrie 2019

În aceste două luni în care numărul de descărcări a crescut, au fost implementate noi servicii în cadrul aplicației, dar în același timp au fost îmbunătățite și anumite funcții ale aplicației din dorința de a avansa și mai mult atât din punctul de vedere al numărului de descărcări dar și al calității serviciilor care sunt puse la dispoziție utilizatorului.

Prima dintre îmbunătățirile aduse aplicației este reprezentată de implementarea serviciului Google Firebase, acesta fiind un serviciu furnizat de către compania Google pentru a oferi dezvoltatorilor de aplicații sau companiilor în general posibilitatea de a evolua. Serviciul Google Firebase prezintă servicii împărțite în 3 categorii și anume:

Servicii pentru dezvoltarea unor aplicații mult mai bune

Servicii pentru îmbunătățirea calității aplicațiilor

Servicii pentru oferirea sprijinului în ceea ce privește creșterea unei afaceri [32]

Aceste servicii sunt utilizate de companii din întreaga lume deoarece acest serviciu oferă o multitudine de funcționalități extrem de importante atât în ceea ce privește dezvoltarea unui produs dar și în ceea ce privește menținerea calității acestuia pentru a se putea realiza o evoluție a companiei dezvoltatoare. [32]

Printre cele mai utilizate servicii din cadrul platformei Google Firebase se află servicii precum: servicii de autentificare, servicii pentru utilizarea Machine Learning, servicii de hosting, servicii de depozitare în cloud, servicii pentru baze de date în timp real, servicii de testare a aplicațiilor, servicii de fixare a erorilor, servicii de monitorizare a performanței sau serviciile pentru afișarea de date statistice. [32]

În ceea ce privește aplicația ADMote Control, printre serviciile din cadrul platformei Google Firebase, implementate în cadrul aplicației se află serviciile de testare a aplicației, de fixare a erorilor, de monitorizare a performanței dar și servicii pentru afișarea datelor statistice.

Serviciile de testare a aplicației au fost utilizate și înainte de lansarea aplicației pe platforma Google Play, însă aceste servicii nu au necesitat implementare directă în aplicație. Pentru testarea aplicației, a fost construit un fișier de tip .apk și mai apoi încărcat în serviciul numit “Test de laborator”, serviciu care a realizat testarea aplicației atât din punctul de vedere al design-ului, permițând selectarea dispozitivelor ce se dorește a fi utilizate pentru a se rula testul, dar și din punctul de vedere al funcționalității, oferind informații cu referire la nivelul de utilizare al resurselor dispozitivului respectiv în momentul rulării aplicației.

Dintre aceste servicii, cele mai importante din punctul de vedere al ajutorului acordat pentru creșterea numărului de descărcări ale aplicației au fost serviciul de fixare a erorilor, cunoscut ca și Crashytics dar și serviciul de afișare a datelor statistice numit Analytics. Aceste servicii au fost foarte utile atât în acea perioadă când a avut loc creșterea treptată a numărului de descărcări, dar și în această perioadă, deoarece cu ajutorul lor am putut primi date referitoare la erorile apărute în timpul utilizării aplicației, locațiile de unde a fost descărcată aplicația, numele și versiunea sistemului de operare a dispozitivelor care au fost utilizate pentru descărcarea aplicației și multe alte date analitice. Datele referitoare la erorile apărute în cadrul aplicației sunt foarte folositoare deoarece pe lângă afișarea tipului de eroare sunt prezentate și date precum: data și ora la care a avut loc eroarea, numele și versiunea sistemului de operare, memoria RAM disponibilă în acel moment, însă cele mai importante informații oferite de serviciul Crashlytics sunt defapt linia de cod unde a fost detectată eroarea și cauzele apariției acestei erori. Aceste informații sunt cele mai importante deoarece în momentul în care acest tip de informație mi-a fost transmisă, am putut verifica acea linie sau acele linii de cod care au generat eroarea, astfel încât a fost posibilă găsirea unei soluții pentru rezolvarea acesteia. Este adevărat faptul că în unele cazuri rezolvarea unei probleme poate dura foarte mult timp, însă serviciul Crashlytics este foarte util deoarece este mult mai bine să ai informații referitoare la o problemă din cadrul aplicației, decât să nu fi informat. Serviciul de afișare a datelor referitoare la erori prezintă aceste date în cadrul platformei Firebase, prin aranjarea lor în 3 categorii și anume: procentul de utilizatori care au întâmpinat probleme în timpul utilizării aplicației, numărul de evenimente de tip eroare, problemele detectate.

Din cele 3 categorii de prezentare a informațiilor referitoare la erorile detectate în cadrul aplicației, cea mai importantă este ultima, deoarece aceasta oferă toate informațiile referitoare la eroare, informații precum clasa unde a fost detectată eroarea, linia de cod, funcția care a generat eroarea, versiunile aplicației unde a fost detectată eroarea dar și numărul evenimentelor respectiv numărul utilizatorilor care au întâmpinat probleme la utilizarea aplicației.

Figura 43 Google Firebase – Crashlytics – Procentul de utilizatori care nu au întâmpinat probleme la utilizarea aplicației

Figura 44 Google Firebase – Crashlytics – Numărul de evenimente de tip eroare detectate în decurs de o săptămână

Figura 45 Google Firebase – Crashlytics – Informații exacte referitoare la problemele detectate în cadrul aplicației

Figurile 43, 44 și 45 prezintă aceste 3 categorii ale serviciului Crashlytics, și mai precis informațiile oferite de acest serviciu pentru săptămâna 12-18 iunie 2020.

Pe lângă acest serviciu de afișare a datelor referitoare la erori, un alt serviciu care a contribuit, și contribuie în continuare la dezvoltarea aplicației este Google Analytics. Acest serviciu îmi poate oferi în timp real date analitice referitoare la aplicație, date precum numărul de utilizatori activi, timpul pe care utilizatorul l-a petrecut în aplicație, locația de unde a fost descărcată aplicația, factorul care a determinat utilizatorul să descarce aplicația sau informațiile referitoare la perioada de timp în care aplicația a fost instalată pe dispozitivul utilizatorului. Aceste date au fost și sunt în continuare foarte utile, făcând posibilă implementarea unor noi funcții din cadrul aplicației. Acest serviciu a influențat apariția anumitor noi funcții în cadrul aplicației deoarece pe baza datelor statistice s-a luat decizia traducerii aplicației în mai multe limbi sau implementarea anumitor funcții noi precum controlul tastaturii specifice altor limbi. Aceste date analitice îmi oferă informații foarte utile cu ajutorul cărora îmi pot crea mai multe idei referitoare la modul în care aplicația este utilizată în anumite zone, dar și idei de îmbunătățire a aplicației prin implementarea unor funcții noi sau modificarea celor existente. Datele colectate de platforma Firebase, sunt date anonime, necunoscându-se identitatea utilizatorului. Pentru ca utilizatorul să poată fi informat cu referire la colectarea acestor date personale, au fost implementate mai multe căi de informare, atât în aplicație cât și pe website-ul oficial al aplicației. Astfel că, utilizatorului îi este adus la cunoștință faptul că datele colectate sunt anonime, atât prin accesarea secțiunii “Info” din cadrul aplicației client, dar și prin accesarea paginii “Politică de confidențialitate”, secțiune ce aparține website-ului. Prin descărcarea aplicației, se consideră faptul că utilizatorul a acceptat termenii și condițiile dar și politica de confidențialitate a acestui proiect.

Figura 46 Google Firebase – Analytics – Informații exacte referitoare la zonele de pe glob de unde a fost descărcată aplicația

Figura 46 prezintă datele referitoare la locația de unde a fost descărcată aplicația de cele mai multe ori, dar și date demografice referitoare la categoriile de vârsta în cadrul cărora a fost descărcată aplicația de cele mai multe ori. Datele privind locația de unde a fost descărcată aplicația de cele mai multe ori au fost și cele care au influențat cel mai mult implementarea anumitor noi funcții în cadrul aplicației dar și strategiile de promovare a acesteia. După cum poate fi observat în figura de mai sus, primele 3 țări din acest “clasament” al țărilor cu cei mai mulți utilizatori ai aplicației sunt Rusia, Ucraina și Polonia.

Implementarea acestor servicii care generează date analitice și datele referitoare la erori, au ajutat, și ajută în continuare foarte mult la menținerea calității aplicației, aceasta reprezentând principalul motiv pentru care utilizatorii de dispozitive, în general, descarcă o aplicație și decid să o păstreze pentru mai mult timp.

Începând cu luna noiembrie 2019, numărul de descărcări a început să crească, ajungând la 1.226, acest număr de descărcări fiind de patru ori mai mare decât numărul de descărcări din luna octombrie. Pentru menținerea acestui număr de descărcări, și eventual creșterea acestuia, am început să utilizez o metodă de promovare specifică aplicațiilor mobile, aceasta ajutând la creșterea vizibilității aplicației pe magazinul de aplicații Google Play.

Această metodă de promovare a aplicațiilor mobile se numește “Optimizarea magazinului de aplicații”, sau pe scurt ASO. Această tehnică reprezintă echivalentul „Optimizării motorului de căutare”, cunoscut ca și SEO, această optimizare fiind specifică website-urilor. Mai precis, ASO reprezintă un proces de optimizare a poziției pe care o are aplicația în magazinul de aplicații, pe baza cuvintelor cheie care sunt utilizate pentru găsirea acesteia și descărcarea ulterioară. [34]

Pentru a putea fi realizată această optimizare a aplicației din punctul de vedere al vizibilității pe platforma unde a fost încărcată, este necesară optimizarea a șase elemente specifice paginii descriptive a aplicației. Primul dintre acestea este numele aplicației. Este important ca numele aplicației pe platforma Google Play, să nu fie alcătuit doar din numele propriu-zis, ci pe lângă acesta să existe și anumite cuvinte cheie. Astfel că, în momentul în care un utilizator va realiza o căutare pe baza acelor cuvinte cheie, există o șansă mult mai mare ca aplicația să se afle printre primele rezultate. Studiile realizate de către experții ASO spun că, aplicațiile care utilizează cuvinte cheie pentru acest câmp de afișare a numelui au cu 10,3% mai multă vizibilitate decât cele care nu utilizează cuvinte cheie. [34]

După cum puteți observa în figura de mai jos, numele aplicației ADMote Control afișat pe platforma Google Play conține de asemenea și anumite cuvinte cheie, astfel că în momentul în care utilizatorul va realiza o căutare pe magazinul de aplicații, utilizând acel cuvânt cheie șansele ca aplicația ADMote Control să fie găsită vor fi mai mari. Cuvintele cheie pot fi utilizate și sub formă de combinații, în cazul aplicației ADMote Control combinațiile de cuvinte cheie pot fi: Telecomandă Windows, Telecomandă pentru PC, Telecomandă pentru laptop, Telecomandă pentru PC și laptop etc.

Figura 47 Numele aplicației afișat pe magazinul de aplicații Google Play

Al doilea element care a necesitat o modificare pentru a se putea realiza optimizarea paginii a fost elementul specific descrierii aplicației. Ca și în cazul titlului aplicației, este necesară utilizarea în cadrul descrierii scurte dar și a descrierii lungi a aplicației utilizarea unor cuvinte cheie care să crească șansele ca aplicația să fie găsită în momentul realizării unei căutări. Este foarte important ca atât în cazul titlului cât și în cazul descrierilor asociate aplicației, cuvintele cheie să nu fie utilizate excesiv și să aibă legătură cu activitatea pe care dorește să o îndeplinească aplicația. De asemenea, cuvintele cheie nu pot fi utilizate doar sub forma lor inițială ci trebuie introduse într-o frază, paragraf, astfel încât să poată fi creat un sens specific utilizării acestora.

Figura 48 Descrierea scurtă și o parte din descrierea completă a aplicației

Figura 48 prezintă interfața de modificare a descrierii scurte și a descrierii complete a aplicației din cadrul paginii de dezvoltator a aplicației. După cum poate fi observat, aceste descrieri ale aplicației conțin cuvinte cheie precum: Telecomandă, Control pentru mouse, Control tastatură etc, cuvinte care cresc șansele ca aplicația să devină mult mai vizibilă în căutările utilizatorilor.

Al treilea element utilizat pentru optimizarea paginii descriptive a fost logo-ul aplicației. Logo-ul aplicației reprezintă unul dintre primele elemente pe care un utilizator de dispozitiv Android le vede în momentul realizării unei căutări. Astfel că, este importat ca logo-ul aplicației să creeze o impresie bună în momentul în care este vizualizat, pentru că o simplă pictogramă poate crea utilizatorului o opinie despre scopul aplicației și calitatea acesteia. [34]

Aplicației ADMote Client i-au fost aduse mai multe modificări în ceea ce privește logo-ul, însă după o scurtă cercetare a anumitor aspecte a logo-urilor din cadrul categoriei de aplicații de tip control calculator, am ales să utilizez logo-ul prezentat în figura 47. Prin cercetarea pe care am realizat-o pe magazinul de aplicații, am observat faptul că majoritatea aplicațiilor care doresc a ajuta utilizatorii să controleze calculatorul de la distanță, utilizează pictograme care au un fundal specific culorilor reci precum albastru, verde, violet, astfel că am decis ca pictograma asociată aplicației ADMote Control să aibă un fundal specific culorilor calde, iar în prim-plan să fie un element grafic care să facă posibilă înțelegerea scopului aplicației, și anume transformarea telefonului într-o telecomandă pentru calculator.

Al patrulea element care este foarte important pentru optimizarea aplicației în cadrul magazinului de aplicații este categoria de aplicații din care aceasta face parte. Este foarte important ca în momentul în care o aplicației este încărcată pe un magazin de aplicații, acesteia să îi fie atribuită o categorie care să descrie exact care este principala funcție a aplicației. În cazul în care aplicația este specifică mai multor categorii de aplicații este importantă realizarea unei cercetări pentru a se stabili care este cea mai potrivită, sau ce categorie ar putea ajuta aplicația să aibă succes. [34]

În cazul aplicației ADMote Control, aceasta a fost introdusă în categoria aplicațiilor de tipul utilitare deoarece cu ajutorul ei pot fi controlate anumite funcții ale calculatorului, sau mai precis este o aplicație utilă. Această aplicație mai putea fi inclusă și în cadrul aplicațiilor din categoria de productivitate, deoarece prin intermediul acesteia pot fi îndeplinite anumite task-uri, însă principala funcție a aplicației este aceea de a realiza controlul calculatorului, deci o funcție de utilitate.

Penultimul dintre elementele pentru care a fost necesară realizarea unor modificări este reprezentat de capturile de ecran ale aplicației. Capturile de ecran sunt extrem de importante în ceea ce privește optimizarea paginii descriptive a aplicației, deoarece în momentul în care utilizatorul selectează aplicația, iar pagina descriptivă este afișată, acesta va dori să își creeze o idee referitoare la funcțiile pe care aplicația le deține dar și o idee referitoare la design-ul acesteia. Majoritatea utilizatorilor aleg să citească descrierea scurtă și să vizualizeze aceste imagini descriptive pentru a-și crea o idee despre aplicație. Astfel că, aceste element de optimizare este foarte important. [34]

În ceea ce privește aplicația ADMote Control, capturile de ecran au fost modificate de mai multe ori, însă a fost păstrată aceeași idee de a prezenta atât interfața utilizatorului cât și oferirea anumitor informații despre funcțiile pe care le îndeplinește aplicația. Figura 49 prezintă o parte din capturile de ecran prezente în acest moment pe pagina descriptivă a aplicației.

Figura 49 Capturile de ecran prezentate pe pagina descriptivă a aplicației din cadrul magazinului de aplicații

Ultimul dintre aceste elemente importante pentru optimizarea paginii descriptive și implicit a aplicației pe platforma Google Play este reprezentat de localizare. Localizarea reprezintă un proces de prezentare a aplicației în mai multe limbi, pentru a nu fi limitată înțelegerea funcționalității aplicației sau a elementelor implementate în cadrul acesteia. Este important să fie acordată șansa utilizatorilor de dispozitive Android să înțeleagă scopul pentru care a fost proiectată o anumită aplicație, chiar dacă aceștia nu cunosc limba engleză. Ca de exemplu, pentru un utilizator care vorbește limba rusă, există șansa ca detaliile despre aplicație, prezentate în limba engleză, aceasta fiind limba principală din cadrul platformei Google Play, să nu fie înțelese. Astfel că este importantă optimizarea elementelor precum titlul aplicației, descriere simplă, descriere completă, capturi de ecran, astfel încât informația prezentată de acestea să fie disponibilă și utilizatorilor din alte țări unde engleza nu este o limbă principală sau o limbă secundară. [34]

Astfel că, pagina descriptivă asociată aplicației ADMote Control, a fost optimizată astfel încât informațiile despre aplicație să fie accesibile utilizatorilor Android din mai multe țări. Elementele de tip titlul aplicației, descriere simplă și descriere complete, elemente specifice optimizării au fost traduse în 55 de limbi, fapt care a determinat și menținerea numărului de descărcări peste cota de 1000 de descărcări lunare. În ceea ce privește capturile de ecran, acestea au fost optimizate astfel încât să coincidă cu limbile în care este disponibilă aplicația în acest moment. Aplicația ADMote Control este disponibilă în 14 limbi, astfel că, și imaginile descriptive din cadrul paginii descriptive a aplicației au fost optimizate pentru aceste 14 limbi.

Figura 50 Grafic care prezintă evoluția aplicației în ceea ce privește numărul de descărcări din ultimele 7 luni

Figura 50 prezintă graficul prin care este ilustrată evoluția aplicației în ceea ce privește numărul de descărcări din ultimele 7 luni. După cum poate fi observat în acest grafic începând cu luna noiembrie 2019, moment în care s-a început implementarea optimizării pentru magazinul de aplicații, numărul de descărcări al aplicației ADMote Control nu a scăzut sub 1000, ajungând în luna ianuarie și la 3193 de descărcări, cel mai mare de până acum. Deși în luna ianuarie numărul de descărcări a fost cel mai ridicat de până acum, existența anumitor erori care au fost rezolvate mai greu dar și numărul mic de recenzii au reprezentat factori care au adus la scăderea numărului de descărcări de la peste 3000 la un număr aproape de 1000 în luna februarie. Datorită faptului că erorile din cadrul aplicației au fost fixate, iar aplicația a mai suferit anumite modificări specifice optimizării pentru magazinul de aplicații, începând cu luna martie 2020 s-a constatat o creștere ușoară a numărului de descărcări, încercând a readuce aplicația peste pragul de 3000 de descărcări lunare. Evoluția aplicației, este una continuă, aceasta aflându-se în acest moment la versiunea 1.4. Modificarea interfeței utilizatorului, implementarea noilor funcții, realizarea unui website pentru informarea utilizatorului, implementarea serviciilor de detectare a erorilor și de prezentare a datelor analitice dar și optimizarea paginii descriptive a aplicației, au reprezentat și reprezintă în continuare factori importanți în evoluția aplicației și în actualizarea aplicației astfel încât aceasta să respecte standardele de calitate impuse de către compania Google.

4 Concluzie

Ca orice proiect, ADMote Control a pornit de la o idee. Ideea a fost pusă în practică iar astăzi putem observa rezultatul, sau cel puțin o parte din ceea ce doresc eu ca acest proiect să reprezinte în viitor. Până a vorbi despre viitorul aplicației aș dori să menționez câteva aspecte referitoare la trecutul aplicației sau prezentul acesteia. Acești doi ani și jumătate în care s-a realizat dezvoltarea aplicației au reprezentat o perioadă extrem de importantă pentru mine, în ceea ce privește acumularea de informații referitoare la dezvoltarea de aplicații, sau al programării în general. Deși acesta a reprezentat și reprezintă în continuare un proiect personal, nu ar fi putut ajunge în acest stadiu fără ajutorul platformelor prin intermediul cărora sunt oferite informații referitoare la dezvoltarea aplicațiilor mobile, sau altor programatori din întreaga lume care au putut ajuta prin intermediul comunităților online specifice programatorilor, oferind răspunsuri la majoritatea întrebărilor pe care le-am avut, ori de cate ori am întâmpinat o problemă în dezvoltarea aplicației sau am avut o idee pe care nu am știut să o pun imediat în practică.

În acest moment, aplicația prezintă un număr de aproximativ 16 mii de descărcări, și deși nu pare un număr foarte mare, este un număr decent, descărcările acestea nefiind realizate pe baza unei investiții în ceea ce privește publicitatea pentru aplicație. Acest număr de descărcări a fost realizat pe baza strategiilor de promovare care au fost implementate cu ajutorul serviciilor oferite de către compania Google, servicii prezentate în capitolul precedent.

În ceea ce privește viitorul acestei aplicații, consider că aceasta are în continuare potențial, și poate avea în curând o bază mult mai numeroasă de utilizatori astfel încât să poată ajunge o aplicație mult mai cunoscută specifică acestei categorii de aplicații utilitare. În următoarea perioadă, doresc să implementez în cadrul aplicației, funcții noi de control, cu ajutorul cărora să pot atrage mai mulți utilizatori, dar de asemenea doresc a îmbunătăți și funcțiile de control sau de conectare prezente deja în cadrul aplicației, astfel încât să pot menține calitatea aplicației la un standard superior.

Până în acest moment costurile pentru dezvoltarea acestei aplicații nu au fost foarte ridicate, fiind necesare doar câteva investiții pentru creșterea standardului de calitate al proiectului. Cu siguranță, investițiile vor mai fi necesare pentru menținerea anumitor servicii, însă doresc a menține costul acestora cât mai scăzut, iar dacă va fi posibil doresc ca în viitor acest proiect să poată genera și venituri, nu doar să genereze costuri.

Pe lângă realizarea mentenanței pentru aplicația deja lansată pe platforma Google Play, aș dori ca în curând să pot lansa aplicația și pe alte magazine de aplicații precum magazinul de aplicații asociat produselor Apple, magazinului de aplicații asociat produselor Amazon dar și magazinului de aplicații asociat produselor Huawei. Acest lucru va necesita cu siguranță foarte mult timp, fiind vorba de realizarea aplicației prin utilizarea altor limbaje de programare și implicit a altor medii de dezvoltare, însă nu exclud aceste noi lansări pentru alte tipuri de dispozitive.

În opinia mea, dezvoltarea acestui proiect a reprezentat, și reprezintă în continuare un plus atât pentru mine ca și dezvoltator software, deoarece de-a lungul acestor ani am reușit să acumulez informații extrem de importante, necesare în dezvoltarea unei cariere de programator, cât și pentru utilizatorii dispozitivelor Android, deoarece această aplicație a reușit să îi ajute pe aceștia, oferindu-le posibilitatea de a-și transforma telefonul într-o telecomandă pentru calculator. Cred cu tărie faptul că, informațiile pe care le-am prezentat în cadrul acestui proiect reprezintă doar o etapă din evoluția acestei aplicații, dorind ca în următorii ani să realizez alte modificări și să implementez noi funcții astfel încât evoluția acestui proiect să fie mult mai vizibilă decât în acest moment.

Bibliografie

[1] Modul în care telefoanele mobile au schimbat lumea. Evoluția telefoanelor mobile, https://www.telegraph.co.uk/technology/how-phones-changed-the-world/evolution-of-mobile-phones/.

[2] Evoluția telefoanelor mobile, https://flauntdigital.com/blog/evolution-mobile-phones/.

[3] Statistică referitoare la numărul de aplicații disponibile în magazinele de aplicații, https://www.statista.com/statistics/276623/number-of-apps-available-in-leading-app-stores/.

[4] De la 1G la 5G – Un scurt istoric al evoluției standardelor de telefonie mobilă, https://www.brainbridge.be/news/from-1g-to-5g-a-brief-history-of-the-evolution-of-mobile-standards.

[5] Sistemul de operare Android, https://www.investopedia.com/terms/a/android-operating-system.asp.

[6] Android OS, https://en.wikipedia.org/wiki/Android_(operating_system).

[7] Site-ul oficial al sistemului de operare Android, https://www.android.com/.

[8] Arhitectura Android, https://www.tutlane.com/tutorial/android/android-architecture.

[9] Componentele de bază ale sistemului de operare Android, https://www.wideskills.com/android/overview-android/principal-ingredients-android.

[10] Activitățile sistemului de operare Android, https://developer.android.com/reference/android/app/Activity.

[11] Receptorii de transmisie, https://developer.android.com/guide/components/broadcasts.

[12] Intențiile, https://developer.android.com/guide/components/intents-filters.

[13] Serviciile, https://developer.android.com/guide/components/services.

[14] Furnizorii de conținut, https://developer.android.com/guide/topics/providers/content-provider-basics.

[15] Cele mai utilizate limbaje de programare pentru dezvoltarea aplicațiilor Android, https://dzone.com/articles/most-used-programming-languages-for-android-app-de.

[16] Android Studio, https://developer.android.com/studio.

[17] Fragmentele Android, https://www.raywenderlich.com/1364094-android-fragments-tutorial-an-introduction-with-kotlin.

[18] Mesajele de tip Toast , https://developer.android.com/guide/topics/ui/notifiers/toasts

[19] Portecle, http://portecle.sourceforge.net/.

[20] Diferite tipuri de chei de securitate în limbajul Java, https://www.pixelstech.net/article/1467528503-Different-types-of-keystore-in-Java–-BKS.

[21] Cheia de securitate BKS, https://www.kb.cert.org/vuls/id/306792#:~:text=BKS%20is%20a%20keystore%20format,protections%20to%20the%20keystore%20contents.

[22] Cheia de securitate JKS, https://en.wikipedia.org/wiki/Java_KeyStore.

[23] Clasa AsyncTask, https://www.quora.com/What-is-AsyncTask-in-Android.

[24] MotionEvent, https://developer.android.com/reference/android/view/MotionEvent.

[25] ListView, https://www.vogella.com/tutorials/AndroidListView/article.html.

[26] Shared Preferences, https://developer.android.com/android/content/SharedPreferences

[27] Screensizes, https://developer.android.com/training/multiscreen/screensizes

[28] JavaFX, https://en.wikipedia.org/wiki/JavaFX

[29] Google Play, https://www.lifewire.com/what-is-google-play-1616720

[30] Fișierele APK și AAB, https://medium.com/better-programming/android-app-bundles-vs-apks-8b0306b38436

[31] Setarea unei testări deschise sau închise și a unei versiuni de lansare, https://support.google.com/googleplay/android-developer/answer/3131213?hl=en

[32] Google Firebase, https://firebase.google.com/

Rezumat

Prin intermediul prezentului proiect, este prezentată evoluția aplicației ADMote Control, aceasta reprezentând o aplicație Android pentru controlul calculatorului de la distanță. Dezvoltarea acesteia a plecat de la o idee simplă și anume aceea de a se realiza o aplicație Android cu ajutorul căreia să poată fi realizat controlul mouse-ului și tastaturii unui calculator sau laptop, cu ajutorul unui dispozitiv Android. Deși la început aceasta a părut o aplicație foarte simplu de realizat, de-a lungul timpului au fost implementate diferite alte funcții de control al calculatorului, funcții precum controlul diferitelor medii de redare, controlul prezentărilor realizate cu ajutorul programului PowerPoint sau al serviciului Google Slides sau controlul statusului calculatorului sau laptopului, iar odată cu implementarea acestor funcții, aplicația ADMote Control a devenit un proiect mult mai complex.

Evoluția acestei aplicații a dus și la introducerea acesteia pe platforma Google Play, fiind pusă la dispoziție și altor utilizatori de dispozitive Android. Odată cu lansarea aplicației pe magazinul de aplicații Google Play, au fost implementate și alte servicii cu ajutorul cărora s-a putut realiza îmbunătățirea funcțiilor existente în cadrul aplicației sau adăugarea unor noi funcții.

În acest moment, aplicația ADMote Control are 16 mii de descărcări pe dispozitivele Android, având în continuare aproximativ 1000 de utilizatori activi. De asemenea, aplicației i-a fost asociat și un website cu ajutorul căruia utilizatorul poate descărca serverul necesar realizării conexiunii sau poate fi informat cu referire la modul de realizare al conexiunii necesare pentru controlul calculatorului dar și al modului în care anumite probleme din cadrul aplicației pot fi remediate.

În viitor, se dorește introducerea aplicației și pe alte magazine de aplicații, astfel încât să poată fi utilizată și pe alte tipuri de dispozitive, dar cel mai important lucru ce se dorește a fi realizat în continuare este menținerea unui standard superior de calitate al aplicației.

Abstract

Through this project, the evolution of the ADMote Control application is presented, this being an Android application that can offer users of Android devices a way to control their personal computer or laptop with the help of their phone or tablet. Its development started from a simple idea, namely to create an Android application that can help the Android devices users to control the mouse and the keyboard of a computer or laptop by using an Android device. Although at first it seemed a very simple application to make, over time various other computer control functions have been implemented, functions such as controlling different media players, controlling presentations made using PowerPoint or Google Slides or computer or laptop status control, and with the implementation of these functions, the ADMote Control application has become a much more complex project.

The evolution of this application also led to its introduction on the Google Play platform, being made available to other users of Android devices. With the launch of the application on the Google Play application store, other services were implemented with which it was possible to improve the existing functions within the application or add new functions.

At the moment, the ADMote Control application has 16,000 downloads on Android devices, still having about 1000 active users. The application has also been associated with a website through which the user can download the server needed to make the connection or can be informed about how to make the connection needed to control the computer and how certain problems within the application can be fixed .

In the future, I would like to introduce the application in other application stores so that it can be used on other types of devices, but the most important thing to be achieved in the future is to maintain a higher standard of application quality.

F07-PS 7.6-01/ed.2,rev.2

Similar Posts