DEZVOLTAREA UNEI APLICAȚII ANDROID PENTRU GESTIONAREA CHELTUIELILOR [307001]
UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE INGINERIE
SPECIALIZAREA INGINERIA SISTEMELOR MULTIMEDIA
PROIECT DE DIPLOMĂ
COORDONATOR ȘTIINȚIFIC: ABSOLVENT: [anonimizat]. SIMA Dorin ANDREI Mihai Cătălin
Sibiu 2018
Universitatea „LUCIAN BLAGA” din Sibiu
Facultatea de Inginerie
Specializarea Ingineria Sistemelor Multimedia
DEZVOLTAREA UNEI APLICAȚII ANDROID PENTRU GESTIONAREA CHELTUIELILOR
COORDONATOR ȘTIINȚIFIC: ABSOLVENT: [anonimizat]. SIMA Dorin ANDREI Mihai Cătălin
Sibiu 2018
INTRODUCERE
Gestionarea banilor este procesul de administrare a [anonimizat], investițiilor, bugetarea, sectorul bancar și impozitele. Se mai numește și gestionarea investițiilor.
Cheltuirea banilor pentru a satisface anumite dorințe ([anonimizat]) reprezintă un fenomen uman natural. Ideea tehnicilor de gestionare a banilor a fost dezvoltată pentru a [anonimizat], portofoliilor și activelor pe termen lung.
[anonimizat] (smartphone), a apărut conceptul de aplicație mobilă, o [anonimizat] o gamă vastă de aplicații pe mai multe sisteme de operare mobile cu diferite întrebuințări. [anonimizat] o apăsare de buton.
Totodată, [anonimizat]. Hackerii sunt din ce în ce mai buni la accesarea datelor și la însușirea acestora. [anonimizat].
[anonimizat].
[anonimizat], de monitorizare a cheltuielilor avute de o persoană, platforma aleasă fiind Android. [anonimizat]-[anonimizat]-i acestuia o interfață intuitivă prin intermediul căreia acesta să poată să își vizualizeze și să își administreze cheltuielile cât mai simpu și eficient posibil.
[anonimizat] o [anonimizat]-și astfel un cont cu ajutorul căruia va avea acces la toate înformațiile cu privire la cheltuieli. Pentru dispozitivele prevăzute cu senzor de amprentă aplicația va permite autentificarea utilizând amprenta utilizatorului.
[anonimizat], [anonimizat] o documentație vastă care este disponibilă gratuit și poate fi studiată la nevoie pentru a extinde modul de utilizare și a adăuga noi funcționalități aplicației.
[anonimizat] o multitudine de opțiuni de dezvoltare și de a-mi aprofunda cunoștințele legate de limbajul de programare Java acumulate în cei patru ani de facultate, punând-le în practică prin dezvoltarea unei aplicații de gestionare a cheltuielilor.
Cel de-al doilea motiv pentru alegerea accestei teme a fost dorința de a crea o aplicație care să vină în întâmpinarea nevoilor mele referitoare la gestionarea banilor. Lipsa unei măsuri de siguranță, care să protejeze informațiile, cu care se confruntă celelalte aplicații din acestă gamă a fost definitorie în alegerea acestei teme.
Obiective propuse
Primul obiectiv este acela de a oferi utilizatorului posibilitatea de a-și crea un utilizator pentru viitoarele autentificări pentru a evita accesul neautorizat păstrând siguranța datelor. În cazul telefoanelor prevăzute cu cititor de amprentă autentificarea nu se va mai face prin utilizator și parolă ci prin intermediul amprentei.
Al doilea obiectiv important este acela de a crea o interfață cât mai utilă cu utilizatorul și simplă pentru navigarea în cadrul aplicației, pe care majoritatea utilizatorilor de aplicații pe platforma Android o pot folosi cu ușurință.
Al treilea obiectiv este de a permite utilizatorului de a adăuga, modifica sau șterge cheltuielile pe care acesta le are dar și categoriile de care acestea aparțin. În intermediul aplicației atât cheltuielile cât și veniturile vor putea fi vizualizate sub forma unor grafice, totul fiind cât mai intuitiv și ușor de urmărit în cadrul aplicației cu ajutorul api-ului de desenare a graficelor Google chart.
CONSIDERAȚII TEORETICE
Secțiunea teoretică a lucrării de licență conține descrierea tuturor elementelor utilizate, în acest caz de natură software, care au luat parte la realizarea aplicației de Android. Voi descrie atât noțiuni teoretice despre sistemul de operare Android, cât și tehnologiile și limbajul folosit pentru conectarea la baza de date, programarea aplicației și realizarea interfaței grafice și programul folosit pentru dezvoltare.
Sistemul de programare Android
1.1 Scurt istoric
Compania Android Inc. a fost înființată în anul 2003 în Palo Alto din California. Cei patru fondatori au fost: Rich Miner, Nick Sears, Chris White și Andy Rubin. La momentul înființării Rubin spunea că Android Inc. “urma să dezvolte dispozitive mobile mai inteligente, care sunt mai conștiente de locația și preferințele proprietarului”. [1]
Sistemul de operare Android a fost inițial menit să îmbunătățească sistemele de operare ale camerelor digitale. În 2004 compania a arătat cum Android instalat pe o camera foto, se va conecta fara fir la un PC. Acest PC se va conecta apoi la un “Datancer Android” în care proprietarii camerelor ar putea sa-și stocheze fotografiile online pe un server de tip cloud. Apoi, Android Inc. a decis să schimbe uneltele spre utilizarea sistemului de operare în interiorul telefoanelor mobile.
În anul 2005, compania inițială a fost a fost achiziționată de Google. S-a luat decizia de folosi Linux ca bază pentru sistemul de operare Android, ceea ce a însemnat că Android în sine ar putea fi oferit gratuit producătorilor de telefoane mobile de la terți.
Descriere generală
Android este un sistem de operare mobil dezvoltat de Google, bazat pe o versiune modificată a kernel-ului Linux și a altor software open source. Inițial a fost conceput pentru dispozitive mobile touchscreen (smartphone-uri si tablete), dezvoltând apoi Android TV (pentru televizoare), Android Auto (pentru mașini), Android Wear (pentru ceasuri de mână), fiecare cu interfață de utilizator diferită. Variantele de Android sunt de asemenea folosite pe notebook-uri, console de jocuri, camere digitale și alte produse electronice. [3]
Interfața cu utilizatorul Android se bazează în principal pe manipularea directă, utilizând gesturi tactile care corespund în mod liber acțiunilor din lumea reală, precum împingerea, atingerea și ciupirea, manipularea obiectelor pe ecran, împreună cu o tastatură virtuală pentru introducerea textului.
Figura 2 – Display Server SurfaceFlinger [4]
Aplicațiile ("apps") care extind funcționalitatea dispozitivelor, sunt scrise utilizând kitul de dezvoltare software Android (SDK)și adesea limbajul de programare Java. Java poate fi combinat cu C / C ++, împreună cu o gamă de runtime-uri non-implicite care permit un mai bun suport C ++. Limbajul de programare Go este de asemenea acceptat, deși cu un set limitat de interfețe de programare a aplicațiilor (API). În mai 2017, Google a anunțat sprijinul pentru dezvoltarea aplicațiilor Android în limba de programare Kotlin. SDK include un set cuprinzător de instrumente de dezvoltare, inclusiv un program de depanare, biblioteci de software, un emulator de telefon bazat pe QEMU, documentație, cod exemplu și tutoriale. Inițial, mediul de dezvoltare integrat suportat de Google (IDE) a fost Eclipse utilizând pluginul (ADT); În decembrie 2014, Google a lansat Android Studio, bazat pe IntelliJ IDEA, ca IDE-ul său principal pentru dezvoltarea de aplicații Android. Alte instrumente de dezvoltare sunt disponibile, inclusiv un kit nativ de dezvoltare (NDK) pentru aplicații sau extensii în C sau C ++, Google App Inventor, un mediu vizual pentru programatorii novici și diverse platforme de aplicații web mobile încrucișate. În ianuarie 2014, Google a dezvăluit un cadru bazat pe Apache Cordova pentru portarea aplicațiilor web HTML 5 Chrome pe Android, înfășurat într-o coajă de aplicație nativă. [3]
1.3 Arhitectura Android
Android conține o serie de componente software împărțită în 5 secțiuni:
Figura 3 – Arhitectura software Android [5]
Aplicații și caracteristici – se găsesc toate aplicațiile de pe stratul superior, fiecare
aplicație având un rol diferit în toate aplicațiile (exemple: contacte, browsere, servicii,etc)
Domeniul de aplicare al aplicației – oferă mai multe servicii de nivel superior aplicațiilor, dezvoltatorii aplicațiilor având dreptul să utilizeze aceste servicii în aplicația lor (exemple: sistemul de vizualizare, managerul de pachete, managerul de resurse, etc)
Biblioteci – bibliotecile webkit, libc sunt folosite pentru a reda și înregistra audio și video; SQLite este o bază de date utilă pentru stocarea și partajarea datelor aplicațiilor; bibliotecile SSL sunt responsabile pentru securitatea internetului
Android Runtime – oferă o componentă cheie numită Dalvik Virtual Machine, care este un fel de mașină virtuală Java. Dalvik VM folosește funcții de bază Linux cum ar fi gestionarea memoriei și multithreading care este într-un limbaj Java. Dalvik VM permite fiecărei aplicații Android să ruleze propriul proces. Dalvik VM execută fișierele în format .dex
Linux kernel – Androidul folosește kernel-ul puternic Linux și suportă o gamă largă de drivere hardware. Kernel-ul este nucleul sistemului de operare care gestionează cererile de intrare și ieșire din software. Aceasta oferă funcționalități de bază ale sistemului, cum ar fi managementul proceselor, gestionarea memoriei, gestionarea dispozitivelor cum ar fi camera foto, tastatura, afișarea, etc kernel-ul se ocupă de toate lucrurile. Linux este foarte bun la rețea și nu este necesar să-l interfațeze cu hardware-ul periferic. Kernel-ul în sine nu interacționează direct cu utilizatorul, ci mai degrabă interacționează cu shell-ul și alte programe, precum și cu dispozitivele hardware din sistem.
1.4 Versiuni și caracteristici
Istoria versiunilor sistemului de operare Android pentru dispozitive mobile a început cu lansarea primei versiuni ALPHA în 5 Noiembrie 2007. Prima versiune comercială, Android 1.0, a fost lansată în septembrie 2008. Android este în dezvoltare continuă de către Google și Open Handset Alliance și a avut parte de multe update-uri asupra versiunii de bază de când a fost lansat.
Versiunile 1.0 si 1.1 ale sistemului de operare nu au fost lansate sub un nume de cod.
Versiunile de Android au diferite nume de cod legate de dulciuri și produse alimentare,
începând cu versiunea 1.5 care primește numele de Cupcake (brioșă), continuând până la cea mai recentă veriune, Android 8.0 Oreo (biscuite Oreo), după cum se observă în tabelul 1.
Versiuni:
Tabel 1 – Versiuni platforma android [6]
Figura 4 – Istoria versiunilor Android [6]
Versiunile de Android se schimbă de la an la an, aducând cu fiecare versiune schimbări destul de importante în structura sistemului de operare, datorită noilor funcționalități și pentru a putea face fața cu brio la cele mai noi dispozitive pe care producătorii de smartphone-uri le lansează. [7]
Un lucru foarte important este faptul că utilizatorii de smartphone-uri se plictisesc destul de repede de dispozitivele pe care le folosesc și își doresc produse tot mai noi cu versiuni superioare de Android. Figura 5 ne prezintă foarte clar versiunile de Android folosite în anul 2017 si de aceea trebuie să fim foarte atenți când dezvoltăm o aplicație nouă și să ne asigurăm că vom alege o versiune de API potrivită, în așa fel încât aplicația să poată fi folosită de cât mai mulți utilizatori, fară a fi nevoiți să își schimbe telefoanele.
Figura 5 – Utilizarea versiunilor de Android în anul 2017 [6]
Caracteristici:
Tabel 2 – Caracteristici platformă Android [3]
Limbajul de programare utilizat – Java
Java este unul dintre cele mai populare limbaje de programare, caractersticile fiind orientate pe obiecte. În programarea pe obiecte, o problemă complexă este împărțită în seturi mai mici prin creare de obiecte, astfel codul va fi reutilizabil, mai ușor de întreținut și are avantaje de design.
Figura 6 – Logo limbaj Java [8]
Java a fost construit pe baza filosofiei „Write once, run anywhere” (scrie odată și rulează oriunde), adică acest cod Java compilat poate rula oriunde, pe toate platformele care suportă Java, fără nevoia de recompilare a codului.
Din anul 2016, Java este una dintre cele mai populare limbaje de programare folosite, în particular pentru aplicațiile web bazate pe relația client – server, cu un număr raportat de 9 milioane de developeri. Java a fost la origine dezvoltată de Jamson Gosiling de la firma Sun Microsystems (care mai apoi a fost cumparată de Oracle Corporation) și a fost lansată în anul 1995 ca o componentă de bază a platformei Java realizate de Sun Microsystems. Sintaxa codului este derivată din C și C++, însă are mai puține facilități low-level decăt cele două.
Sintaxa Java este în mare măsură influențată de C ++. Spre deosebire de C ++, care combină sintaxa pentru programare structurată, generică și orientată pe obiecte, Java a fost construit aproape exclusiv ca un limbaj orientat pe obiecte. Tot codul este scris în interiorul clasei și fiecare element de date este un obiect, cu excepția tipurilor de date primitive (adică numere întregi, numere cu puncte variabile, valori booleene și caractere), care nu sunt obiecte din motive de performanță. Java reutilizează câteva aspecte populare ale C ++ (cum ar fi metoda printf () ).
Primele compilatoare Java, mașinile virtuale și clasele de librării au fost realizate și lansate de Sun sub o licență proprietară. În mai anul 2007, compania Sun a relicențiat aproape toate tehnologiile sale Java sub licența GNU (Genereal Public License). Alții au dezvoltat diferite tehnologii realizate de Sun, cum ar fi compilatorul java GNU.
Pentru a rula Java, se folosește o mașină abstractă denumită, Java Virtual Machine (JVM). JVM execută Java bytecode, apoi CPU executa JVM. Deoarece toate JVM-urile funcționează exact la fel, același cod funcționează și pe alte sisteme de operare, făcând Java independent de platformă. [8]
Versiuni:
JDK 1.0 (23 Ianuarie 1996)
JDK 1.1 (19 Februarie 1997)
J2SE 1.2 (8 Decembrie 1998)
J2SE 1.3 (8 Mai 2000)
J2SE 1.4 (6 Februarie 2002)
J2SE 5.0 (30 Septembrie 2004)
Java SE 6 (11 Decembrie 2006)
Java SE 7 (28 Iulie 2011)
Java SE 8 (18 Martie 2014) – Suportată gratuit de Oracle
Există 4 platforme Java furnizate de Oracle:
Java Card – pentru smartcard-uri
Java Platform, Micro Edition (Java ME) – pentru hardware cu resurse limitate, telefoane mobile
Java Platform, Standard Edition (Java SE) – pentru sisteme gen workstation
Java Platform, Enterprise Edition (Java EE) – pentru sisteme de calcul mari
IDE ( Integrated Development Environment ) este un mediu de lucru care permite realizarea aplicației, folosind anumite limbaje de programare, doar cele suportate de IDE, cele pentru care a fost creat acel IDE. Pentru limbajul de programare Java sunt folosite următoarele: [9]
JCreator – gratuit
Eclipse – gratuity
NetBeans – gratuit
Android Studio
Android Studio este mediul de dezvoltare integrat (IDE) oficial pentru sistemul de operare Google Android construit pe software-ul IntelliJ IDEA al JetBrains și proiectat special pentru dezvoltarea Androidului. Este disponibil pentru descărcare pe sistemele de operare Windows, MacOS și Linux. Este un înlocuitor pentru Eclipse Android Development Tools (ADT) ca IDE primar pentru dezvoltarea aplicațiilor Android native.
A fost anunțat la 16 mai 2013 la conferința Google I / O. Android Studio oferă mult mai multe unelte și caracteristici care te ajută în procesul de dezvoltare a aplicațiilor Android.
Sistem bazat pe Gradle (Sistem de automatizare Open Source)
Emulator rapid cu caracteristici utile
Mediu de dezvoltare unificat, pentru toate dispozitivele cu Android
Depanare și rulare rapidă fară nevoia de recompilare la fiecare modificare în cod
Unelte și framework-uri utile pentru testare
Suport pentru C++ și NDK
Suport built-in pentru platforma Google Cloud [10]
Mod de instalare:
1. Pentru a instala Android Studio este necesar să descărcăm un kit de instalare de pe site-ul de developers al Android, în momentul în care rulăm kit-ul va trebui să trecem prin următoarele etape.
Figura 7 – Deschiderea kit-ului de instalare
2. Selectam locația de instalare a mediului de dezvoltare Android Studio.
Figura 8 – Selectarea pachetelor ce dorim să fie instalate
3. Suntem intrebați dacă suntem de acord cu termenii și condițiile de utilizare al software-ului.
Figura 9 – Termeni și condiții de utilizare
4. Selectăm locația de instalare pentru Android Studio și Android SDK, în mod normal locațiile default sunt cele mai ok pentru a fii folosite.
Figura 10 – Setarea locației de instalare a Android Studio și Android SDK
5.Alegem dacă dorim sau nu să ne fie creată o intrare în meniul de Start, această fereastră este doar pentru utilizatorii de Windows, în cazul utilizatorilor de Ubuntu nu va fi nevoie de a alege acest lucru, setarea se face mai târziu din cadrul aplicației.
Figura 11 – Alegem unde dorim să se creeze shortcut în meniul de Start (valabil doar pe Windows)
6.Android Studio este instalat și putem să-l deschidem o primă data.
Figura 12 – Finalizarea instalarii
7. În prima rulare suntem intrebati dacă avem setari existente pentru Android Studio din cadrul unei versiuni mai vechi care a fost instalată.
Figura 13 – Prima rulare a Android Studio
8. Am terminat și cu ultima setare, acum putem să începem să ne creăm proiectul și să dezvoltăm aplicația pe care o dorim.
Figura 14 – Fereastra principală de Welcome
3.1 Structura unui proiect
Orice proiect în Android Studio conține unul sau mai multe module cu fișiere de cod sursă și fișiere pentru resurse. Tipurile de module sunt următoarele:
Module pentru aplicația Android
Module pentru librării
Module pentru GoogleAppEngine
Implicit, Android Studio afișează fișierele din cadrul proiectului ca în imagine. Fișierele sunt afișate și organizate după module pentru a facilita un acces rapid către fișierele importante din cadrul proiectului. Toate fișierele care țin de construcția aplicației (build), sunt disponibile în nivelul de sus, în folderul Gradle Scripts și fiecare modul de aplicație conține urmatoarele foldere:
Manfiests – conține fișierul Android Manifest
Java – conține fișierele java cu codul sursă
Res – conține toate fișierele care nu conțin cod, imagini, layout-uri xml..etc.
Structura de proiect Android pe disc diferă de această reprezentare aplatizată. Pentru a vedea structura reală a fișierelor proiectului, selectați Proiect din meniul drop-down Project (în figura 15, este afișat ca Android)
De asemenea, puteți personaliza vizualizarea fișierelor de proiect pentru a vă concentra asupra aspectelor specifice ale dezvoltării aplicației dvs. De exemplu, selectarea vizualizării Probleme a proiectului dvs. afișează linkuri către fișierele sursă care conțin erori recunoscute de codificare și sintaxă, cum ar fi o etichetă de închidere a elementului XML care lipsește într-un fișier de aspect. [10]
3.2 Interfața cu utilizatorul
Figura 17 Interfață Android Studio [10]
Toolbar-ul care conține toate acțiunile, inclusiv cele pentru rularea aplicației și deschiderea uneltelor Android
Bara de navigare, care te ajută să navighezi în cadrul proiectului și să deschizi fișierele pentru editare. Acesta oferă o vedere mai compactă a structurii vizibile în fereastra Project.
Fereastra de editare, este fereastra în care poți crea sau modifica codul sursă, în funcție de tipul fișierului selectat. De exemplu daca este un fișier de layout, atunci este afișat editor-ul de layout-uri.
Bara pentru ferestrele uneltelor, care îți permit să extindeți sau să restrangeți diferite ferestre de unelte.
Ferestrele de unelte îți oferă acces către diferite task-uri, cum ar fi gestionarea proiectelor, căutarea, controlul versiunilor și multe altele. Le puteți extinde și le puteți restrânge.
Bara de stare afișează starea proiectului dvs. și IDE în sine, precum și orice avertismente
sau mesaje.
SQLite
Este un sistem de gestionare a bazelor de date relaționale conținut într-o bibliotecă de programare C. Spre deosebire de multe alte sisteme de gestionare a bazelor de date, SQLite nu este un motor baze de date client-server. Mai degrabă, acesta este încorporat în programul final.
Figura 18 – Logo sistem de gestionare SQLite [11]
SQLite este compatibil cu ACID și implementează cea mai mare parte a standardului SQL, folosind o sintaxă SQL dinamică și slab tastată, care nu garantează integritatea domeniului. SQLite este o alegere populară ca software de bază de date încorporat pentru stocarea locală / client în aplicații software precum browserele web.
Spre deosebire de sistemele de gestionare a bazelor de date client-server, motorul SQLite nu are procese independente cu care comunica programul aplicației. În schimb biblioteca SQLite este conectată și astfel devine parte integrantă a programului de aplicații.
SQLite stochează întreaga bază de date (definiții, tabele, indici și date în sine) ca un singur fișier cross-platform pe o mașină gazdă. Acesta implementează acest design simplu prin blocarea întregului fișier de bază de date în timpul scrisului. Operațiile de citire SQLite pot fi multitasking, deși scrierile pot fi efectuate numai secvențial.
Codul pentru SQLite este în domeniul public și este astfel gratuit pentru utilizare în orice scop, comercial sau privat. SQLite este cea mai răspândită bază de date din lume cu mai multe aplicații decât putem număra, inclusiv câteva proiecte de profil înalt. [12]
Fingerprint
Algoritmul de amprentare este o procedură care cartografiază un element de date mari de arbitrare (cum ar fi un fișier de computer) într-un șir de biți mult mai scurt, amprenta sa, care identifică în mod unic datele originale în toate scopurile practice; amprentele digitale identifică în mod unic oamenii în scopuri practice. Această amprentă poate fi utilizată pentru deduplicarea datelor. Acest lucru este denumit și amprentarea fișierelor, amprentarea datelor sau amprentarea datelor structurate.
Scanerele de amprente digitale pot fi:
Optical fingerprint scanners – sunt cea mai veche metodă de captare și comparare a
amprentelor digitale. După cum sugerează și numele, această tehnică se bazează pe captarea unei imagini optice, în esență o fotografie, și folosirea algoritmilor pentru a detecta modele unice de pe suprafață, cum ar fi creastături sau mărci unice, analizând zonele cele mai ușoare și cele mai întunecate ale imaginii;
Capacitive scanners – folosesc circuite mici condensatoare pentru a colecta date despre o
amprentă digitală. Deoarece condensatoarele pot stoca încărcătura electrică, conectarea acestora la plăcile conductoare de pe suprafața scanerului le permite să fie folosite pentru a urmări detaliile unei amprente digitale;
Ultrasonic scanners – cea mai recentă tehnologie de scanare a amprentelor pentru a intra
în spațiul smartphone-ului. Pentru a captura efectiv detaliile unei amprente digitale, hardware-ul este format atât din transmițător ultrasonic cât și din receptor. Un impuls ultrasonic este transmis împotriva degetului care este amplasat pe scaner. [13]
MPAndroidChart
Graficele, adesea numite și diagrame, sunt reprezentări grafice ale datelor, în care datele sunt reprezentate prin simboluri, cum ar fi linii într-un grafic liniar sau o bucată dintr-un grafic cu structură radială. Graficele sunt utilizate în general pentru o mai bună înțelegere a cantităților mari de date și a relațiilor dintre acestea. Diagramele sunt de obicei mai ușor de citit decât fluxurile de date din care provin.
În acest proiect am ales să utilizez biblioteca, de uz gratuit, MPAndroidChart. Diagramele din această bibliotecă sunt foarte interactive, ușor de creat și de utilizat.
Pentru a integra această bibliotecă în proiectul nostru trebuie, mai întâi, să o importăm în pachetul Android. Există patru posibilități pentru a face acest lucru:
Gradle dependency
Maven
Jar file only
Clone whole repo
Am ales să utilizez prima opțiune, Grandle dependecy, fiind cea mai recomandată. Pentru aceasta:
Trebuie să adăugăm următoarea comandă în build.gradle secțiunea project:
allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
Următoarea comandă în build.gradle secțiunea app:
dependencies {
compile 'com.github.PhilJay:MPAndroidChart:v3.0.3’
}
REZOLVAREA TEMEI DE PROIECT
1. Structura și proiectarea aplicației
1.1 Prezentarea generală
Realizarea unei baze de date SQLite embeded în care se salvează atât informațiile referitoare la autentificare cât și la gestionarea cheltuielilor. Cu ajutorul aplicației Android create se pot vizualiza, șterge, edita veniturile și cheltuielile adăugate de utilizatori. De asementea pentru o mai bună vizualizare a balanței finaciare se transpun intrările din baza de date în grafice.
1.2 Arhitectura aplicației
În momentul instalării aplicației se va crea baza de date și tabelele corespunzătoare acesteia, astfel încât să permită utilizatorului să își creeze un cont nou. Odată autentificat utilizatorul va dispune de o serie de categorii standard pe care le poate modifica sau poate adauga altele noi.
Dacă dispozitivul este prezăzut cu cititor de amprentă, aplicația va utiliza baza de date de amprente a telefonului, iar dacă amprenta utilizată este găsită în această bază de date accesul la aplicație va fi permis, în caz contrar o să fie afișat un mesaj de eroare.
Fiecare operație făcută de către utilizator va fi adăugată în baza de date integrată în aplicație, acesta fiind un avantaj deoarece nu necesită nicio conexiune la internet fiind mereu disponibilă.
1.3 Structura fișierelor în aplicație
Pentru a putea avea o structură clară și a putea lucra mai ușor, am împărțit aplicația în mai multe package-uri, un package pe care l-am numit “Activities” în care am adăugat toate fișierele de tip Activity și un package numit “Fragments” în care am adăugat toate fișierele de tip Fragment.
Un fișier de tip Activity este practic o pagină nouă în cadrul aplicației de Android care are propriul Layout și este un fișier de nivel superior față de fișierul de tip Fragment, care are un Layout dar poate fi instanțiat și afișat în cadrul unui fișier de tip Activity.
1.4 Structura bazei de date folosite în aplicație
Add_Expense/Add_Income Tables
Income_Category/Expense_Category Tables
Users Table
2. Use casses – fully dressed
2.1 Use case 1 – Register
Tabel 3 – Register
2.2 Use case 2 – Login utilizând username și parolă
Tabel 4 – Login utilizând username și parolă
2.3 Use case 3 – Login utilizând cititorul de amprentă
Tabel 5 – Login utilizând cititorul de amprentă
2.4 Use case 4 – Adăugare Venit/Cheltuieli
Tabel 6 – Adăugare Venit/Cheltuieli
Implementarea aplicației
3.1 Prezentare generală
În această parte o sa prezint paginile aplicației, cu secțiunile de cod de mare importanță care au dus la realizarea acestei aplicații.
3.2 Pagina de înregistrare (Sign up)
Pagina de Sign Up este prima pagină după instalarea aplicației. Această pagină este de tip Activity și are ca atribut un Layout de tip XML, în care am definit trei căsuțe text, unde utilizatorul va introduce datele necesare pentru creare unui nou cont și un buton numit Register care execută task-ul care trimite datele către baza de date.
Element de tip EditText pentru Nume
Element de tip EditText pentru Username, verifică dacă username-ul este valid.
Element de tip EditText pentru parolă, standard nu afișează caracterele introduse și verifică dacă parola are structura cerută. Oferă posibilitatea de a afișa parola în text clar pentru a ne asigura că am introdus-o în mod corect.
Element de tip Button care execută toate verificările asupra textului introdus în câmpurile text și face înregistrarea utilizatorului nou în baza de date.
Figura 19 – Pagina de înregistrare în aplicație
Declarații și variabile folosite:
Orice fișier de tip activity conține o metodă OnCreate care este apelată atunci când acea activitate este creată și folosită pentru a inițializa diferite elemente din cadrul activității. În acest caz o voi folosi pentru a inițializa cele trei elemente EditText și în cazul în care se realizează validarea datelor întroduse de utilizator acestea vor fi introduse în baza de date.
Metodele folosite în activitatea de înregistrare sunt următoarele:
ValidateUsername
Această metodă returnează valoarea VALID dacă username-ul introdus de utilizator respectă cerințele necesare, câmpul destinat username-ului să nu rămână gol și să conțină minim 5 caractere.
Password Complexit
Această metodă verifică câmpul destinat parolei astfel încât utilizatorul să folosească o parolă care să respecte următoarea structură, cel puțin o literă mare și o literă mică, o cifră, un caracter special și să aibă o lungime de minim opt caractere, exemplu de parolă corectă: T3st_123.
Md5
Funcția MD5 (Message Digest Algorithm 5) este utilizată pentru parola introdusă de utilizator astfel încât aceasta să fie introdusă în baza de date, criptată, sub forma unui hash cu lungimea de 128 de biți.
În cazul în care cel puțin una din condițiile cerute mai sus nu sunt respectate, metoda corespunzătoare va returna valoarea FALSE, iar utilizatorul va fi avertizat cu privire la acest aspect prin intermediul unor mesaje în dreptul câmpului cu probleme.
La apăsarea butonului Register, se verifică valoarea returnată de metodele ValidateUsername și ValidatePassword și în cazul în care datele introduse de către utilizator sunt valide acestea vor fi introduse în baza de date utilizând functia AddUser cu parametrii corespunzători.
Figura 20 – Eroare Sign u
După ce înregistrarea se realizează cu succes, utilizatorul va fi redirecționat către pagina de Login.
3.3 Pagina de logare (Login)
Pagina de Login este pagină care se va deschide în momentul în care utilizatorul deschide aplicația, dacă acesta nu are activată autentificarea prin amprentă. Această pagină este de asemenea de tip Activity și are de asemenea atribuit un Layout de tip XML, în care am definit două căsuțe text, unde utilizatorul va introduce username-ul cu care s-a înregistrat în aplicație și parola corespunzătoare contului creat alături de un buton „Login”.
Element de tip EditText pentru username, cu verificare pentru username-ul introdus corect.
Element de tip EditText pentru parolă, nu afișează caracterele introduse, ci verifică dacă parola are structura cerută.
Element de tip Button care verifică în baza de date și face redirecționare către pagina de Home (MainActivity) .
Figura 21 – Pagina de logare
Declarații și variabile folosite:
Metodele folosite în activitatea de login sunt următoarele:
ValidateLogin
Metoda care verifică dacă username-ul este valid, prezentată anterior în cadrul paginii de înregistrare dar și dacă se află în tabela Users și utilizatorul l-a introdus corect alături de parola corespunzătoare.
Dacă metoda ValidateLogin returnează valoarea FALSE, atunci utilizatorul va fi avertizat prin afișarea unui mesaj pe câmpul care nu îndeplinește condițiile verificate.
Dacă metoda ValidateLogin returnează valoarea TRUE, atunci utilizatorul va fi redirecționat către pagina Home.
Figura 22 – Eroare logare
3.4 Autentificare cu amprentă
Pentru a putea utiliza senzorul de amprentă în aplicația noastră, trebuie să includem o solicitare, în Manifest-ul proiectului.
Figura 23 – Autentificare cu amprentă
Declarații și variabile folosite:
În secțiunea onCreate a activității de logare, prin intermediul senzorului de amprentă, am utilizat o serie de verificări pentru a asigura o bună funcționalitate și pentru a evita erori nedorite.
Trebuie să ne asigurăm că dispozitivul utilizează versiunea mai nouă de Android, Marshmallow inclusiv, înainte de a rula orice cod cu privire la fingerprint.
Se verifică dacă dispozitivul dispune de un senzor de amprentă, în caz contrar se va afișa un mesaj de informare.
Se verifică dacă utilizatorul a acordat drepturi să se acceseze senzorul de amprentă, în caz contrar se va afișa un mesaj de informare.
Se verifică dacă utilizatorul are salvată cel puțin o amprentă, în caz contrar se va afișa un mesaj de informare.
Metodele folosite în activitatea de înregistrare sunt următoarele:
GenerateKey
Această metodă este folosită pentru a obține accesul la depozitul de chei al Androidului și pentru a genera cheia criptată a aplicației.
Metoda InitCipher
Această metodă este folosită pentru a inițializa cifrul. Odată ce cifrul a fost inițiat este configurat special pentru autentificarea prin amprentă.
Metoda StartAuth
Această metodă este utilizată pentru a porni procesul de autentificare prin amprentă.
Metoda OnAuthenticationError
Această metodă este utilizată atunci când apare o eroare fatală furnizând un mesaj de eroare cu codul erorii respective.
Metoda OnAuthenticationFailed
Această metodă este utilizată atunci când amprenta scanată nu se regăsește în depozitul de amprente.
Metoda OnAuthenticationSucceeded
Această metodă este utilizată atunci când amprenta a fost recunoscută cu succes și redirecționează utilizatorul către pagina HOME.
3.5 Pagina de pornire (LanchActivity)
Este pagina utilizată pentru a determina pagina de autentificare care va fi folosită în momentul deschiderii aplicației și implicit redirecționarea către aceasta. Dacă nu se regăsesc informații în SharedPreferences, referitoare la activarea autentificării prin amprentă, utilizatorul va fi redirecționat către pagina de autentificare prin username și parolă.
3.6 Pagina principală cu meniuri
Aceasta este pagina principală a aplicației și conține cele două meniuri care ajută utilizatorul să poată naviga în cadrul aplicației și pemite acestuia să utilizeze setările aplicației. Această pagină este de tip Activity, la care sunt atribuite mai multe Layout-uri de tip XML care reprezintă meniurile și detaliile despre utilizator și floatingbutton-ul care este desenat peste fragmente.
Figura 24 – Pagina principală cu meniuri
Fragmentul este o porțiune din cadrul unei pagini de tip Activity care se comportă în
principal ca o activitate și oferă posibilitatea să îi asocieze un layout diferit deși se instanțiază și afișează în cadrul unei activități care are deja un layout asociat. Este des folosită pentru a schimba doar o porțiune din activitate păstrând restul elementelor de design și de layout din activitate neschimbate. În acest mod am folosit și eu fragmentul Overview în cadrul MainActivity, pentru a afișa totalul veniturilor și al cheltuielilor.
În partea de sus dreapta este definit un meniu simplu în cadrul căruia există două butoane,
unul este butonul Settings și este folosit pentru a accesa pagina de setări a aplicației, iar cel de-al doilea este butonul Exit pentru a inchide aplicația.
Meniul principal din aplicație conține în partea de sus logo-ul aplicației, numele
utilizatorului și username-ul cu care acesta s-a înregistrat, detalii importate din baza de date, iar în partea de jos sunt toate fragmentele disponibile utilizatorului, pe care le schimb și le afișez în zona însemnată cu numărul unu în funcție de fragmentul selectat de acesta.
FloatingButton este un buton care „plutește” peste fragment deorece este desenat peste
orice element și în cadrul aplicației este folosit pentru a selecta fragmentul de adăugare al unui nou venit sau a unei noi cheltuieli.
3.7 Pagina Overview
Pagina Overview este o pagină de tip fragment și este afișată în cadrul paginii Home care conține layout-ul cu meniuri etc. Acest lucru ajută la dezvoltarea aplicației în una mai performantă, fară a fi necesar să construiesc meniurile pe fiecare pagină de tip Activity în care doresc ca acestea să fie disponibile pentru utilizator. Există, de asemenea, posibilitatea să dezactivez orice element din cadrul activității pentru un fragment anume, lucru pe care îl voi prezenta mai departe pentru alte fragmente.
Layout-ul fragment-ului conține două elemente de tip TextView, primul în care este afișat titlul fragmentului și al doilea pentru afișarea totalului și un element de tip ListView pentru a afișa lista tuturor veniturilor și cheltuielilor.
Figura 25 – Pagina Overview
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
OnCreateView
Pentru a putea accesa orice element din cadrul layout-ului corespunzător fragmentului și să-l afișez în cadrul layout-ului activității, folosesc un LayoutInflater la layout-ul fragmentului în cadrul layout-ului actual.
Metoda onCreateView este o metodă default în cadrul unui fragment și în acest caz o folosesc pentru a seta layout-ul fragmentului, pentru a apela task-ul care face request-ul către baza de date pentru popularea listei, pentru a seta adapter-ul custom pentru item-urile listei.
Pentru a obține lista tuturor elementele folosesc funcția getOverviewList(), în care o sa interoghez baza de date și o sa introduc fiecare intrare într-o listă.
Pentru a obține totalul balanței o să folosesc funcția getTotal()
Pentru a afișa detaliile fiecărei valori în cadrul listei voi folosi un Overview_List_Adapter care permite definirea unui layout pentru afișarea item-urilor din cadrul listei, item în care am afișat următoarele detalii:
Suma primită sau cheltuită.
Categoria venitului sau a cheltuieli.
Data la care s-a realizat tranzacția.
În partea de jos a fragmentului este vizibil butonul de tip FloatingButton de care am vorbit mai sus, care este vizibil în acest fragment și oferă posibilitatea, folosind un layout, să selectez unul dintre cele 2 opțiuni care apar când se apasă pe acesta, anume să adaug un nou venit sau o nouă cheltuială, dacă este cazul.
3.8 Pagina pentru Setări (Settings)
Pagina de Setări este pagina pe care utilizatorul o va folosi atunci când dorește să activeze sau să dezactiveze autentificarea prin amprentă, dar și atunci când acesta dorește să adauge o categorie nouă sau să șteargă anumite tranzacții. Această pagină este de tip Activity și are atribuit un Layout de tip XML, în care am definit două TextView-uri pentru definirea categoriilor, cinci butoane și un checkBox.
Figura 26 – Pagina pentru Setări
Element de tip Buton pentru a închide pagina setări redirecționând utilizatorul căte pagina inițială.
Element de tip Buton care redirecționează utilizatorul către pagina Edit Category de unde poate adăuga o nouă categorie pentru cheltuieli sau poate să le editeze sau să le șteargă pe cele existente.
Element de tip Buton care redirecționează utilizatorul către pagina Edit Expense de unde poate șterge sau transfera tranzacția într-o altă categorie
Element de tip Buton care redirecționează utilizatorul către pagina Edit Income de unde poate șterge sau transfera tranzacția într-o altă categorie
Element de tip CheckBox care definește cum se realizează autentificarea prin amprentă
Element de tip Buton care salvează starea elementului Checkbox
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
SavePreferences
Această metodă este folosită pentru a salva, utilizând SharedPreferences, starea checkBox-ului chiar și atunci cand închidem aplicația.
LoadSavedPreferences
Această metodă este folosită pentru a încărca setările salvate anterior în momentul în care utilizatorul redeschide aplicația.
3.9 Pagina pentru editarea categoriilor (Edit category)
Pagina de editare a categoriei este pagina pe care utilizatorul o va folosi atunci când dorește să adauge, să modifice sau să șteargă o categorie referitoare la cheltuieli. Această pagină este de tip Activity și are atribuit un Layout de tip XML, în care am definit următoarele tipuri de element:
Figura 27 – Pagina pentru editarea categoriilor
Element de tip Spinner pentru a alege tipul tranzacției din care urmează sa facă parte (Income / Expense).
Element de tip Buton pentru a închide pagina setări redirecționând utilizatorul căte
pagina inițială.
Element de tip Buton pentru a introduce noua categorie în baza de date.
Element de tip EditText pentru a introduce numele noii categoriei.
Element de tip ListView pentru a afișa lista categoriilor existente deja.
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
LoadListView
Metoda este apelată atunci când pagina de editare a categoriei este deschisă, astfel încât categoriile existente să fie afișate dar și în momentul în care o nouă categorie este adăugată sau ștearsă pentru ca lista să fie actualizată în timp real.
ShowEditBox
Metoda este apelată atunci când utilizatorul selectează una dintre categoriile afișate în listă. Aceasta are atribuit un nou Layout de tip XML care conține urmatoarele:
Element de tip Buton pentru a șterge pagina setări redirecționând utilizatorul către pagina inițială.
Element de tip Buton pentru a introduce noua categorie în baza de date.
Element de tip EditText pentru a putea modifica numele categoriei.
Figura 28 – Pagina EditBox
DeleteCategory
Metoda este apelată atunci când utilizatorul selectează butonul Delete și va șterge intrarea din baza de date.
UpdateCategory
Metoda este apelată atunci când utilizatorul selectează butonul Update, va citi valoare introdusă în TextEdit și va actualiza valoarea în baza de date.
3.10 Pagina pentru editarea tranzacțiilor (Edit Income/Expense)
Pagina de editare a tranzacțiilor este pagina pe care utilizatorul o va folosi atunci când dorește să editeze sau să șteargă o tranzacție. Această pagină este de tip Activity și are atribuit un Layout de tip XML, în care am definit următoarele tipuri de element:
Element de tip Buton pentru a închide pagina setări redirecționând utilizatorul căte pagina inițială.
Element de tip ListView pentru a afișa lista tranzacților existente.
Figura 29 – Pagina pentru editarea tranzacțiilor
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
LoadListView
Metoda este apelată atunci când pagina de editare a tranzacției este deschisă, astfel încât tranzacțiile existente să fie afișate, dar și în momentul în care tranzacția este ștearsă pentru ca lista să fie actualizată în timp real.
ShowTransferBox
Metoda este apelată atunci când utilizatorul selectează una dintre tranzacțiile afișate în listă. Aceasta are atribuit un nou Layout de tip XML care conține urmatoarele:
Element de tip EditText pentru a afișa și pentru a permite editarea valorii tranzacționate.
Element de tip EditText pentru a afișa și pentru a permite editarea datei la care s-a realizat tranzacția.
Element de tip EditText pentru a afișa si pentru a permite editarea notiței.
Element de tip Buton pentru a introduce tranzacția după ce aceasta a fost modificată în baza de date.
Element de tip Buton pentru ștergerea tranzacției.
Figura 30 – ShowTransferBox
UpdateExpense
Metoda este apelată atunci când utilizatorul selectează butonul SAVE, actualizând astfel tranzacția în baza de date.
DeleteAddExpense
Metoda este apelată atunci când utilizatorul selectează butonul DELETE, în urma căruia se deschide o alta fereastră oferindu-i posibilitatea de a transfera tranzacția într-o altă categorie sau a șterge intrarea din baza de date.
Figura 31 – Fereastra DeleteAddExpense
3.11 Pagina pentru adăugare tranzacției (Add Income/Expense)
Pagina de adăugare a tranzacțiilor este pagina pe care utilizatorul o va folosi atunci când dorește să adauge o tranzacție. Ea este disponibilă și poate fi accesată din butonul de tip FloatingButton prezent în pagina principală. Această pagină este de tip Fragment și are atribuit un Layout de tip XML, în care am definit următoarele tipuri de element:
Element de tip Buton pentru a închide pagina setări redirecționând utilizatorul căte pagina inițială.
Element de tip Buton pentru a introduce noua tranzacție în baza de date.
Element de tip EditText pentru a introduce valoarea tranzacției.
Element de tip Spinner pentru a afișa elementele din elementul ListView.
Element de tip Buton pentru a deschide calendarul.
Element de tip EditText pentru a introduce o notiță.
Figura 32 – Pagina pentru adăugarea tranzacției
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
GetAllCategory
Metoda este apelată în momentul în care fragmentul este deschis pentru a afișa toate categoriile din baza de date, fiind introduse în elementul de tip Spinner.
InsertAdd_Expense
Metoda este apelată în momentul în care utilizatorul apasă butonul SAVE, se citesc valorile adăugate de utilizator și se vor introduce în baza de date.
OnCreateDialog
Metoda este apelată în momentul în care utilizatorul apasă pe butonul SET DATE pentru a seta data realizării tranzactiei.
ShowDate
Metoda este apelată în momentul în care utilizatorul selectează o anumită dată.
3.12 Pagina de realizare a diagramei radiale
Pagina în care se realizează diagrama radială este pagina pe care utilizatorul o va folosi atunci când dorește o analiză mai detaliată asupra tranzacțiilor sale. Ea este disponibilă și poate fi accesată din cadrul meniului. Această pagină este de tip Fragment și are atribuit un Layout de tip XML, în care am definit următoarele tipuri de elemente:
Element de tip PieChart, disponibil prin intermediul bibliotecii MPAndroidChart cu ajutorul căruia se pot desena diagrame radiale.
Element de tip ListView pentru a afișa informații referitoare la elementele de pe diagramă.
Figura 33 – Pagina de realizare a diagramei radiale
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
QueryXData
Metoda este folosită pentru a prelua categoriile din baza de date parcurgându-le pas cu pas. Această metodă va fi apelată în momentul în care diagrama va fi desenată.
QueryYData
Metoda este folosită pentru a prelua sumele tranzacționate din baza de date parcurgându-le pas cu pas. Această metodă va fi apelată in momentul în care diagrama va fi desenată. Feliile vor fi reprezentate în funcție de aceste valori.
AddData
Metoda este folosită pentru a realiza diagrama radială cu ajutorul datelor preluate cu ajutorul metodelor anterioare.
getPieGrapgListView
Metoda este folosită pentru a prelua informații referitoare la tranzacții din baza de date care sunt introduse în elementul de tip ListView.
LoadListView
Metoda este apelată atunci când pagina de desenare a diagramei radiale este deschisă, astfel încât tranzacțiile existente să fie afișate.
Pentru a afișa procentul fiecărei tranzacții în cadrul listei voi folosi un Graph_All_Adapter care permite definirea unui layout pentru afișarea item-urilor din cadrul listei.
3.13 Pagina de realizare a diagramei de tip bară
Pagina în care se realizează diagrama de tip bară este pagina pe care utilizatorul o va folosi atunci când dorește o analiză mai detaliată asupra tranzacțiilor sale comparând veniturile și cheltuielile realizate într-o anumită lună. Ea este disponibilă și poate fi accesată din cadrul meniu. Această pagină este de tip Fragment și are atribuit un Layout de tip XML, în care am definit următoarele tipuri de element:
Element de tip Spinner care oferă posibilitatea utilizatorului sa selecteze luna pe care dorește să o vizualizeze.
Element de tip BarChart, disponibil prin intermediul bibliotecii MPAndroidChart cu ajutorul căreia se pot desena diagrame radiale.
Figura 34 – Pagina de realizare a diagramei de tip bară
Declarații și variabile folosite:
Metodele folosite în fragment sunt următoarele:
QueryXData
Metoda este folosită pentru a prelua cheltuielile, dintr-o anumită lună, din baza de date parcurgându-le pas cu pas. Această metodă va fi apelată în momentul în care diagrama va fi desenată.
QueryYData
Metoda este folosită pentru a prelua veniturile, dintr-o anumită lună, din baza de date parcurgându-le pas cu pas. Această metodă va fi apelată în momentul în care diagrama va fi desenată.
CreateBarChart
Metoda este folosită pentru a realiza diagrama de tip bară cu ajutorul datelor preluate cu ajutorul metodelor anterioare.
CONCLUZII
În vederea dezvoltării unei platforme care să ajute și să faciliteze gestionarea veniturilor si cheltuielilor pe care le înregistrează un utilizator, a fost nevoie de un sistem capabil să ofere acest lucru prin intermediul unei aplicații mobile (fiind mult mai ușor de folosit și oferind mai multe informații decât alte metode prin care se ține evidența veniturilor vs. cheltuielilor).
Pornind de la această idee am dezvoltat o aplicație software complexă, capabilă să controleze accesul utilizatorilor în aplicație, să le ofere posibilitatea de a vizualiza (atat sumele introduse cât și sub forma graficelor afișate la sfarșitul fiecărei luni) și a gestiona veniturile si cheltuielile pentru fiecare luna.
Am dus proiectul în zona aplicațiilor mobile intuitive, capabile să ofere o experiență plăcută în utilizare, permițând utilizatorilor să o folosească ușor și fără să aibă experiență anterioară în utilizarea unei aplicații mobile. Pentru o experiență ușoară de utilizare am ales să afișez informațiile cu privire la orice acțiune a utilizatorului întreprinsă în cadrul aplicației, prin intermediul mesajelor de tip toast la baza ecranului.
Avantaje pentru a folosi o aplicație de gestiune a finanțelor personale:
Economisesti mai mult – deși este destul de intuitiv faptul că persoanele care țin
evidența banilor și își planifică bugetul economisesc mai mult, acest fapt este susținut și de o serie de studii științifice care validează ipoteza.
Ai acces la informațiile tale financiare oriunde te-ai afla – cu o aplicație offline de
administrare a finanțelor poți sa adaugi cheltuieli sau alte operațiuni în timp ce le realizezi, indifferent unde te-ai afla.
Economisești timp – folosind o aplicație ai avantajul de a avea toate informațiile
într-un singur loc și accesibile de oriunde.Pe lângă faptul că nu mai pierzi timpul scriind de mână sau căutând unde ai notat ultima oară cheltuielile, cu un singur click, poți să vezi situația cheltuielilor sau a veniturilor pe categorii sau per total.
Pentru extinderea aplicației am identificat și alte moduri prin care aș putea face aplicația mai sigură și mai intuitivă decât este acum:
Realizarea login-ului prin intermediul api-ului Facebook sau Google+, pe care îl au
majoritatea aplicațiilor în prezent, desigur fără eliminarea login-ului cu username și parola sau celui realizat prin amprentă, deoarece este preferat de mulți utilizatori fără conturi în rețelele de socializare;
Planificarea bugetului pe categorii (fie predefinite, fie create sau personalizate) pentru
luna urmatoare, astfel se urmărește evoluția mult mai simplu;
Evitarea penalizărilor în ceea ce privește plata facturilor recurente, astfel dacă se setează
o factură recurentă te anunță când aceasta este scadentă.
BIBLIOGRAFIE ȘI REFERINȚE
[1] https://www.androidauthority.com/history-android-os-name-789433/
[2] https://image.freepik.com/free-vector/android-boot-logo_634639.jpg
[3] https://ro.wikipedia.org/wiki/Android_(sistem_de_operare)
[4] https://en.wikipedia.org/wiki/Display_server
[5] https://goo.gl/HS4nzW
[6] https://ro.wikipedia.org/wiki/Lista_versiunilor_Android
[7] https://www.android.com/
[8] https://en.wikipedia.org/wiki/Java_(programming_language)
[9] https://developer.android.com/studio/features.html
[10] https://developer.android.com/studio/intro/index.html
[11] https://en.wikipedia.org/wiki/SQLite
[12] https://www.sqlite.org/about.html
[13] https://www.androidauthority.com/how-fingerprint-scanners-work-670934/
[14] https://www.elprocus.com/what-is-android-introduction-features-applications/
[15] https://www.engineersgarage.com/articles/what-is-android-introduction
[16] https://stackoverflow.com/
[17] https://github.com
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: DEZVOLTAREA UNEI APLICAȚII ANDROID PENTRU GESTIONAREA CHELTUIELILOR [307001] (ID: 307001)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
