Profesor coordonator Autor As. dr. i ng. Crișan -Vida Mihaela GROZA Andrada TIMIȘOARA 2017 Aplicație Android: JamSes 2 CUPRINS Capitolul 1… [622446]
UNIVERSITATEA „POLITEHNICA” din TIMI ȘOARA
FACULTATEA DE AUTOMATICĂ Ș I CALCULATOARE
SPECIALIZAREA INFORMATICĂ
Aplicaț ie Android :
JamSes
Profesor coordonator Autor
As. dr. i ng. Crișan -Vida Mihaela GROZA Andrada
TIMIȘOARA
2017
Aplicație Android: JamSes
2
CUPRINS
Capitolul 1 Introducere ………………………………………… ………………………… ………………………..3
1.1. Contextul apli cației………………………………………………………….. ………………………. .3
1.2. Prezentarea temei ……………………………………. ……………………….. ……………………. .3
Capitolul 2 Analiza stadiului în domeniul actual ………………………………….. ………………………4
Capitolul 3 Fundamentare teoretică …………………………………………………… ……………………….8
3.1. Java……………………………………………………………………………….. ………… ……………..8
3.2. Android Studio……………………………………………… ……………………….. …………… ….9
Capitolul 4 Specificațiile aplicației …………………………………………………….. ……………………….12
4.1. Descrierea aplicației …………………………………………………………. ……………………….12
4.2. Funcțiile aplicației ……………………………………………………………. ……………………….12
4.3. Interfața cu utilizatorul ………………………………………………………………………………. 15
4.4. Baza de date ……………………………………………………………………. ……………………….17
Capit olul 5 Proiectarea aplicației ……………………………………………………… ……………………….19
5.1. Componentele aplicației ……………………………………………………. ……………………….19
5.2. Stocarea informaț iei…………………………………………………………. ……………………….22
Capitolul 6 Implementarea aplicației ……………………………………………….. ……………………….26
Capitolul 7 Manual de utilizare ……………………………………………………….. ……………………….34
Capitolul 8 Concluzii și dezvoltări viitoare ………………………………………. ……………………….37
Capitolul 9 Bibliografie ………………………………………………………………… ……………………….38
Aplicație Android: JamSes
3
Capitolul 1 Introducere
1.1. Contextul aplicatiei
În ziua de astăzi aproape totul depinde de tehnologie, asta înseamnă că schimbăm unele
activități banale de tipul scrisului pe hârtie cu o variantă a sa mai simplă de transportat, de
utilizat, că să nu mai menționăm de ajutorul adus Planetei prin faptul că nu mai tăiem copaci.
Ideea acestei aplicații a venit din experiența personală, când studentă fiind la Școala
Populară de Arte din Timișoara, secția Chitară Clasică, trebuia să mă deplasez cu instrumentul și
foile pe care se găseau partiturile pieselor ce urmau a fi studiate. Pe lângă asta, în timpul liber nu
studiam doar muzică clasică, ci și alte genuri care necesitau și versuri pe lângă notele muzicale.
Din dorința mea de a nu mai folosi hârtie, deoarece la un moment dat foile se pierdeau, am
hotărât să îmi structurez portofoliul muzical prin intermediul unei aplicații pe telefon.
1.2. Prezentarea temei
Tema lucrării este o aplicație pentru smartphone -urile care folosesc sistemul de operare
Android, numită JamSes, iar ideea realizării acestei aplicații a venit din pasiunea mea pentru
instrumente muzicale și muzică în general.
Prin experiența personală am descoperit lipsa unor aplicații de acest gen în catalogul
magazinului „GooglePlay”, unde se găsesc aplicații ce pot fi accesate la un nivel mai înalt al
informației doar pri n achiziții în cadrul acestora . Astfel că am dorit să pun la dispoziția
utilizatorului o variantă mai prietenoasă și deschisă la sugestii a unei astfel de aplicații, fără a fi
nevoit să plătească pentru ea.
Nu am dorit ca JamSes să conțină foarte multă teorie muzicală, teorie ce ar trebui cunoscută
de orice simpatizant al acestui hobby, ci concret idei de melodii de la care să pornească un
începător în lungul drum pe care îl presupune cunoașterea și folosirea corectă a unui instrumen t
cu coarde, cum este chitara .
Aplicație Android: JamSes
4
Capitolul 2 Analiza stadiului în domeniul actual
Aplicaț ia 1: iJam1
Creator: James Richardson
Descărcă ri (16.06.2017): 50.000
Mărime: 82.78MB
Stele GooglePlay: 4.3 (362 persoane)
Fig. 1 – Aplicația iJam Fig. 2 – Aplicatia iJam Fig. 3 – Aplicatia iJam
Aplicația oferă 5 stagii de pregătire, iar utilizatorul își poate seta nivelul de dificultate a
lecțiilor. Pentru un novice aplicația este utilă în procesul de învățare pentru că informa ția este
prezentată gradual, începe de la nivelul cel mai jos și se termină cu un catalog de câteva melodii
mai cunoscute. Nu se găsește o modalitate de a lua legătura cu autorul, pentru eventuale întrebări
sau nelămuriri. Este disponibilă doar în limba en gleză.
Design: Fundal închis la culoare, ce se dorește scos în evidență este colorat puternic, cum ar
fi delimitarea d intre capitole, dar sunt folosit e și imagini pentru a ilustra nivelul de dificultate sau
despre ce este vorba exact în secțiune.
1 https://play.google.com/store/apps/details?id=jamesrichardson.com.ijam
Aplicație Android: JamSes
5
Aplicaț ia 2: Guitar Songs2
Creator: Suslov Alexander
Descărcări (16.06.2017): 1.000.000
Mărime : 78.36MB
Stele GooglePlay: 4.3 (35.096 persoane)
Fig. 4 – Aplicația GuitarSongs Fig. 5 – Aplicația GuitarSongs
Guitar Songs se poate adapta la limba sistemului, atât prin titlul aplicației în meniul
telefonului, cât și în interiorul aplicației, cu toate că unele cuvinte sau grupări de cuvinte nu sunt
traduse, de exemplu „Add to setlist”, „Metronome” sau „Properties”, dar aceasta nu constituie un
detaliu deranjant .
Ca și interacțiunea apl icației cu utilizatorul, aceasta este minimă, în sensul că există o listă de
piese, utilizatorul își selectează elementul dorit și viteza cu care să fie desfășurată pagina.
Design: Aplicația are un design simplu, un fundal ce reprezintă fibra lemnului. În fereastra
melodiei fundalul este ca o foaie dintr -un caiet cu pătrățele. Scrisul este destul de mic și greu de
citit, ceea ce pune în dificultate utilizatorul, deoarece och ii obosesc repede și este greu să te
concentrezi și asupra instrumentului și la informația prezentată pe ecran.
2 https://play.google.com/store/apps/details?id=ru.subprogram.guitarsongs.vint
Aplicație Android: JamSes
6
Aplicaț ia 3: Perfect Ear – Ear Trainer3
Creator: EDuckAppsSV
Descărcări (16.06.2017): 1.000.000
Mărime : 15.95MB
Stele GooglePlay: 4.7 (38.555 persoane)
Aceasta este b ine structurată, oferă multă teorie muzicală. Aplicația oferă experiența de la
clasă, în sensul că testează ce te -a invătat și îți afișează procentul parcurs din capitolul respectiv.
Nu oferă un catalog cu melodii din care utiliz atorul să își selecteze piesele.
Este un bun exercițiu pentru a învăța teorie muzicală atât pentru chitară, cât și pentru pian.
Aplicația pune la dispoziție ajutor audio și jocuri pentru o desfășurarea a lecțiilor cât mai firească
și ușoară, toate în rit mul utilizatorului , care poate reveni la un joc sau la o întrebare dacă nu este
sigur de răspuns sau consideră că poat e efectua exercițiul mai bine.
Design: Culori vibrante, predominant reci. Fiecare capitol are culoarea sa. Listele și
secțiunile cu mult text sunt pe fundal alb pentru a face citirea mai ușoară. Imaginile sunt folosite
pentru a ilustra despre ce este vorba în capitol/s ecțiune.
Fig. 6 – Aplicația Perfect Ear Fig. 7 – Aplicația Perfect Ear Fig. 8 – Aplicația Perfect Ear
3 https://play.google.com/store/apps/details?id=com.evilduck.musiciankit
Aplicație Android: JamSes
7
Caracteristici iJam GuitarSongs Perfect Ear JamSes
Listă de melodii x x x
Acordor x
Ușor de citit x x x
Alte instrumente
decât chitara x
Autoscroll x
Link -uri externe x x
Teorie muzicală x x
Achiziții în
aplicaț ie x x x
Fig. 9 – Diferența di ntre aplicațiile existente în magazinul GooglePlay și JamSes
Aplicație Android: JamSes
8
Capitolul 3 Fundamentare teoretică
3.1. Java
Java este un limbaj de programare orientat pe obiect, puternic folosit de către majoritatea
aplicațiilor de pe dispozitive le de tipul telefoanelor mobile, tablete și computere.
Lansată de Sun Microsystems, acum filială Oracle, a avut un impact puternic asupra
comunităț ii dezvolt atorilor de software, impresionând prin simplitate și portabilitate. Această
tehnologie oferă posibilitatea dezvoltă rii pe o serie d e platforme destinate implementării de
aplicații, ajungând să servească toate segmentele industriei software.4
Limbajul folo sește sinta xa de la alte limbaje ca și C++ și C, cu un model al obi ectelor mai
simplu. Compilarea se face într -un format standard numit byte -code (cod de octeți) care este
defapt un cod intermediar între codul mașină și cel sursă. Un cod Java se poate compila pe orice
platformă care conține un JVM5 (Java Virtual Machine) indiferent de arhitectura calculatorului,
datorită intenției creatorului James Gosling de a putea fi rulată oriunde pe premisa WORA
(„write once, run anywhere”). Există mai mulți furnizori care oferă mașini virtuale compatibile
cu limbajul acesta, cum ar f i IBM și Oracle.
Ca și med ii de dezvoltare integrate (IDE – Integrated Develogment Environment) pot fi
folosite următoarele pentru limbajul Java: JDeveloper, DrJava, Net Beans, Eclipse, IntelliJ
IDEA.6
Există anumite concepte care se regăsesc și în C++, spre exemplu7:
Moștenirea – extinderea unei clase existent e prin definirea unei clase noi, iar aceasta din
urmă moștenește conținutul celei dintâi și la care se adaugă elementele proprii.
Încapsularea – „accesul la variabilele membre ale unui obiect se po ate realiza doar cu
ajutorul metodelor obiectului”.
Supraîncărcarea – două sau mai multe metode pot avea signatură diferită dar același
nume, deoarece tipul parametrilor și numărul lor diferă.
Legarea dinamică – un apel de metodă care se asociază cu func ția apelată la execuț ie.
4 https://users.info.uvt.ro/~ior dan/P_III/Cristian_Frasinaru -Curs_practic_de_Java.pdf
5 https://en.wikipedia.org/wiki/Java_virtual_machine
6 https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare)
7 http://www.aut.upt.ro/~rraul/Java/3.%20Orientarea%20pe%20obiecte_part_1_2.pdf
Aplicație Android: JamSes
9
Clasele pot avea constructori, aceștia sunt metode speciale care se apelează la crearea
obiectelor, au același nume ca și clasa dar nu returnează nimic. Poate fi apelat doar din interiorul
altui constructor.
Variabilele folosite în o biecte trebuie să aibă o anumită securitate , iar modificarea lor e
posibilă doar dacă permite metoda cu care au fost definite. Dacă accesul este public înseamnă că
este permis metodelor din orice clasă din proiect să facă modifică ri. Dacă este protected
înseamnă că accesul e permis pentru metodele claselor și a subclaselor lor. Private oferă acces
doar metodelor din aceeași clasă cu declararea variabilei.
3.2. Android Studio
Android Studio este mediu l de dezvoltare principal pentru sistemul de operare Android.
Uneltele folosite în acest mediu oferă dezvoltatorului ocazia să își creeze o aplicație de la zero cu
cea ma i mare ușurință pentru aparatura de tipul telefoane lor mobile cu sistem de operare
Andr oid, tabl ete, ceasuri și brățări inteligente , televizoare și autoturisme ce suportă acest sistem
de operare.
Bazat pe software IntelliJ IDEA a celor de la JetBrain, Android Studio se m ândrește cu
următoarele puncte :8
Instant Run – într-o aplicație care deja este compilată , schimbările sunt puse în
funcțiune fără ca ap licația să fie restartată sau reconstruită, iar utilizatorul poate vedea
efectele imediat.
Editor inteligent de cod – codul se scrie mult mai ușor și repede datorită sugestiilor și
analizelor de cod care se face în timp real .
Emulatorul – acesta funcționează mai bine decât un smartphone adevărat și îți poate
arăta cu viteză mai mare compilarea aplicației, de asemenea oferă și posibili tatea
simulării unei locații GPS , a atingerii mu ltiple și a senzorilor de mișcare .
Nucleul sau kernelul sistemului de operare Android este asemănător cu kernelul de la Linux,
însemnând că inginerii săi au modificat nucleul inițial Linux la nivel arhitectural. Cu alte cuvinte
Android nu suportă toate bib liotecile standard GNU existențe pentru Linux .9
8 https:/ /developer.android.com/studio/intro/index.html
9 https://www.androidcentral.com/android -z-what -kernel
Aplicație Android: JamSes
10
Fig. 10 – Arhitectura sistemului de operare Android10
În pachetul de dezvoltare software Android (Android SDK – Android Software
Development Kit) se găsesc: un compilator, librăriile necesare, un emulator al dispozitivului
capabil să simuleze acțiunile și procesele unui dispozitiv real prin QEMU (Quick Emula tor),
documentație, exemple de cod și tutoriale pentru a face experiența în program cât mai simplă
pentru dezvoltator. 11
Acest QEMU este o masină de emulare și virtualizare generică . Poate rula sisteme de operare
și programe car e au fost inventate pentru o mașină pe o altă mașină , prin folosirea translaț iei
dinamice.
Fig. 11 – Interfața programului Android Studio 2.3.3
10 http://www.worldit.info/articole/malware -pe-android -statistici -comportament -identificare -si-neutralizare/
11 https://developer.android.com/studio/releases/sdk -tools.html
Aplicație Android: JamSes
11
Fig. 12 – Emulator pentru Nexus 5X12
Emulatorul folosește o configuraț ie AVD13 (Android Virtual Device), care îi determină
imaginea de sistem a dispozitivului simu lat, cum arată și funcționalitatea sa. Configuraț iile
hardware pot fi setate de că tre dez voltator/utilizator, iar această versatilitate oferă prilejul de a
testa aplicații/programe în toate variantele de condiț ii.
ADB-ul (Android Debug Bridge) este un pachet de „unelte”, regăsit în SDK, care face
trecerea de la cod la aplicația efectivă. Rularea e posibilă pe un dispozitiv real (telefon, tabletă,
Smart TV, ce asuri) sau pe simulator. Comanda pentru rulare, când este mai mult de o opțiune de
compilare, este în general următoarea:14 adb [ -d|-e|-s <serialNumber>] <command> , unde:
-d este opțiunea care specifică să se folosească dispozitivul ataș at prin USB,
-e indică prezența unui emulator Andro id funcț ional pe calculator,
-s include pe oricare din cele două menționate mai sus și specifică pe care dorește să o
folosească prin numă rul serial alocat .
Proiectul de față utilizează API(Android P ackage Index) de nivel 16, adică versiunea 4.1
Jelly Bean, după denumirea comercială .15 Asta însemnând că poate funcț iona atât pe versiunea
aceasta cât și pe altele mai noi.
12 https://developer.android.com/studio/run/emulator.html
13 https://developer.android.com/studio/run/emulator.html
14 https://developer.android.com/studio/command -line/adb.html
15 https://ro.wikipe dia.org/wiki/Android_(sistem_de_operare)#Platforme_Android
Aplicație Android: JamSes
12
Capitolul 4 Specificațiile aplicației
4.1. Descrierea aplicației
Ideea de bază a acestei aplicații este de a -i ajuta pe cei ce doresc să învețe noțiuni elementare
despre chitară și cum se cântă unele melodii ușoare la aceast instrument .
Aplicația este dotată cu o listă de melodii ce poate fi îmbogățită la orice oră cu noi piese,
explicație vizuală despre acordur i, cât și link -uri externe către ajutor suplimentar.
Din experiența personală am observat lipsa unei aplicații în magazinul GooglePlay care să
lucreze cu utilizatorul și să se adapteze la nevoile sale. În sensul că aplicațiile existențe au
achiziții în interiorul lor și abia după ce ai plătit o anumită sumă de bani poți să accesezi unele
opțiuni mai interesante sau folositoare ale aplicației. Am dorit ca acest lucru să nu fie și în cazul
lui JamSes, iar utilizatorul să poată trimite feedback cu ce ar dori să vadă și ce informații ar vrea
să primească.
Pe sc urt JamSes te învață să cânți la chitară: de la cum se țin degetele pe grifu -ul chitării
pentru a forma acorduri până la versurile melodiilor preferate și modul în care trebuiesc
schimbate acordurile.
De asemenea îți oferă varianta de a căuta inspirație folosind link -uri externe, specifice pentru
fiecare melodie în parte. Aceste link -uri sunt două pentru fiecare piesă, unul reprezentând un
tutorial iar al doilea melodia originală a artistului respectiv . Consider că aceste link -uri sunt
importante, pentru că deși muzica este o știință exactă, pe lângă specificațiile tehnice este nevoie
și de inspirație și eventual o ureche muzicală. Acestea se pot dobândi doar dacă și auzim ceea ce
dorim să cântăm.
4.2. Funcțiile aplicaț iei
JamSes reprezintă o aplicație pentru telefoane deștepte („smartphone”) care operează pe
sistemul de operare Android, concepută pentru un utilizator ce dorește să învețe cum să cânte la
chitară.
Utilizator ul, odată ce a deschis aplicația, este întâmpinat direct cu lista melodiilor
disponibile în baza de date a lui JamSes. El își alege o piesă pe care dorește să o studieze și apasă
pe ea în listă. De asemenea, în cazul în care dorește să afle cum funcționează aplicația va apăsa
butonul Ajutor (ilustrat prin tr-un „?”) care îl duce la instrucțiunile de folosire, iar dacă vrea să
Aplicație Android: JamSes
13
afle câteva informații despre dezvoltator și povestea lui JamSes, este invitat să apese butonul
Despre (ilustrat printr -un „i”)
Este trimis apoi la o fereastră unde poate citi versur ile melodiei selectate, prin desfășurarea
paginii curente. Din această locație el se poate deplasa cu ajutorul a trei butoane înapoi la pagina
principală (ilustrat prin trei linii paralele orizontale), la fereastra link -urilo r (ilustrată printr -un
„link”/„ înlănț uire”) sau la fereastra acordurilor (ilustrat printr -o singură notă muzicală).
Dacă decide să apese pe butonul de link -uri, i se dă ocazia să aleagă ce fel de videoclip
dorește să urmărească în con tinuare: pentru melodia originală a artistului , sau pentru un tutorial
ales de dezvoltator. O ricare ar fi decizia lui, va fi trimis la o aplicație externă de JamSes dar
instalată în telefonul său, prin care va urmări videoclipul. În general se folosește aplicația de
Browser/Navigator sau aplicația cel or de la Youtube16 . Așa ca și în fereastra anterioară, cea în
care citeș te versurile, utilizatorul are trei posibilități: să fie trimis la pagina principală, cea cu
lista de melodii, să se întoarcă la versurile mel odiei (ilustrată printr -o „librărie muzica lă”) sau la
fereastra acordurilor.
În cazul în care va fi apăsat butonul pentru acorduri, se accesează o altă secțiune în care este
prezentată lista, ce conține numele sau simbolurile acordurilor disponibile/folosite în melodiile
curent adăugate în aplic ație. Apăsând pe un element din listă va fi dispusă o imagine care
reprezintă modalitatea în care este format acordul respectiv. Asemenea celorlalte două ferestre
explicate mai sus, și de aici se poate merge în altă locație prin cele 3 butoane: la fereastr a
principală cu baza de date, către versuri, respectiv la link -uri.
Ieșirea din aplicaț ie se face p rin intermediul butonului de ieșire, dispus în fereastra
principală .
Fig. 13 – Wireframe17 fereastra 1 – MainActivity.class
16 https://play.google.com/store/apps/details?id=com.google.android.youtube
17 https://wireframe.cc/gzHcFy Ieșire din JamSes
Despre aplicație
Trimite către fereastra „Despre”
Instrucțiuni de folosire
Trimite către fereastra de „Ajutor”
Alegere din baza de date
Trimite la versuri
Aplicație Android: JamSes
14
Înapoi către
fereastra 1
Fig. 14 –
Wireframe17 fereastra
2 si 3 –
AboutActivity.class si
HelpActivity.class
Derularea textului
Către fereastra 1
Către fereastra
link-urilor
Către fereastra
acordurilor
Fig. 15 –
Wireframe17 fereastra
4 –
Song6Anctivity.class
Către fereastra 1
Către fereastra versurilor
Către fereastra
acordurilor
Link extern către
Melodia originală
Link extern către un
Tutorial
Fig. 16 – Wireframe17
fereastra 5 –
LinkAnctivity.class
Către fereastra 1
Către fereastra
versurilor
Către fereastra
link-urilor
Lista acordurilor
Fig. 17 – Wireframe17
fereastra 6 –
Chords2Anctivity.class
Afișarea acordului
Aplicație Android: JamSes
15
4.3. Interfaț a cu utilizatorul
Activitatea principală – MainActivity.class
Fereastra principală este și prima care îl întâmpină pe
utilizator. Aceasta conține lista de melodii disponibile,
precum și butoane care duc la explicații și informații anexe
despre aplicație.
Fig. 18 – Captură de ecran MainActivity
Activit ățile Despre ș i Ajutor – AboutActivity.class și HelpActivity.class
Fig. 19 și 20 – Captură de
ecran AboutActivity si
HelpActivity
Aplicație Android: JamSes
16
Acestea conțin un text informativ despre aplicație și autor.
În Help este explicat utilizatorului cum se folosește aplicația, iar în About sunt câteva cuvinte
despre contextul în care a fost crea tă și despre autor .
Activitatea pentru l ink-uri – LinkActivity .class
În această fereastră se găsesc două butoane care primesc
câte un URL (Uniform Resource Locator).
Butonul Tutorial va primi un link către un tutorial video
pentru melodia respectivă.
Butonul Melodie Originală trimite către link -ul melodiei
originale.
Fig. 21 – Captură de ecran LinkActivity
Activitatea pentru acorduri – Chords 2Activity .class
Aici se găsește o listă cu toate acordurile folosite în
melodiile existențe în baza de date.
Elementele din listă se găsesc în folderul /values/ în
strings.xml .
Imaginile pentru fiecare acord sunt stocate în folderul
/drawable al aplicației, iar pentru fiecare element din listă se
trimite după imaginea specifică lui.
Fig. 22 – Captură de ecran Chords2Activity
Aplicație Android: JamSes
17
Citirea efectivă a versurilor – Song6Activity .class
Utilizatorul poate derula textul versurilor prezentat.
Fig. 23 – Captură de ecran Song6Activity
4.4. Baza de date
Firebase Realtime Database este o bază de date online, care oferă acces la baza de date direc t
de pe partea clientului . Informația e păstrată local, dar chiar și offline aceasta este dispusă
utilizatorului . În momentul conectării la internet, baza de date se sincronizează cu cea de pe
platformă, iar clientul primește modificările automat.
Cu ajutorul unor reguli, baza de date este structurată pentru a se putea citi sau a scrie în ea.
De asemenea se poate folosi o autentificare pe care dezvoltatorii o definesc pentru cine are acces
la această structură.
Nu este o bază de date tip SQL, de aici și denumirea de NoSQL, ne fiind o bază de date
relațională. API -ul acesteia lasă spre folosință doar operații ce se pot executa rapid, ceea ce oferă
dezvoltatorului un răspu ns în timp real în aplicația sa, fără ca acesta să își facă griji de numărul
utilizatorilor. Tot ce este stocat în Librărie are forma unui obiect JSON (JavaScript Object
Notation)18, adică face parte dintr -un arbore în care fiecare element este un nod și primește o
cheie, ce poate fi aleasă de dezvoltator sau generată automat, respectiv o valoare pentru cheie.
18 http://www.json.org/
Aplicație Android: JamSes
18
Fig. 24 – Structura bazei de date19
19 https://console.firebase.google.com/u/0/project/fir -thing -d015c/database/data
Aplicație Android: JamSes
19
Capito lul 5 Proiectarea aplicaț iei
5.1. Componentele aplicaț iei
ListView20 – este un obiect de tip View care dispune elementele sale într -o listă prin care se
poate naviga. Elementele sunt adă ugate automat prin intermediul unui adaptor, care practic
extrage din sursă, ce poate fi o bază de date sau o mulțime. Dispunerea elementelor se f ace
pe rânduri, reținându -se poziț ia fiecăruia pentru a putea fi folosit eventual mai târziu.
public class List View
extends AbsListView
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView<android.widget.ListAdapter>
↳ android.widget.AbsListView
↳ android.widget.ListView
TextView21 – un element de tip UI (User Interface) care dispune un text pe interf ața
aplicaț iei.
public class TextView
extends View implements Vie wTreeObserver.OnPreDrawListener
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
Button22 – un element de tip UI pe care utilizatorul îl poate atinge (apăsa /click) pen tru ca o
acțiune să aibă loc. În general vine însoțit de o funcție „onClick” care implementează
acțiunea pentru butonul respectiv.
public class Button
extends TextView
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
20 https://developer.android.com/guide/topics/ui/layout/listview.html
21 https://developer.android.com/reference/android/widget/TextView.html
22 https://developer.android.com/refer ence/android/widget/Button.html
Aplicație Android: JamSes
20
ImageButton23 – un buton pe care apare o imagine, în loc de text. Se poate seta să își schimbe
culoarea în diferitele stări ale butonului, depinzând de ac țiunea utilizatorului. Imaginea se
definește prin atributul android:src din fișierul XML de sub tag -ul <ImageButton> sau prin
metoda setImageResource(int) în cadrul clasei unde se găsește acesta.
public class ImageButton
extends ImageView
java.lang.Object
↳ android.view.View
↳ android.widget.ImageView
↳ android.widget.ImageButton
ImageView24 – un obiect care afișează imaginile de tip .png, .jpg, etc.
public class ImageView
extends View
java.lang.Object
↳ android.view.View
↳ android.widget.ImageView
Typeface25 – o clasă care specifică și determină fontul textului (obiecte cu extensia „.ttf”) .
public class Typeface
extends Object
java.lang.Object
↳ android.graphics.Typeface
FirebaseListAdapter 26– este un adaptor speci fic pentru Firebase , care poziționează nodurile
din baza de date într -o listă.
public abstract class FirebaseListAdapter<T>
extends BaseAdapter
java.lang.Object
↳ BaseAdapter
↳ com.firebase.ui.FirebaseListAdapter<T>
Intent27 – este o descriere abstractă a unei operații ce urmează să fie pusă în acțiune. În acest
proiect se folosește pentru a trece de la o activitate la cealaltă.
23 https://developer.android.com/reference/android/widget/ImageButton.html
24 https://developer.android.com/reference/android/widget/ImageView.html
25 https://developer.android.com/reference/android/graphics/Typeface.html
26 https://firebaseui.com/docs/android/com/firebase/ui/FirebaseListAdapter.html
27 https://developer.android.com/reference/android/content/Intent.html
Aplicație Android: JamSes
21
public class Intent
extends Object i mplements Parcelable, Cloneable
java.lang.Object
↳ android.content.Intent
DatabaseReference28 – este o referință către locația bazei de date, pe care aplicația o
folosește pentru a scrie sau citi în/din baza de date.
Toast29 – un obiect de tip View care transmite u n mesaj utilizatorului sub forma unui balon în
josul ecranului pe care este scris respectivul mesaj.
public class Toast
extends Object
java.lang.Object
↳ android.widget.Toast
FirebaseStorage30 – referință chemată pentru a face legatura cu Firebase Storage
BufferedReader31 – clasă care citește text dintr -o variabilă de tip caracter
public class BufferedReader
extends Reader
java.lang.Object
↳ java.io.Reader
↳ java.io.BufferedReader
FileReader32 – conceput pentru a citi ș iruri de caractere.
public class FileReader
extends InputStreamReader
java.lang.Object
↳ java.io.Reader
↳ java.io.InputStreamReader
↳ java.io.FileReader
StringBuilder33 – primește informații de orice tip și le convertește în ș iruri de caractere
(String) pentru a fi mai apoi citite.
28 https://firebase.google.com/docs/reference/android/com/google/firebase/database/DatabaseReference
29 https://de veloper.android.com/reference/android/widget/Toast.html
30 https://firebase.google.com/docs/storage/android/create -reference
31 https://developer.android.com/reference/java/io/BufferedReader.html
32 https://developer.android.com/reference/java/io/FileReader.h tml
Aplicație Android: JamSes
22
public final class StringBuilder
extends Object implements Appendable, CharSeque nce, Serializable, CharSequence
java.lang.Object
↳ java.lang.StringBuilder
File34 – este o reprezentare abstractă a locaț iei (pathname ) a unui director sau a unui fiș ier.
public class File
extends Object implements Serializable, Comparable<File>
java.lang.Object
↳ java.io.File
5.2. Stocare informații
Fig. 25 – Structura locației unde sunt stocate fisierele text
Firebase Storage este un mediu în care se poate stoca informaț ie, oferi nd utilizatorului
dreptul de a încărca sau descărca imagini, fiș iere audio sau alt tip de dată .
Autentificarea se face pe baza unor reguli, asemenea regulilor pentru Firebase Realtime
Database.
33 https://developer.android.com/reference/java/lang/StringBuilder.html
34 https://developer.android.com/reference/java/io/File.html
Aplicație Android: JamSes
23
Fig. 26 – Regulile folosite pentru autentificarea în baza de date
Fig. 27 – Regulile folosite pentru autentificarea în locația de stocare
În cazul lui JamSes, utilizatorul nu poate încărca fișiere î n baza de date prin acesta, ci doar să
le citească, datorită modului în care a fost concepută aplicaț ia.
URL -ul prin care se face legatura la baza de date :
https://fir -thing -d015c.firebaseio.com/Librarie
URL -ul pri n care se face legatura cu locaț ia de stocare:
gs://fir -thing -d015c.appspot.com/Lyrics
În momentul calibrării aplicaț iei cu Firebase Realtime Database, este nevoie de un fiș ier
google -services.json care face legatura dintre cele două . Acesta este generat automat și unic
pentru fiecare aplicație care are acces pe platformă .
{
"project_info" :
{
"project_number" : "297950006835" ,
"firebase_url" : "https://fir -thing-d015c.firebaseio.com" ,
"project_id" : "fir-thing-d015c",
"storage_bucket" : "fir-thing-d015c.appspot.com"
},
"client" : [
{
"client_info" : {
"mobilesdk_app_id" : "1:297950006835:android:170fa82d5bff9fc1" ,
Aplicație Android: JamSes
24
"android_client_info" : {
"package_ name": "com.example.andra.jamses"
}
},
"oauth_client" : [
{
"client_id" : "297950006835 –
vhjlooi0at7t2gl1frp4bfldu7ov4g07.apps.googleusercontent.com" ,
"client_type" : 1,
"android_info" : {
"package_name" : "com.example.andra.jamses" ,
"certificate_hash" : "a29814e4e95fb0f8298c9aeccf81bb0a967a31c3"
}
},
Plugin-ul pentru serviciile Google încarcă în fișierul JSON prin adăugarea î n
<project>/build.gradle a comenzii:
1. buildscript {
2. dependencies {
3. classpath 'com.google.gms:google -services:3.1.0' } }
Apoi î n <project>/<app -module>/build.gradle :
apply plugin: 'com.google.gms.google -services'
După care se sincronizează tot proiectul pentru ca noile modificări să aibe loc.
Conținutul fiș ierului fir-thing -d015c -export.json și structura bazei de date :
{
"Librarie" : {
"adelesomeonelikeyou" : "Adele – Someone like you" ,
"arcticmonkeysarrabella" : "Arctic Monkeys – Arrabella" ,
"arcticmonkeyssnapoutofit" : "Arctic Monkeys – Snap out of it" ,
"beegeesstayinalive" : "Bee Gees – Stayin' alive" ,
"blursong2" : "Blur – Song2",
"bonjovibadmedicine" : "Bon Jovi – Bad medicine" ,
"bonjovihaveaniceday" : "Bon Jovi – Have a ni ce day",
"bonjoviitsmylife" : "Bon Jovi – It's my life" ,
"brunomarsliquorstore" : "Bruno Mars – Liquor Store" ,
"coldplayyellow" : "Coldplay – Yellow",
"edsheerangalwaygirl" : "Ed Sheeran – Galway girl" ,
"edsheeraniseefire" : "Ed Sheeran – I see fire" ,
"edsheeranperfect" : "Ed Sheeran – Perfect" ,
"edsheeranshapeofyou" : "Ed Sheeran – Shape of you" ,
"edsheeranthinkingoutloud" : "Ed Sheeran – Thinking out loud" ,
"johnlegendallofme" : "John Legend – All of me" ,
"nirvanasmellsliketeenspirit" : "Nirvana – Smells like teen spirit" ,
"oasiswonderwall" : "Oasis – Wonderwall" ,
"passengerlethergo" : "Passenger – Let her go" ,
"pearljamalive" : "Pearl Jam – Alive",
"pinkfloydwishyouwerehere" : "Pink Floyd – Wish you were here" ,
"samsmithstaywithme" : "Sam Smith – Stay with me" ,
"u2one" : "U2 – One"
}
}
Aplicație Android: JamSes
25
Calibrarea cu pl atforma Firebase se poate face ș i prin intermediul un ui asistent î n Android
Studio. Practic vari anta de mai sus este cea manuală, ia r asistentul te ajută sa implementezi î n
fișierul /build.gradle automat.
Fig. 28 – Asistentul pentru Firebase din Android Studio
Aplicație Android: JamSes
26
Capitolul 6 Implementarea aplicației
Icoana aplicaț iei/Logo
S-a creat cu ajutorul site -ului Android Asset Studio35. Reprezintă litera „J”, de la JamSes,
Culoarea de fundal este aceeaș i cu cea din aplicație. Fișierele specifice pentru icoană sunt
mipmap -hdpi, mipmap -mdpi, mipmap -xhdpi, mipmap -xxhdpi si mipmap -xxxhdpi .
Fig. 29 – Logo -ul aplicaț iei
Typeface36 – Titlul de pe fereastra principală
Se setează fontul titlului, fiș ierul .ttf se află î n folderul /assets .
Fișierul .ttf a fost procurat de pe site -ul http://www.1001fonts.com/bilbo -font.html .
Typeface myType = Typeface. createFromAsset (getAssets(), "bilbo.swash -caps.ttf" );
TextView Title = (TextView) findViewById(R.id. textViewTitle );
if(Title != null)
{ Title.setTypeface(myType); }
ImageButton ș i button_shape.xml
Fig. 30 – Buton
Definirea unui buton din activity_main.xml
<ImageButton
android:id="@+id/imageButtonAbout"
android:layout_width= "50dp"
android:layout_height= "50dp"
android:layout_alignParentEnd= "true"
android:layout_alignParentRight= "true"
android:layout_below= "@+id/imageButtonExit"
android:background= "@drawable/button_shape"
35https://romannurik.github.io/Andr oidAssetStudio/icons –
launcher.html#foreground.type=text&foreground.text.text=J&foreground.text.font=Bilbo&foreground.space.trim=1
&foreground.space.pad=0.2&foreColor=rgba(96%2C%20125%2C%20139%2C%200)&backColor=rgb(68%2C%2
0138%2C%20255)&crop=0&backgroundShap e=circle&effects=shadow&name=ic_launcher
36http://www.1001fonts.com/bilbo -font.html
Aplicație Android: JamSes
27
android:onClick= "aboutAction"
app:srcCompat= "@android:drawable/ic_menu_info_details"
tools:ignore= "ContentDescriptio n" />
Mai sus este prezentată definirea unui ImageButton: id -ul cu care este identificat,
dimensiunea, coordonatele locației sale față de alte obi ecte. S pre exemplu acesta este în dreapta –
sus a margi nii ecranului (a părintelui), sub butonul de ieșire din aplicație, are loc acț iunea
„aboutAction” care este definită î n MainActivity.class , imaginea din buton se gasește î n folderul
/drawable și este o imagine din colectia programului Android Studio.
Forma butoanelor cu imagine este luată din fiș ierul button _shape.xml , acolo este definită
forma, culoarea elementelor din obiect începând cu marginea, interiorul ș i trecerea dintre ele.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:startColor= "#a9a9a9"
android:endColor= "#a9a9a9"
android:angle="270" />
<stroke
android:width="1px"
android:color="#a9a9a9" />
</shape>
Pentru acțiunea onClick, se apelează următoare funcț ie:
public void aboutAction(View v)
{
Intent goToAbout = new Intent();
goToAbout.setClass(MainActivity. this, AboutActivity. class);
startActivity(goToAbout);
finish();
}
Aceasta cre ează un nou obiect de tip Intent, pe care î l setează ca legatură î ntre
MainActivity.class și AboutActivity.class , după care se porneș te a doua activitate, iar cea curentă
este oprită .
Lista mel odiilor din fereastra principală ș i citirea din baza de date:
lv = (ListView) findViewById(R.id. listViewSongs );
final DatabaseReference dbref =
FirebaseDatabase. getInstance ().getReferenceFromUrl( "https://fir -thing-
d015c.firebaseio.com/WTF" );
FirebaseListAdapter<String> adapter = new FirebaseListAdapter<String>(
Aplicație Android: JamSes
28
this,
String.class,
android.R.layout. simple_list_item_1 ,
dbref) {
@Override
protected void populateView(View v, final String model, int position) {
TextView tv = (TextView) v.findViewById(android.R.id. text1);
tv.setText(model);
lv.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int
position, long id) {
song = lv.getItemAtPosition(position).toString();
Intent gotoLyrics = new Intent();
gotoLyrics.setClass(MainActivity. this, Song6Activity. class);
gotoLyrics.putExtra( "song", song);
Intent toLink = new Intent();
toLink.setCla ss(MainActivity. this, LinkActivity. class);
toLink.putExtra( "song", song);
Intent toChords = new Intent();
toChords.setClass(MainActivity. this, Chords2Activity. class);
toChords.putExtra( "song", song);
startActivity(gotoLyrics);
}
});
}
};
lv.setAdapter(adapter);
Aici se crează un obiect de tip Databa seReference, care face referință la variabila dbref ce
primește atribuț ii specifice unei baze de date, ia r legă tura cu platforma se face prin URL.
Apoi se defineș te un adaptor special pentru obiectul de tip ListView, care setează aranjarea
elementelor în listă. Din oficiu se apelează definirea funcț iei (@Override) populateView(), în
interiorul căruia se defineș te efectiv cum va ară ta lista, dar și acț iunea care va avea loc dacă se
apasă pe un element, prin lv.setOnItemClickListener . În acest caz, se va transmite că tre
Song6Activity .class și LinkActivity .class valoarea elementului apă sat prin
gotoLyrics.putExtra( "song" , song ). Apoi se setează lista la adaptorul definit anterior.
Extragere fiș iere text din Firebase Storage
Prima etapă este de a face legă tura cu Firebase Storage prin adăugarea unor dependințe în
fișierul /app/build.gradle/ :
compile 'com.google.firebase:firebase -storage:11.0.1'
Aplicație Android: JamSes
29
După aceea se poate trece la clasa în care se citeș te din platforma de stocare:
StorageReference sref = FirebaseStorage. getInstance ().getReference();
StorageReference fileRef = sref.child( "Lyrics/" + song + ".txt");
localFile = null;
try {
localFile = File. createTempFile (song, "txt");
} catch (IOException e) {
Toast. makeText (getApplicationContext(), "Nu s-a creat fisierul local" ,
Toast. LENGTH_SHORT ).show();
}
if(localFile != null) {
fileRef.getFile( localFile ).addOnSuccessListener( new
OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
StringBuilder text = new StringBuild er();
try {
BufferedReader reader = new BufferedReader( new
FileReader( localFile .getAbsolutePath()));
String mLine;
while ((mLine = reader.readLine()) != null) {
text.append(mLine);
text.append( "\n");
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
textLyr.setText(text);
}
}).addOnFailureListener( new OnFailureListener() {
@Override
public void onFailure( @NonNull Exception e) {
Toast. makeText (getApplicationContext(), "Nu se poate citi din
fișier.", Toast. LENGTH_SHORT ).show(); }
});
}
}
Se crează un obiect de tip referință pentru stocare, la care se adaugă instanț a de preluare din
URL. Un fiș ier local este c reat pentru a salva conținutul luat de pe Storage, inițial depus într -un
fișier temporar.
Se citește din fișier linie cu linie până când se ajunge la finalul fiș ierului text și se afișează î n
TextView -ul pus la dispoziție î n layout (textLyr) . În cazul î n care nu se poate citi din fișier, se
afișează pe ecran mesajul „Nu se poate citi din fiș ier.”
TextView -ul textLy r are proprietatea de a fi desfășurat de că tre utilizator (scrollable).
Aplicație Android: JamSes
30
textLyr = (TextView) findViewById(R.id. textVersuri );
<ScrollView
android:id= "@+id/scrollViewLyrics"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:layout_marginTop= "34dp"
tools:ignore= "UselessParent" >
<TextView
android:id= "@+id/textVersuri"
android:layout_width= "match_parent"
android:layout_height= "match_parent"
android:fontFamily= "sans-serif"
android:text= ""
android:textColor= "#000000"
android:textSize= "18sp"
tools:ignore= "ScrollViewSize" />
</ScrollView >
Citirea ș i afișarea listei „locale” împreună cu afișarea de imagini .
În activitatea pentru acorduri se gă sește o listă din care utilizatoru l poate alege un element și
se va afiș a o imagine.
<string name="A">A</string>
<string name="A2">A2</string>
<string name="Ab">Ab</string>
<string name="Am">Am</string>
<string name="Am7">Am7</string>
<string name="B7">B7</string>
<string name="Bb">Bb</string>
<string name="Bm">Bm</string>
<string name="C">C</string>
<string name="Cadd9">Cadd9</ string>
<string name="D">D</string>
<string name="D2">D2</string>
<string name="Dm">Dm</string>
<string name="E">E</string>
<string name="Em">Em</string>
<string name="F">F</string>
<string name="G">G</string>
Aceastea sunt elementele prezente î n lista acordurilor , citite din strings.xml unde sunt stocate
numele elementelor, iar lista în această ordine este defapt salvată î n /values/arrays.xml :
<string-array name="chordsArray" >
<item>@string/A</ item>
<item>@string/A2</ item>
<item>@string/Ab</ item>
<item>@string/Am</ item>
Aplicație Android: JamSes
31
<item>@string/Am7</ item>
<item>@string/B7</ item>
<item>@string/Bb</ item>
<item>@string/Bm</ item>
<item>@string/C</ item>
<item>@string/Cadd9</ item>
<item>@string/D</ item>
<item>@string/D2</ item>
<item>@string/Dm</ item>
<item>@string/E</ item>
<item>@string/Em</ item>
<item>@string/F</ item>
<item>@string/G</ item>
</string-array>>
Implementarea î n Chords 2Activity .class :
ListView lChords = (ListView) findViewById(R.id. lvChords );
ArrayAdapter<CharSequence> adapterChords = createFromResource (this,
R.array. chordsArray , android.R.layout. simple_list_item_1 );
lChords.setAdapter(adapterChords);
lChords.setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long
id) {
ImageView vChords = (ImageView) findViewById(R.id. ivChords );
switch(position)
{
case 0:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_a); }
break;
case 1:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_a2 ); }
break;
case 2:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_ab ); }
break;
case 3:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_am ); }
break;
case 4:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_am7 ); }
break;
case 5:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_b7 ); }
break;
case 6:
if(vChords != null) {
vChords.setImageResource(R.drawable. chord_bb ); }
break;
}
… }
Aplicație Android: JamSes
32
Se folosește metoda onItemClick care așteaptă ca un element să fie apă sat pentru a memora
poziția acestuia într -o variabilă. Apoi se schimbă conținutul ImageView -ului și se afișează
imaginea pentru elementu l ales.
Fig. 31 – Conț inutul folderului /res/drawable
Transmisia de date d e la o activitate la alta
Intent gotoLyrics = new Intent();
gotoLyrics.setClass(MainActivity. this, Song6Activity. class);
gotoLyrics.putExtra( "song", song);
startActivity(gotoLyrics);
Se instanțiază o variabilă „goToLyrics ” care este legă tura dintre activităț i. După care se
specifică activitatea destinație, cea î n care se va depune variabila „song ”. În final se apelează cea
de a doua activitate și este afiș ată pe ecran.
Design ș i culori
Culorile de bază sunt și
#00779e #dadada
Stilu l este unul simplist, am ales să folosesc puț ine culori, pentru a nu distrage de la
adevăratul rol al aplicaț iei.
Aplicație Android: JamSes
33
MainActivity.class , AboutActivity.class și HelpActivity.class au fundalul alba stru și
butoanele gri pentru că aceste ferestre nu se schimbă în funcție de alegerea melodiei de către
utilizator ș i sunt statice.
Song6Activity.class , LinkActivity.class și ChordsActivity.class sunt în opoziție cu cele
menț ionat e mai su s, deoarece sunt dinamice, adică se schimbă conținutul de pe ecran în funcție
de alegerea utilizatorului. În plus este mai uș or de citit versurile dacă fundalul este deschis la
culoare iar textul este de culoare închisă .
Aplicație Android: JamSes
34
Capitolul 7 Manual de utilizare
Fereastra 1 – Fig. 32 – Activitatea principală , MainActivity.class
Fereastra 2 ș i 3
Fig. 33 – HelpActivity.class Fig. 34 – AboutActivity.class
Ieșire din aplicaț ie
Informații despre aplicație și autor
Trimite la fereastra 2
Informații despre cum se folosește aplicația
Trimite la fereastra 3
Alegerea unei melodii
Trimite la fereastra 4
Înapoi la fereastra 1
Aplicație Android: JamSes
35
Fereastra 4 – Fig. 35 – Activitatea de citire a versurilor, Song6Activity.class
Fereastra 5 – Fig. 36 – Activitatea cu butoanele pentru link -uri, LinkActivity.class
Derularea textului
(Scroll) Înapoi la fereastra 1
Către lista de acorduri
Trimite la fereastra 6 Link -uri pentru melodia selectată
Trimite la fereastra 5
Înapoi la fereastra 1
Către lista de acorduri
Trimite la fereastra 6 Către textul melodiei
Trimite la fereastra 4 Legătura cu un link
extern ce conține
melodia originală
Trimite la aplicație
externă care citește
link-uri
(Youtube/Browser)
Asemenea butonului
Melodie Originală, dar
trimite către un tutorial
Melodia aleasă
Aplicație Android: JamSes
36
Fereastra 6 – Fig. 37 – Activitatea cu lista ș i imaginile pentru acorduri
Listă cu
acordurile
disponibile
Afișează
imagine cu
alegerea din
lista de mai
sus Înapoi la fereastra 1
Către textul melodiei
Trimite la fereastra 4
Link -uri pentru
melodia selectată
Trimite la fereastra 5
Aplicație Android: JamSes
37
Capitolul 8 Concluzii și dezvoltă ri viitoare
Dezvoltarea aplicației JamSes a necesitat utilizarea multor cunoșt ințe practice și teoretice
învăț ate la facultate, cum ar fi: programare orientată pe obiecte, limbajul Java, structuri de date,
baze de date, interfețe utilizato r și grafică sau ingineria sistemelor. De asemenea, a fost necesar
documentarea și acumularea unor cunoștințe teoretice noi, dar și utilizarea unor tehnologii noi.
Pentru baza de date și stocarea informației, a fost nevoie de înțeleg erea unei platforme
nemaiî ntâlnite de mine , dar foarte folositoare . Deoarece doresc ca aplicația mea să crească și să
ofere mai multe posibilități a fost nevoie să folosesc atât o platformă de stocare online, cât și o
bază de date pe măsură.
Ca și dezvoltări viitoare, se poate spune că aplicația oricum este într -o continuă dezvoltare,
datorită bazei de date destinată melodiilor care crește în fiecare zi, iar aplicația primește și
afișează aceste modificări.
Consider că poate fi de folos imp lementarea unei căsuțe de căutare, prin care utilizatorul să
își tasteze melodia dorită și să verifice mult mai rapid dacă se află în listă.
O altă posibilă dezvoltare constă în adăugarea posibilității de a auzi cum sună un acord
efectuat corect, acest l ucru îi poate fi de folos utilizatorului ajutându -i la formarea memoriei
auditive.
Este de folos și existența unor elemente de tipul acordorului și a metronomului în această
aplicație, astfel utilizatorul nu trebuie să caute în altă parte cum se acordeaz ă corect o chitară sau
care este măsura pentru a o putea cânta ca și artistul său preferat.
De asemenea pentru vizualizarea textului pieselor, fără să fie întreruptă partea practică, ar fi
necesa r un buton care să permită auto scrolling, dat fiind faptul că se presupune că utilizatorul și
studiază în timp ce folosește această aplicație. Astfel că instrumen tul este prezent, iar mâinile
user-ului sunt ocupate cu acesta.
Este posibilă și dezvoltarea unei interfețe mai interactive, în sensul că în viitor dor esc să
implementez o modalitate prin care utilizatorul să adauge melodii singur, iar ceilalți să primească
la rândul lor ceea ce primul a adăugat. Momentan acest lucru este posibil prin contactarea
autorului.
În legătură directă cu ceea ce e menționat ma i sus, ar fi util/interesant să existe astfel și o
clasificare a utilizatorilor aplicației JamSes și să se poată vedea cine a adăugat cele mai multe
melodii.
Aplicație Android: JamSes
38
Capitolul 9 Bibliografie
1. Aplicaț ia iJam – GooglePlay :
https://play.google.com/store/apps/details?id=jamesrichardson.com.ijam
2. Aplicaț ia GuitarSongs – GooglePlay:
https://play.google.com/store/apps/details?id=ru.subprogram.guitarsongs.vint
3. Aplicaț ia Perfect Ear – GooglePlay:
https://play.google.com/store/a pps/details?id=com.evilduck.musiciankit
4. Aplicația YouTube – GooglePlay :
https://play.google.com/store/apps/details?id=com.google.android.youtube
5. Limbajul de programare Java:
https://users.info.uvt.ro/~iordan/P_III/Cristian_Frasinaru -Curs_practic_de_Java.pdf
https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare)
6. Programarea Orientată pe obiecte și Java:
http://www.aut.upt.ro/~rraul/Java/3.%20Orientarea%20pe%20obiecte_part_1_2.pdf
7. JVC:
https://en.wikipedia.org/wiki/Java_virtual_machine
8. Android Studio:
https://developer.android.com/studio/intro/index.html
9. Android:
https://www.androidcentral.com/android -z-what -kernel
https://ro.wikipedia.org/wiki/Android_(sistem_de_operare)#Platforme_Android
10. API:
https://developer.android.com/studio/intro/index.html
Aplicație Android: JamSes
39
11. Arhitectura Android:
http://www.worldit.info/articole/malware -pe-android -statistici -comportament –
identificare -si-neutralizare/
12. SDK:
https://developer.android.com/studio/releases/sdk -tools.html
13. Emulator:
https://developer.android.com/studio/run/emulator.html
14. ADB:
https://developer.android.com/studio/command -line/adb.html
15. Consolă Firebase:
https://console.firebase.google.com/u/0/project/fir -thing -d015c/database/data
16. ListView:
https://developer.android.com/guide/topics/ui/layout/listview.html
17. TextView:
https://developer.android.com/reference/android/widget/TextView.html
18. Button:
https://develope r.android.com/reference/android/widget/Button.html
19. ImageButton:
https://developer.android.com/reference/android/widget/ImageButton.html
20. ImageView:
https://developer.android.com/reference/android/widget/ImageView.html
21. Typeface:
https:// developer.android.com/reference/android/graphics/Typeface.html
22. FirebaseListAdapter:
https://firebaseui.com/docs/android/com/firebase/ui/FirebaseListAdapter.html
Aplicație Android: JamSes
40
23. Intent: https://developer.android.com/reference/android/content/Intent.html
24. DatabaseReference:
https://firebase.google.com/docs/reference/android/com/google/firebase/database/Databas
eReference
25. JSON :
http://www.json.org/
26. Logo:
https://romannurik.github.io/AndroidAssetStudio/icons –
launcher.html#foreground.type=text&foreground.text.text=J&foreground.text.font=Bilbo&f oreg
round.space.trim=1&foreground.space.pad=0.2&foreColor=rgba(96%2C%20125%2C%20139%
2C%200)&backColor=rgb(68%2C%20138%2C%20255)&crop=0&backgroundShape=circle&ef
fects=shadow&name=ic_launcher
27. Font titlu:
http://www.1001fonts.com/bilbo -font.html
28. Toast:
https://developer.android.com/reference/android/widget/Toast.html
29. Storag eReference:
https://firebase.google.com/docs/storage/android/create -reference
30. BufferedReader:
https://developer.android.com/reference/java/io/BufferedReader.html
31. FileReader:
https://develope r.android.com/reference/java/io/FileReader.html
32. StringBuilder:
https://developer.android.com/reference/java/lang/StringBuilder.html
33. File: https://developer.android.com/reference/java/io/File.html
34. Wireframe: https://wireframe.cc/gzHcFy
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: Profesor coordonator Autor As. dr. i ng. Crișan -Vida Mihaela GROZA Andrada TIMIȘOARA 2017 Aplicație Android: JamSes 2 CUPRINS Capitolul 1… [622446] (ID: 622446)
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.
