Sistemul de Operare Android

Capitolul I

Introducere

Ce este Android?

Androidul un sistem de operare mobil creat de compania Google. Transforma dispozitivul mobil intr-un calculator mobil. Sistemul android vine echipat cu un browser Web complet si capacitate de navigare pe Internet, are acces la peste 1.000.000 de aplicații prin Google Play Store, inclusive Gmail, Facebook si numeroase alte servicii, plus are capacitatea de a rula jocuri, a transmite mesaje de tip SMS si de a efectua apeluri mobile de pe telefon. Android este un software open source, ceea ce înseamnă ca oricine poate face sistemul de operare mai bun. In acest fel se beneficiază nu numai de cunoștințele dezvoltatorilor Google dar si de cele ale dezolatorilor terța-parte

Android este o platforma software si un sistem de operare pentru dispozitive si telefoane mobile bazata pe nucleul Linux, dezvoltata inițial de compania Google iar mai târziu de consorțiul comercial Open Handset Alliance. Android permite dezvoltatorilor sa scrie cod gestionat in limbajul JAVA controlând dispozitivul prin intermediul bibliotecilor Java dezvoltate de Google.[1] Aplicațiile scrise in C si alte limbaje pot fi compilate in cod mașina ARM si executate, dar acest model de dezvoltare nu este sprijinit oficial de Google.

Lansare platformei android la 5 noiembrie 2007 a fost anunțata prin fondarea Open Handset Alliance un consorțiu de 48 de companii de hardware, software si telecomunicații.

În anul 2005 compania Google a achiziționat o mica companie de tip start-up cu sediul in Palo Alto , California,SUA. Aceasta companie se numea Android,Inc, si a fost fondata de următorii: Andy Rubin, Rich Miner si Nick Sears.

În cadrul Google echipa condusa de Andy Rubyn a continuat dezvoltarea unui sistem de pentru dispozitive mobile bazat pe nucleul Linux,care urma sa fie prezentat marilor producători de telefoane mobile dar si marilor operatori de rețele mobile.

Google dorea ca propriul motor de căutare, clientul de e-mail si restul aplicațiilor pe telefoanele mobile si lucra din greu pentru aceasta dorinta.

În toamna anului 2008, sistemul de operare Android a fost disponibil Open Source. Google a decis sa facă public întregul cod sursa (inclusiv suportul pentru rețea si telefonie care anterior era indisponibil,sub licența Apache). Licența Apache presupune ca producătorii sunt liberi in a adăuga extensii proprietare fără a le face disponibile comunității open source.

În luna februarie a anului 2009, compania HTC a lansat pe piața primul telefon care rula sistemul de operare Android, acesta era cunoscut sub numele de T Mobile G1.Telefonul a fost lansat cu versiunea 1.5 a sistemului de operare ,alias Android Cupcake, care avea totuși câteva lipsuri. La acest moment in Android Market stăteau la dispoziție nenumărate aplicații suplimentare care puteau fi descărcate de orice utilizatori. Mulți dezvoltatori au remarcat potențialul acestui sistem de operare si din ce in ce mai multe aplicații aveau sa devina disponibile.

Fig.1.1 T Mobile G1-Android 1.5(Cupcake)

Pentru a avea acces la Android Market utilizatorul avea nevoie doar de o adresa de e-mail Gmail. In toamna anului 2009 compania Google a lansat versiunea 1.6 a sistemului de operare denumita si Donut. Printre funcțiile noi adăugate se numărau: suportul pentru diferite dimensiuni ale ecranului, funcția Text-to-Speach care permitea dictarea vocala urmând ca telefonul sa scrie mesajele , o funcție simpla de a pornire rapida si controlul conectivității. La mai putin de doua luni de la lansarea versiunii 1.6 Donut, o noua versiune era gata de lansare: Android 2.0 Eclair. Aceasta permitea configurarea a mai multor conturi Gmail. O noua noutate era introducerea gesturilor multitouch acestea dând posibilitatea de a face zoom pe fotografi,documente si pagini de internet. În plus camera foto a telefonului mobil suporta flash LED si zoom digital. În plus, o data cu actualizarea telefoanelor la versiunea 2.0 acestea erau echipate cu aplicația de navigație Google Maps. Tot in aceasta luna Motorola lansează pe piața primul său model de telefon care era dotat cu sistemul de operare Android, acesta purtand numele de Milestone.

Fig.1.2 Motorola Milestone- Android 2.0 Eclair

La începutul anului 2010 urmează Android 2.1 cu foarte puține schimbări fata de precedenta versiune. Tot atunci Google intra pe piata cu primul dispozitiv din seria Nexus. Acesta era construit de firma HTC si purta numele de Nexus One acesta nu a prins foarte bine in rândul consumatorilor si dispare repede de pe rafturi. Google a încercat din nou cu modelul Nexus S care era produs in parteneriat cu compania sud coreeana Samsung . Acest dispozitiv se bucura de mare succes. In acest moment dispozitivele care rulau sistemul de operare Android apăreau foarte repede pe piața acest sistem de operare fiind adoptat de majoritatea producătorilor de dispozitive mobile. In luna Mai a aceluiași an isi face apariția versiunea 2.2 Froyo. Printre noutățile aduse de aceasta versiune se număra suportul Adobe Flash de către browserul web, inbunatatirile pe partea de securitate a dispozitivelor, dar si funcții foarte utile precum funcția de tethering prin care smartphone-ul poate partaja conexiunea la internet prin intermediul unui cablu USB dar si prin modulul de Wi-Fi. De asemenea utilizatori puteau sa decidă unde vor fi instalate aplicațiile in memoria telefonului sau pe un card de memorie SD. Pe sfârșitul anului 2010 este lansata versiunea sistemului de operare 2.3 care purta numele de cod Gingerbread . Interfața de utilizator a primit o usoara modificare precum si o noua funcție ce asigura un control mai bun al aplicațiilor active. O data cu lansarea acestei versiuni a fost lansat si următorul dispozitiv din seria Nexus a celor de la Google sub numele de Nexus S. Acesta fiind construit tot in parteneriat cu compania sud-coreeana Samsung. In tot acest timp Android Market a crescut in numărul aplicațiilor disponibile acesta depășind numărul de 200.000 de aplicați disponibile. La începutul anului următor , in luna februarie 2011 compania a lansat versiunea 3.0 Honeycomb, aceasta era destinata in special tabletelor, acestea din urma prindeau din ce in ce mai bine pe piața consumatorilor.

In luna octombrie a anului 2011 a fost lansat publicului o noua versiune a sistemului de operare si anume Android 4.0 care purta numele de Ice Cream Sandwich. Codul sursa pentru aceasta versiune a devenit disponibil in luna noiembrie a aceluiași an . Primul telefon care urma sa ruleze aceasta noua versiune era următorul din seria Nexus si anume Samsung Galaxy Nexus .Google a menținut si pentru acest an parteneriatul cu compania Samsung datorita succesului obținut de dispozitivele precedente. Aceasta versiune majora a fost ultima care urma sa apăra la un interval atât de scurt fata de cea precedenta, urmând ca versiunea ulterioara sa fie anunțata in vara anului 2012 care purta numele de cod Jelly Bean aceasta din urma fiind versiunea 4.1 . Aceasta versiune aducea imbunatatiri semnificative pentru integrata cu utilizatorul, performanta ,securitate si funcționalitate.

Fig.1.3 Samsung Galaxy Nexus ruland Android 4.1(Jelly Bean)

O data cu lansarea noi versiuni de android gama de dispozitive Nexus sa largit cu prima tableta aceasta din urma purtand numele de Nexus 7 si era produsa in parteneriat cu compania ASUS.

In toamna aceluiași an compania Google lansa următoarea actualizare care aducea doar imbutantatiri pe partea de performanta si securitate . Era o actualizare minora dar o data cu ea urma sa fie lansat si un nou telefon mobil din seria Nexus care purta numele de Google Nexus 4 .

Acesta purta era produs cu un nou partener. Si de aceasta data Google a ales un producător din Coreea de Sud dar de aceasta data era compania LG. Acest dispozitiv sa bucurat de o recepție foarte buna in rândul consumatorilor datorita specificațiilor tehnice dar si a dimensiuni ecranului. Acesta sa vândut in peste un milion de unitati in primele doua luni de la lansare.

In anul 2013 in luna octombire Google avea sa lanseze urmatoarea versiune majora a deja faimosului sistem de operare Android versiunea 4.4 aceasta purtand un nume foarte cunoscut si anume „KitKat”. Aceasta versiune a sistemului de operare este cea mai populara intre dispozitivele mobile in ziua de azi, aceasta fiind instalata pe peste 37% din dispozitivele care ruleaza sistemul de operare Android. Tot o data cu lansarea noi versiuni a fost lansat si un nou dispozitiv din gama Nexus a celor de la Google si anume Google Nexus 5. Acesta era produs tot de gigantul sud-coreean LG care si de aceasta data a reușit sa producă un dispozitiv foarte performant la un preț rezonabil , datorita acestui fapt succesul de care sa bucurat succesorul lui Nexus 4 a fost unul foarte bun , acesta vânduse in mult mai bine ca si predecesorul sau.

In vara anului 2014 la conferinta Google I/O a fost anuntata cea mai noua versiune a sistemului de operare Android. Aceasta poarta numele de Android 5.0 Lollipop si urma sa fie disponibila in toamna anului 2014 împreuna cu doua noi dispozitive din gama Nexus acestea fiind un telefon mobil numit Nexus 6 si o tableta Nexus 9. De aceasta data compania nord-americana a decis ca telefonul sa fie produs de compania Motorola deoarece in anul 2012 Google achiziționase compania Motorola. Iar tableta urma sa fie produsa de compania HTC. Aceste 2 dispozitive nu au fost recepționate prea bine de publicului larg deoarece era de așteptat ca Google sa producă dispozitive foarte performante la un preț redus, ceea ce nu sa întâmplat cu aceste doua dispozitive .Prețul unui telefon Nexus 6 fiind de aproximativ de 600 de dolari la lansare ceea ce era aproape dublu de predecesorul sau Nexus 5 care a avut prețul de 350 de dolari la lansare cu un an in urma.

Versiunea Android 5.0 Lollipop a venit cu foarte multe imbunatatiri fata de precedenta pe partea de performanta, consum al bateriei, securitate dar si in partea de interfața utilizator care a fost complet redesenata după un set de instrucțiuni create de Google si poarta numele de Material Design.

Acest set de instrucțiuni a fost creat pentru a oferi utilizatorilor o interfața mai curata si mai simplu de utilizat. Material Design a fost adoptat foarte repede de foarte mulți dezvoltatori de aplicații, care si-au redesenat interfețele aplicațiilor lor in concordanta cu acest set de instrucțiuni.

La începutul anului 2015 compania americana a mai lansat o versiune a sistemului de operare tot sub numele Lollipop. In acest moment cea mai noua versiune a sistemului de operare este 5.1 care a adus doar imbunatatiri pe partea de securitate si pe partea de performanta.

In acest moment se lucrează la o noua versiune a acestui sistem de operare care după cum ne-a obișnuit compania Google in ultimi ani ar putea fi anunțată la conferința de anul acesta a companiei numita Google I/O si va fi disponibila in toamna acestui an. Rămâne doar de văzut in ce fel ne va surprinde compania nord-americana.

Capitolul II

Sistemul de operare Android

In mare parte a existentei lor, telefoanele mobile foloseau sisteme de operare proprietare foarte fragmentate, pentru dezvoltarea de aplicații pentru aceste telefoane mobile dezvoltatorii aveau nevoie de tool-uri speciale pentru fiecare sistem de operare diferit. In sistemul de operare Android aplicațiile native dar si cele dezvoltate de dezvoltatorii terța-parte sunt scrise folosind aceleasi API-uri. Aceste API-uri oferă acces la hardware-ul telefonului, înregistrări video, comunicarea dintre aplicații si grafica 2D si 3D.

-urile sistemului de operare Android sunt foarte puternice, foarte bine documentate, dar pe langă asta acestea beneficează de o comunitate de dezvoltatori in continua expansiune si fară costuri in ceea ce privește dezvoltarea și distribuția aplicațiilor. Cum piata mobila este in continua crestere sistemul de operare android a început sa crească in popularitate , iar acesta oferă o oportunitate interesanta pentru crearea de aplicații inovative pentru dispozitivele mobile .

Dezvoltatorii care programau utilizând cod C sau C++ de nivel jos, erau nevoiți sa cunoască hardware-ul specific fiecărui dispozitiv pe care dezvoltau aplicația, dar aceasta abordare a devenit depășita o data cu evoluarea hardware-lui .

Android oferă o mulțime de posibilitați pentru aplicațiile destinate dispozitivelor mobile fiind bazat pe un kernel Linux open source. Dezvoltatorii au acces la componentele hardware ale dispozitivelor prin intermediul librăriilor de API-uri.

In sistemul de operare Android aplicatiile native cat si cele terta-parte sunt scrise folosind aceleasi librari API. Acestea fiind executate de acelasi mediu de executie.

Arhitectura sistemului de operare Android este formata din 5 layere principale si anume: Linux Kernel, Libraries, Android Runtime, Application Framework si Applications.

Primul layer este Linux Kernel, acest layer este rezervat sistemului, iar datorita acestui fapt programatorul si utilizatorul nu vor folosi acest strat. [1]

Native Libraries este cel de al doilea strat din arhitectura Android. Acesta reprezinta biblioteciile care sunt scrise in limbajul de programare C sau C++. Aceste librari sunt compilate pentru un anumit hardware. Din Native libraries fac parte si bibilotecile care ofera acces la baze de date (SQLite), redarea fisiereleor de multimedia audio-vide (Media Framework) si pentru afisarea fisierelor HTML (WebKit).

Android Runtime contine masina virtuala si biblioteciile java. Toate aplcatiile acestui sistem de operare ruleaza pe o masina virtuala denumita Dalvik, aplicatiile sunt scrise in limbajul de programare JAVA si sunt compilate in bytecode. Fisierele sursa ale aplicatiei de tip .class sunt convertite in fisiere executabile acestea avand extensia „.dex” aceste fisiere executabile sunt speciale pentru masina viurtuala Dalvik. Aceasta conversie are loc datorita faptului ca aplicatiile ruleaza pe un sistem de operare care dispune de o memorie destul de limitata si cu o putere de procesare mai mica fata de cea a unui calculator.

Application Framework este layerul cu care lucreaza direct dezvoltatorul de aplicatii. Acest layer este alcatuit din mai multe componente iar cele mai importante sunt urmatoarele:

Contetnt Providers: furnizeaza accesul la un set structurat de date.

Location Manager: acesta componenta ofera acces la serviceile de localizare GPS

Activity Manager: componenta care controleaza ciclul de viata a aplicatiilor.

Notification Manager: notifica utilizatorul ca ceva s-a intamplat in fundal.

Applications: layerul care reprezinta aplicatile cu care utiizatorul interactioneaza in utilizarea de zi cu zi a dispozitivelor mobile.

Fig 2.1 Diagrama arhitecturii sistemului de operare Android

Cele mai importante componente ale unei aplicatii destinate sistemului de operare android sunt:

Activity(Activitate)

Intent(Intentie)

Service(Serviciul)

Activity (Activitate) aceasta componenta reprezinta interfata cu care se intalneste utilizatorul. O aplicatie poate fi compusa din mai multe activitati: de exemplu o aplicatie de tip Calendar poate avea o activitate pentru afisarea unei luni si una pentru a adauga memouri in calendar.

Fiecare Activitate are propriul ciclu de viata care este diferit de cel al procesului aplicatiei, deoarece o cum am mentionat mai sus o activitate poate sa fie folosita doar pentru a interactiona cu o parte a aplicatiei. Ciclul de viata a unei activitati este format din mai multe stari,si descrie starea pe care o poate avea o activitate la un moment dat:

Running – aceasta este starea care reprezinta ca activitatea a fost creata si este afisata pe ecran,daca activitatea a mai fost pornita inainte este posibil ca aceasta activitate sa fi fost salvata,in acest caz activitatea este repornita din momentul in care a fost salvata,acest lucru se intampla cand aplicatia nu a fost inchisa de tot si ea a ramas sa ruleze in background.

Paused – o activitate este in starea paused atunci cand dispozitivul pe care ruleaza intra in starea sleep sau in cand se porneste o alta activiate in timp ce prima activitate este rulata. Activitatiile in starea paused in continuare sunt incontinuare mentinute pe ecran dar ele au o prioritate mai mica in Android Activity Stack. Activitatiile in starea de pauza vor fi inchise doar in cazul in care activitatea cu prioritatea princiopala are nevoie de multe resurse pentru a rula fara nici o problema.

Stopped – in starea stopped o activitate nu mai este afisata pe ecran deoarece ea nu mai este folosita. Activitatea exista in continuare dar va trebui repornita .

Dropped – este ultima stare in care poate fi o activitate. Aceasta este starea in care activitatea este oprita si memoria dispozitivului este eliberata.

Fig 2.2 Ciclul de viata al unei activitati.

Orice activitate trebuie sa contina anumite functii predefinite pentru a putea trece dintr-o stare in alta. Aceste functii fac parte din bibliotecile predefinite android si sunt functiile fara de care o activitate nu ar putea exista:

onCreate()- aceasta functie este doar o data apelata doar cand activitatea este creata.Aceasta functie ar trebui apelata doar o singura data in ciclul de viata a unei activitati.

onStart()- functia este apelata doar in momentul cand activitatea devine vizibila pentru utilizator.Aceasta functie poate fi apelata de mai multe ori in ciclul de viata a unei activitati.

onResume()- este apelata cand activitatea trece din rularea in background in foreground, si devine vizibila utilizatorului.In acest moment activitatea este cea mai prioritare in Activity stack si utlizatorul poate interactiona cu ea.

onPause()- este apelata cand o alta activitate devine prioritara.

onStop()- este functia care esete apelata la iesirea din activitate. Aceasta aplicatie opreste activitatea deci aceasta nu va mai fi afisata pe ecranul device-ului. Aceasta este similara cu funcia onPause() dar la functia onStop utilizatorul nu mai vede deloc activitatea.

onRestart()- aceasta functie este similara cu functia onCreate() dar functia onRestart() este apelata doar dupa functia onStop. Prin acasta metoda dezvoltatorul poate vedea daca activitatea porneste de la inceput sau doar se restarteaza.

onDestroi()- aceasta este o functie care va fi apelata cand activitatea va fi oprita. Este ultima functie apelata din ciclul de viata a unei acitivtati. De fiecaredata cand utilizatorul apasa butonul Back pe oricare activitate este activa pe ecran aceasta din urma fiind oprita si va fi afisata activitatea trecuta.

Chiar daca intodeauna ar trebui sa folosim onPause() si onStop pentru a elibera resurse,functia onDestroy este ultima sansa de a elibera resurse inainte ca o activitate inceteaza din executie.

A doua mare componenta este Intentul sau intentiea. Intentul este un obiect care poate cere actiuni din partea altor componente ale aplicatie cum ar fi activity si serviciul. Intentul se foloseste in principal pentru a porni o activitate, un serviciu sau a livra un mesaj catre orice aplicatie.

Pentru a porni o Activitate trebuie doar sa ii trimitem un Intent functiei startActivity(), iar acesta descrie activitatea si ii trimite toate datele necesare pentru a porni. Daca se doreste un raspuns din partea activitatii dupa ce aceasta sa terminat trebuie apelata functia startActivityForResult(). Activitatea primeste raspunsul sub un alt obiect de tip Intent in functia onActivityResult().

Pentru a porni un serviciu este nevoie de a trimite un Intent functiei startService(), iar intentul transmite datele pentru pornire serviciului.

Pentru a trimite un mesaj la orice aplicatie se poate folosi functia sentBroadcast() sau sendOrderedBroadcast().

Serviciul este componenta care ruleaza in background si nu are o interfata grafica. Alta componenta poate porni un serviciu si acesta va rula in background chiar daca utilizatorul schimba aplicatia, acest lucru se intampla in timpul descarcari de fisiere si utilizatorul incepe sa utilizeze alta aplicatie in timp ce asteapta ca fisierul sa fie descarcat. O componenta poate fi legata la un serviciu , poate interactiona si poate transmite date intre procese. De exemplu un serviciu poate reda muzica, poate efectua transmisii de date sau poate interactiona cu o componeta, in timp ce el ruleaza in fundal.

Prin intermediul serviciilor se potate accesa dintr-o aplicatie si anumite module hardware precum Bluetooth, NFC, Wi-Fi , etc.

2.1 Caracteristii si specificati a sistemului de operare android

Sistemul de operare android este foarte divers din punct de vedere al caracteristicilor si specificatiilor. O caracteristica foarte importanta este versatilitatea pe care o are in diversitatea hardware-lui pe care il suporta, din acest motiv avem mai o multitudine de producatori de deviceuri care ruleaza sistemu de oparare produs de Google.

O alta caracteristica este conectivitatea diversa aceasta suporta o multitudine de tehnologi precum WiFi, Bluetooth, NFC, GSM, CMDA ,etc.

O alta caracteristica importanta pentru dezvoltatori este mediul de dezvoltare acesta continand un emulator pentru dispozitive, unelte pentru optimizare a memoriiei , unelte pentru depanare samd. Mediul de dezvoltare putand fi ales dupa preferintele dezvoltatorului acesta putand fi Eclipse prin intermediul unu plug-in sau mediul de dezvoltare oficial Android Studio care este produs de compania IntelliJ.

Mesageria instant este alta caracteristica foarte importanta aceasta permitand trimiterea de mesaje text de tip SMS sau mesaje multimedia de tip MMS.

Suportul media este si el foarte diversificat acesta permitand redarea de fisiere audio-video si imagine de mai multe tipuri precum: MPEG-4,H.264, MP3,AAC,OGG, AMR, JPEG, PNG, GIF.[1]

Browser-ul Web al sistemului de operare este bazat pe WebKit aceasta fiind o platforma open-source.[1]

Multi-touchul acesta este tehnologia folosita la ecranul dispozitivului si permite receptarea de pana la 10 inregistrari diferite din partea utilizatorului.[1]

2.2 Masini virtuale disponibile in Android

In primele versiuni ale sistemului de operare Android, exista doar o masina virtuala, aceasta fiind numita Dalvik. Odata cu versiunea a 4.4 a sistemului de operare intitulat si KitKat a fost introdusa o noua masina virtuala numita Runtime ART pentru moment in teste, aceasta urmand sa ii ia locul masinii virtuale Dalvik in urmatoarea versiune majora Android 5.0 Lollipop.

2.2.1 ART vs Dalvik

Ca o parte din Android 4.4 , Google a decis introducerea unei noi modalitati de a executa aplicatiile in sistemul de operare Android. Aceasta noua masina virtuala poarta numele de ART si este un poriect care dureaza de 3 ani , si care se presupune in a aduce inbutantatiri in performanta device-lor care ruleaza sistemul de operare produs de Google.

Noua modalitate de a compila aplicatiile a fost testata pentru inceput doar pe dispozitivele ce foloseau procesoare de tip „Snapdragon”, aceastea fiind produse de compania Qualcom. Optiunea de a comuta intre aceste masini virtuale era ascunsa in meniul optiuniilor pentru dezvoltatori de pe dispozitivele care erau compatibile cu aceasta noua tehnologie.

Aceasta noua masina virtuala functioneaza pe premisa ca deviceurile moderne au procesoare si memorii destul de performante mai ales in comparatie cu primele dispozitive care ruleaza Android.

Aplicatiile android sunt compilate in bytecode Dalvik , acesta este portabil spre deosebire de codul nativ. Pentru a putea fi rulate aplicatiile pe un dispozitiv aceaste trebuie compilate in cod masina.

Dalvik este bazat pe compilare JIT(just in time), ceea ce inseamna ca de fiecare data o parte a codului este necesara pentru executie, si va fi compilata in acel moment, iar pe parcursul ce utilizatorul foloseste aplicatia si urmatoarele parti ale codului sunt compilate si se memoreaza in memoria cache, ca sistemul sa poata refolosi in caz de nevoie. JIT foloseste mai putina memorie de pe dispozitiv deoarece compileaza doar o bucata de cod o data.

Masina virtuala ART compileaza codul o data cu instalarea aplicatiei aceasta face ca intarzierile aparute in aplicatie in timpul utilizari sa fie aporoape inexistente. Fara a fi nevoie de compilare a codului in timpul rularii aplicatiei , codul ar trebui sa fie exacutat mult mai rapid.

Pe langa imbunatatirea performantelor utilizarea ART , consuma mai putine resurse ale procesorului fata de compilarea masinii virtuale Dalvik. Reducerea consumului de resurse duce implicit la cresterea duratei de viata a bateriei, care este un mare plus in dispozitivele portabile.

Fig 2.3 Comparatia intre Art si Dalvik

Partile defavorabile ale masinii virtuale sunt ca codul masina necesita mai multa memoie de stocare decat bytecode, procesul de instalare dureaza un pic mai mult deoarece codul este precompilat si instalat in acelasi timp. Ceea ce se translateaza in ocuparea mai multe resurse de memorie la timpul executiei si mai putine aplicatii pot rula in acelasi timp pe un dispozitiv.

Dispozitivele din primele generati de android dispuneau de resurse limitate in ceea ce priveste memoria si spatiul de stocare, din aceasta cauza a fost preferata masina virtuala Dalvik fata de cea Art, dar in ultimul timp dispozitivele mobile dispun de resurse din ce in ce mai multe, utilizarea masini virtuale Art ar fi urmatorul pas inainte .

In cea mai noua versiune de Android 5.0 Lollipop masina virtuala Dalvik a fost inlocuitata total de cea ART , acesta fiind optimizat astfel in cat sa consume cat mai putine resurse si ca as inbunatateasca durata de viata a bateriilor de pe dispzitivele mobile.

Capitolul 3

In acest capitol vom vorbi despre aplicatia pe care am ales sa o dezvolt pentru lucrarea de licienta.

Platforma Android pune la dispozitie resurse pentru redarea multimedia, pe care dezvoltatorii pot sa le foloseasca la crearea de aplicati in acest scop. . Aplicatia este folosita pentru a reda fisiere audio de pe memoria interna a dispozitivelor Android. Aceasta aplicatie va afisa o lista de melodi din memoria telefonului din care utilizatorul poate sa selecteze melodia pe care o doreste sa o asculte. Aceasta aplicatie va mai beneficia de butoane cu care utilizatorul poate sa interactioneze, si va putea reda melodiile chiar daca utilizatorul a iesit din aplicaatie avand o notificare in bara de notificari a telefonului.

Pentru a dezvolta o aplicatie pentru sistemul de operare android avem nevoie de cateva untelte inainte de a incepe dezvoltarea proprouzisa . In primul rand avem nevoie de un IDE (Integrated Development Enviroment), acesta poate sa fie Eclipse cu plug-in-ul Android Development Tools(ADT), sau IDE-ul oficial Android Studio, acestea pot fi descarcate de pe siteurile producatorilor acestor toolui. Fiecare dezvoltator poate sa isi aleaga IDE-ul preferat. O a doua componenta avem nevoie de o masina virtuala JAVA , vom avea nevoie de JAVA Runtime Enviroment(JRE) dar si de JAVA Software Development Kit (JDK). Aceasta din urma continand pe langa JavaDocs, Java Debuger , compilatoare si Java Runtime Enviroment. Masina virtuala JAVA poate fi descarcata de pe site-ul producatorului, ORACLE.

Pentru dezvoltarea aplicatiei mele eu am ales IDE-ul Eclipse la care am adaugat plug-in-ul ADT.

Vom incepe prin crearea unui nou proiect. Dupa crearea proiectului IDE-ul a creat deja o clasa Activity aceasta fiind activitatea principala pe care o vom folosi. Pe langa aceasta clasa IDE-ul va crea si restul de fisiere necesare precum fisierele pentru layout-ul interfetei grafice , fisierul in care vom adauga permisile aplicatiei etc. Pentru aceasta aplicatie am folosit API-ul de nivel 16 aceasta insemnand ca aplicatia va rula pe toate dispozitivele care ruleaza cel putin versiunea Android 4.1(JellyBean) , ceea ce inseamna ca aplicatia va fi disponibila pentru aproximativ 80% din dispozitivele care ruleaza sistemul Android.

Fig 3.1 Graficul cu popularitatea versiunilor android.[3]

Dupa crearea proiectului in care vom lucra de acum in inainte va fi nevoie ca noi sa adaugam permisiunile de care are nevoie aceasta aplicatie. Adaugarea permisiuniilor se face in fisierul din mroiectu nostru numit AndroidManifest. Acest fisier este de tip XML, asa ca vom fi nevoiti sa scriem in acest fisier in limbajul XML.

Pentru inceput vom adauga o singura permisiune aici si vom adauga pe parcurs ce vom avea nevoie de ele.

Prima permisiune adaugata este:

<uses-permission android:name="android.permission.WAKE_LOCK" />

Aceasta permisiune este necesara pentru redarea melodiilor si cand telefonul este in stare de stand by.

In timpul adaugarii permisiuni noastre vom observa ca in acest fisier sunt deja adaugate niste permisiuni standard , acestea fiind automat create pentru activitatea ce am creato la inceput.

<activity

android:name="com.example.musicplayer.MainActivity"

android:label="@string/app_name"

android:launchMode="singleTop"

android:screenOrientation="portrait" >

Aceaste permisiuni sunt pentru numele aplicatiei , orientarea ecranului si modul de pornire.

Pentru aceasta aplicatie am hotarat sa nu schimb rientarea ecranului (screenOrientation), lasand-o in modul portret. Modul de pornire (launchMode) este permisiunea care permite ca sa ne intoarcem la aplicatie dupa ce am pornit alta aplicatie fara a o inchide.

In continuare vom descide fisierul de layout aflat in foderul de resurse. Acesta este numit „activity_main” si se afla in folderul layout. Acest fisier este to de tipul XML deci prin urmare vom utiliza acelasi limbaj ca si in fisierul pentru permisiuni. In acest fisier sunt descrise dimensiunele ecranului care va fi utilizat de aplicatie, tipul de layout pe care il are aplicatia. Am folosit tipul de layout LinearLayout deoarece acest tip faciliteaza afisarea pe o singrua coloana sau un singur rand. Deoarece dezvoltam o aplicatie ce va fi un player de melodi aceast tip de layout este cel mai potrivit. In interiorul acestui layout vom adauga un „ListView” acesta ne va permite sa afisam melodiile sub forma de lista.

<ListView

  android:id="@+id/song_list"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content" >

</ListView>

Vom crea si un meniu in care vom adauga doua butoane. Unu pentru redarea aleatorie a melodiilor din lista utilizatorilor si altul pentru iesirea din aplicatier. Aceasta vor fi adugate intrun nou fisier XML. Aceasta se afla in pachetul cu resurse in folderul menu.

Vom denumi fisierul pentru meniu „menu” in acest fisier vom adauga definitiile celor doua butoane pentru redare aleatorie si pentru iesirea din aplicatie.

<item

    android:id="@+id/action_shuffle"

    android:icon="@drawable/rand"

    android:orderInCategory="1"

    android:showAsAction="always"

    android:title="Shuffle"/>

  <item

    android:id="@+id/action_end"

    android:icon="@drawable/end"

    android:orderInCategory="2"

    android:showAsAction="always"

    android:title="End"/>

Urmatoarea functie va cauta pe dispozitivul utiizatorului dupa melodiile pe care le are stocate in memorie. Pentru aceasta vom creea o noua clasa numita Song. Vom declara trei variabile care vor fi in care vom stoca datele pentru fiecare melodie gasita in memoria de stocare . Aceste variabile vor fi declarate private una va fi de tipul long iar celalalte vor fi de tipul String.

private long id;

private String title;

private String artist;

In continuare am declarat o metoda care sa instantieze variabilele declarate mai sus.

public Song(long songID, String songTitle, String songArtist) {

id=songID;

title=songTitle;

artist=songArtist;

}

Dupa declararea metodei declara metodele GET pentru metoda noastra.

public long getID(){return id;}

public String getTitle(){return title;}

public String getArtist(){return artist;}

Dupa crearea clasei pentru preluarea melodiilor vom incpe dezvoltarea activitatii principale a aplicatiei. Vom incepe prin importarea biblioteciilor de care vom avea nevoie pentru aplicatia dezvoltata. Aici vom adauga unele biblioteci standard pentru Java si unele specifice androidului.

Melodiile gasite pe dispozitivul utilizatorului vor fi stocate intr-un ArrayList deci prin urmare vom avea neovie de bibiloteca care contine acest tip de lista si anume
„java.util.ArrayList”. Vom mai avea nevoie de biblioteca specifica android „android.widget.ListView” aceasta fiind necesara pentru afisarea listei cu melodi. Pentru stocarea melodiilor intr-o lista si afisarea lor intr-un „ListView” vom avea nevoie sa declaram o lista in care vor fi stocate melodiile.

songList = new ArrayList<Song>();

Vom creea o noua functie care va ajuta metoda noasta a preia melodiile de pe dispiozitivul utilizatorului. Aceasta va fi declarata tot in activitatea principala si va avea numele de getSongList().

public void getSongList() {

   //retrieve song info

}

In interiorul acestei functii vom crea o instanta a „ContentResolver” care va prelua URI-ul fisierelor ce vor urma a fi redate. Cu ajutorul acestui ContentResolver vom crea un cursor care va cauta melodiile de pe memoria de stocare a dispozitivului pe care va fi instalata aplicatia.

ContentResolver musicResolver = getContentResolver();

Uri musicUri=

android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

In continuare vom parcurge rezultatele generate de cursorul nostru si vom adauga melodiile in lista noastra.

if(musicCursor!=null && musicCursor.moveToFirst()){

  //get columns

  int titleColumn = musicCursor.getColumnIndex

    (android.provider.MediaStore.Audio.Media.TITLE);

  int idColumn = musicCursor.getColumnIndex

    (android.provider.MediaStore.Audio.Media._ID);

  int artistColumn = musicCursor.getColumnIndex

    (android.provider.MediaStore.Audio.Media.ARTIST);

  //add songs to list

  do {

    long thisId = musicCursor.getLong(idColumn);

    String thisTitle = musicCursor.getString(titleColumn);

    String thisArtist = musicCursor.getString(artistColumn);

    songList.add(new Song(thisId, thisTitle, thisArtist));

  }

  while (musicCursor.moveToNext());

}

Pentru inceput am verificat rezultatele obtinute sunt valide iar apoi am primit sub forma de coloane indexi si datele fiecarei melodi in parte. Am folosit aceste date pentru a crea obiecte de tip Song, si a le aduga in lista de melodi.

AFISAREA MELODIILOR DE AICI IN COLO.

Similar Posts