Gestionarea Informatiilor Vizuale. Aplicatie de Galerie Foto
Gestionarea informațiilor vizuale. Aplicație de galerie foto
Introducere
Lumea noastră este infinit de complexă din punct de vedere vizual. Complexitatea vizuală a fost mereu un factor predictor al preferințelor omului pentru lucrările de natură artistică și anume a fotografiilor. De aceea, prin tema aleasă, am încercat să cuprind o gamă largă de facilități ale unei galerii foto prin complexitatea sa de a realiza o aranjare automată a tuturor fotografiilor în funcție de evenimente, dată, oră, locație, dimensiune și rating. Prin gestionarea informației vizuale încerc să determin o galerie de imagini cu continut static care completează gama facilităților multimedia din ziua de azi prin examinarea albumelor (slideshow) cu cele mai bune efecte de calitate și prin accesarea rapidă a pozelor pe dispozitiv Android.
Alegerea acestei teme mă stimulează prin a mă documenta și a învăța cât mai mult despre sistemul de operare Android care a devenit atât de semnificativ și important în viața fiecărui om pasionat de tehnologie și telefonie mobilă. Cei mai mulți oameni folosesc smartphone-uri cu cameră foto tot mai performantă pentru a face fotografii cât mai clare, ceea ce m-a determinat în totalitate să încerc să creez o aplicație de galerie foto complexă si ușor de folosit pentru toți utilizatorii de telefonie mobilă.
Motivația acestei lucrări este în principal pasiunea mea pentru de a face fotografii profesioniste pe care apoi le modific adaugandu-le efecte de luminozitate, contrast, netezire și pe care le păstrez ca amintire. De accea, aceasta aplicație aș vrea să aibe ca scop păstrarea și organizarea fotografiilor într-o galerie foto după anumite criterii despre care voi vorbi în capitolele urmatoare.
Ca și mediu de dezvoltare pentru aplicația Android am folosit Android Studio care este bazat pe platforma IntelliJ IDEA. Programul permite programatorilor pasionați de Android să scrie cod în limbajul Java controlându-l prin intermediul bibliotecilor Java dezvoltate de Google, iar cu ajutorul XML-urilor am creat interfața grafică care m-a ajutat la crearea design-ului aplicației.
Această lucrare este alcătuită din patru capitole ample în care voi scrie despre limbajul de programare folosit, tehnicile folosite, despre sistemul de operare Android și bibliotecile folosite, descrierea și structura aplicației, iar pe langă aceste patru capitole voi mai avea concluzii și tendințe de viitor, bibliografie și anexe.
Capitolul 1. Istoria și evoluția fotografiei
Acest capitol detaliază istoria fotografiei de-a lungul anilor, prin proveniență și dezvoltare, despre primele încercări ale fotografiilor, evoluția ei până in ziua de azi, despre apariția primei fotografii color și primei fotografii digitale și conceptul de prelucrare a fotografiilor.
Proveniență și dezvoltare
Termenul de fotografie are o multiplă semnificație și provine din limba greacă, „photos” însemnând lumină, iar „graphein” a desena. Tehnica fotografică cuprinde multe varietăți de creare a unor imagini printr-o acțiune a luminii sau a altor forme, sau prin tehnici de captare a imaginilor prin mijloace electronice.
În ziua de azi, fotografia joacă un rol foarte important în societate, care poate fii manifestat prin anumite forme ca arta sau chiar un hobby, o pasiune intensă pentru fiecare om. Fotografia poate fii folosita în publicitate, documentare, fotojurnalism și în multe alte domenii și nu în ultimul rând pentru a le păstra ca amintiri simbolice cuprinzând parcurgerea vieții noastre imprimată în poze.
Istoria dezvoltării fotografiei arată că în secolul al XIX-lea, fotografia aparținea de domeniul profesioniștilor, deoarece atunci existau doar aparate mari și plăci de sticlă, iar apoi la începutul secolului XX, această industrie a fotografiei a captat atenția unui public larg deoarece au început să apară aparate foto protabile și totodată și introducerea rolfilmului. În zilele noastre, pentru cei pasionați de fotografii și fotografilor profesioniști, au apărut o gamă largă de aparate foto care sunt din ce în ce mai performante făcându-ne viața mai ușoară fiind ușor de utilizat.
Fotografia, în general, se bazează pe principii fizice și chimice deoarece au proprietățiile unor cristale de argint, compuși chimici ai argintului și a unor halogeni care sunt sensibili la lumină. Cristalele se găsesc la rândul lor sub formă de emulsie, ele aflându-se in filmul fotografic. Compușii argintului au o sensibilitate mare la lumină, sensibilitatea fiind un principiu fizic care guvernează fizica luminii.
Dezvoltarea proceselor fotografice are ca început, recunoasterea faptului că unele substanțe chimice din natură își schimbau culoarea când erau expuse la lumină. După anii 1820, oamenii de știință, pricepuți la crearea aparatelor de fotografiat, au început anumite cercetări pentru a reuși o fixare permanentă a imaginii obținută prin expunerea la lumină. Pe parcursul anilor și până în viața de zi cu zi, oamenii de știință au îmbunătățit procedeele chimice și optice ale proceselor fotografice.
Figura 1.1. Aparat foto din secolul XIX [1]
1.2. Pimele încercari ale fotografiilor
Există trei fenomene necesare pentru a obține imagini fotografice, care sunt deasemenea cunoscute de mult timp. S-a știut încă de pe vremea lui Aristotel cum se poate pune realitatea într-o cutie unde este suficient să se facă o gaură ca să apară o imagine reala inversată în interiorul cutiei obtinându-se astfel așa-numita camera obscură. Alchimiștii, pe de alta parte, știau că lumina înnegrește clorura de argint. A trea contribuție îi revine lui John Herschel, care în 1819, a devenit “fixatorul” fotografiei.
Una dintre cele mai vechi fotografii care s-a păstrat este din 1826 sau 1827, fiind imaginea unei curți interioare văzute de la fereastra sa de francezul Joseph Nicéphore Niepce, iar expunerea acestei poze a durat în jur de 8 ore.
Mai apoi, în 1884, George Eastman reușește să realizeze primul negativ flexibil, cunoscut sub numele de roll film care era ușor de manipulat și cu aceleași proprietăți fotografice ca și ale plăcii de cristal. Datorită acestuia, greutatea și volumul unui aparat de fotografiat se micșorează putând la fel de ușor să fie și transportat.
1.3. Evoluluția fotografiei
De-alungul timpului, fotografia a evoluat foarte mult, progresele urmând trei direcții principale. În prima fază, a fost reducerea duratei de expunere și mărire a sensibilității filmului și stabilității imprimării. Apoi, datorită simplificării tehnicilor, aparatele de fotografiat erau din ce în ce mai mici și mai ieftine.[1]
1.4. Fotografia color
Însă idea de fotografie color a aparut incă de de la apariția invenției fotografiei. Prima fotografie în culori permanente a fost făcută în 1861 de către James Maxwell. Autochrome Lumière a fost primul sistem color care a apărut pe piață prin 1903, acesta fiind un sistem de fotografie color transparentă. Acest procedeu de fotografiere se făcea pe trei plăci fotografice alb-negru îmbinate cu niște substanțe cromatice sensibile numai la culorile de roșu, albastru și verde. Cele trei fotografii transparente rezultante erau suprapuse, ele rezultând o fotografie color transparentă.
Fotografiile instantanee au apărut în 1948 și erau cunoscute sub numele de Polaroid, fotografiile fiind la început în alb-negru, iar apoi în culori din 1962.
1.5. Fotografia digitală
Conceptul de fotografie digitală a fost ultimul în dezvoltarea științei fotografice. Camerele digitale înregistrează în memoria lor digital fotografia, ca mai poi să poată fi transferata pe alte suporturi magnetice existente pe atunci sau pe hârtie. Cu toate acestea existau niște avantaje printre care cel mai important fiind spațiul incomparabil mai mare de păstrare a fotografiilor.
În decurs de 10 ani, aparatele de fotografiat digitale, au devenit articole care se cumparau din ce în ce mai mult, prețul componentelor electronice scăzând și calitatea imaginilor digitale crescând, iar ce aceea ajunsese un produs de consum uzual.
Prin anul 2004, au început să nu se mai fabrice aparatele foto reîncărcabile cu film de 35 mm, insă fotografia „udă” continuând să existe deoarece atâta timp cât fotografii artiști talentați mai vroiau profitau de aceste posibilități.
1.5. Conceptul de imagine digitală
Reprezentarea unei imagini reale bidimensionale sau mai exact imagine în 2D sau două dimensiuni ca o mulțime finită de valori digitale, se numește imagine digitală, iar daca a fost prinsă printr-un procedeu fotografic se mai numește si fotografie digitală.
Imaginile analogice sunt împărțite, mai întâi, în numeroase elemente infime, numite pixeli, sub formă de raster graphic sau hartă de tip raster, primind fiecare pixel niște coordinate plane. Coordonatele imaginilor împreună cu caracteristicile de luminozitate și culoare a fiecărui pixel, sunt codificate conform mai multor sisteme, având ca rezultat final al digitalizării u nșir de de numere care sunt memorate cu ajutorul calculatoarelor. Imaginile digitale si pixelii lor, de obicei, sunt stocate în memorii de computere, benzi magnetice sau video digitale. Pixelii și imaginile digitale nu se pot vedea fiindcă ele sunt doar însiruiri de numere.
Imaginile, pentru a ocupa mai puțin loc în memorie, pot fi stocate sau transmise sub forme comprimate, iar apoi să fie decomprimate la destinație după anumite necesități. Cu aparatele de fotografiat digitale, aparate de filmat digitale, scanere de imagine, mașini de măsurat coordinate, radere aeriene și multe alte dispozitive tehnice putem crea imaginile digitale.
Pixelii și imaginile digitale, deși nu pot fi vizualizate în mod nemijlocit, scopul lor este până la urmă tot pentru obținerea unor imagini reale, care pot fi văzute de om și care se realizează cu ajutorul unor dispozitive tehnice, cum ar fi imprimantele, proiectoarele de imagini, ecranele (display-urile) de calculatoare, etc.
Procesarea imaginilor digitale este un domeniu care studiază algoritmii transformărilor numerice ale pozelor în vederea obținerii efectelor dorite.
Figura 1.2. Prima imagine digitală prelucrată digital cu urmatoarele ajustări de: “crop”(decupare și reîncadrare), “fill-light”, “autocontrast”, “sharpen”(mărirea calității), “saturația culorilor”, “straighten”, “tunning” și “shadows”.[1]
Figura 1.3. Fotografia digitală versiunea originală, neprelucrată.[1]
1.5.1. Tipuri și formate de imagini digitale
Imaginile digitale au diferite forme și mărimi, iar cele mai des folosite sunt formele dreptunghiulare, care se reflectă și la formele ecranelor de Tv, cinema, calculatoare și așa mai departe. Formele dreptunghiulare sunt exprimate în pixeli și anume prin numărul de pixeli pe orizontală și verticală sau lungime și lățime, iar raportul dintre lungime și lățime este de obicei formatul imaginii digitale.
Semnalele digitale pot fi clasificate conform numărului și naturii valorilor semnaluilui în: binare (di- sau bi-nivel), scală gri, color, multi spectrale și tematică. Termenul de imagine digitală se aplică și datelor care sunt asociate cu punctele unei regiuni tridimensionale, sau de echipamente precum: camere de luat vederi, aparate de fotografiat speciale pentru trei dimensiuni. Fiecare element al imaginii 3D are trei coordonate și poartă numele de voxel (acromim care este provenit de la „volumetric pixel”).
1.5.2. Vizualizarea și prelucrarea imaginilor digitale
Imaginile digitale sunt de mai multe tipuri și anume: JPEG, GIF și PNG, ele putțnd fi prezentate pe un display prin anumite mijloace. Mai există și formatul SVG care este utilizat tot mai frecvent și este un format standard al organizației W3C (World Wide Web Consortium – consorțiu internațional).
Pe de-o parte, programele special de vizualizare a imaginilor digitale sunt numite viewers și oferă posibilitatea de a prezenta mai multe imagini într-o anumită ordine prin “slideshow utility”. Pe de altă parte, imaginile digitale mai pot fi stocate pe benzi video care sunt de obicei imagini în mișcare, putând fi vizualizate cu ajutorul aparatelor sau programelor numite video player. Aceste programe transformă imaginile în semnale pentru monitor de calculator sau de TV pentru a putea fi vizualizate.
O modalitate de prelucrare a imaginii este prin calibrare. Calibrarea geometrică, fotometrică sau senzorială sunt elemente importante ale prelucrării digitale a imaginilor. Fiecare imagine este recomandată să fie întotdeauna corect calibrată în mod profesionist. În ziua de azi există o mulțime de programe care prelucrează imaginile digitale dupa bunul nostru plac precum: ajustare sau optimizare a culorilor, contrastului și a luminozității, schimbarea selectivă a culorii, decupare (cropare), rotirea unei imagini, plasare într-o anumită ramă, mărirea sau micșorarea dimensiunii sau rezoluției imaginii, comprimare, mărirea sau micșorarea clarității, efecte de fotomozaic, îndepărtarea elementelor nedorite și multe alte efecte artistice. [2]
Capitolul 2. Limbajul de programare JAVA
Java este un limbaj de programare orientat-obiect, puternic tipizat și a fost lansat de către James Gosling la Sun Microsystems (astăzi finnd firma Oracle) la începutul anilor ’90, mai exact în 1995. Cea mai mare parte a sintaxei de programare Java este moștenită de C++, dar unele din conceptele de programare obiectuală prezente în Java iși au rădăcinile in limbaleje SmallTalk și Lisp. Cele mai multe aplicații distribuite sunt scrise în Java permițând noilor evoluții tehnologice utilizarea sa și pe dispozitive mobile, creându-se asfel o platformă unică. În prezent, limbajul Java, este utilizat cu succes și pentru programarea aplicațiilor destinate intra-neturilor.
2.1. Istoria limbajului Java
Anul 1991: în cadrul companiei Sun Microsystems începe dezvoltarea unui proiect pentru aparatură electronică inteligentă conectată în rețea;
În anul 1992: începe dezvoltarea limbajului de programare Oak (James Gosling);
Anul 1993: devine disponibil primul browser WWW (World Wide Web) Mosaic; dezvoltarea unui web-browser (Webrunner), capabil să încarce și să execute programe mici scrise în Oak;
În anul 1994: Oak este redenumit Java iar Webrunner, HotJava;
În anul 1995: Netscape decide să integreze Java în Netscape Navigator 2.0
;
În ianuarie 1996: apare JDK 1.0 (soft gratuit);
În februarie
1997: apare JDK 1.1;
În martie 1997: apar HotJava 1.0 și JavaOS 1.0;
În anul 1998 Java Foundation Classes JVC released, incluzând Swing 1.0 ;
După anul 1999 apar versiuni noi ale JDK;
În prezent s-a ajuns la JDK 1.8.
2.2. Introducere în limbajul Java
Cu trei ani în urmă, cuvântul Java ducea cu gândul la o insulă indoneziană sau la o ceașcă de cafea fierbinte. Astăzi, oricine a citit o pagină World Wide Web, o revistă din domeniul informaticii știe și despre un alt fel de Java, un limbaj de programare inventat de Sun Microsystems (Oracle), limbajul de programare ajungând cunoscut pe la sfârșitul anului 1995.
Java este un limbaj de programare adecvat pentru proeiectarea de software dedicat lucrului în internet. De asemenea, este un limbaj de programare orientat-obiect, care folosește o metodologie ce devine din ce în ce mai folositoare în lumea proiectării de software. Este un limbaj independent de platformă (cross-platform), însemnând că programele pot fi proiectate să ruleze în același fel pe Microsoft Windows, Apple și majoritatea versiunilor de Unix. Java se extinde și dincolo de calculatoarele de birou, putând fi executat pe dispozitive cum ar fi televizoare, telefonie mobilă, ceasuri de mână, etc.
Java se aseamănă mai mult cu limbajele de programare populare, cum ar fi c, C++, C#, Visual Basic sau Delphi, decât cu limbajele de descriere a paginilor, cum este HTML sau cu limbaje pentru script-uri, cum este JavaScript. [4]
2.2.1. Destinat funcționării în Web
Java este renumit pentru capacitatea sa de a rula în pagini World Wide Web. Browserele precum Internet Explorer, Google Chrome, Opera Mini, Mozila Firefox, pot să încarce un program Java dintr-o pagină Web și să-l execute local pe sistemul utilizatorului.
Aceste programe, denumite applet-uri, sunt înglobate într-o pagină Web într-un mod asemănător unei imagini. Applet-urile pot fi folosite pentru a crea animație, jocuri, figuri, forme care răspund imediat la acțiunea utilizatorului sau alte efecte interactive pe aceleiași pagini Web.
Applet-urile sunt încărcate din World Wide Web ca pagini HTML, imagini sau alte elemente ale unui site Web. Ele sunt scrise in limbajul Java, apoi sunt compilate într-o formă ce poate rula ca program și plasate pe serviciul Web.
Cu toate că, applet-urile reprezintă cea mai populară utilizare a limbajului Java, ele reprezintă doar una din modalitățile în care poate fi folosit limbajul. Ca și Visual C++ sau Visual Basic, Java este un limbaj robust, care poate fi folosit pentru a dezvolta o gamă largă de software, care suportă interfețe utilizator grafice, comunicație prin rețea, conectivitate cu baze de date și alte utilizări sofisticate. Pentru a le deosebi de applet-uri, progamele Java care nu rulează într-un browser Web sunt numite aplicații.
2.2.2. Java este independent de platformă
Independența de platformă oferă posibilitatea ca un același program să ruleze pe diferite platforme sau sisteme de operare. Este unul dintre cele mai semnificative avantaje pe care Java le are asupra altor limbaje de programare.
Programele Java își dobândesc această independență folosind o mașină virtuală, un fel de calculator într-un alt calculator. Mașina virtuală preia programele Java compilate și le convertește instrucțiunile în comenzi inteligibile pentru sistemul de operare. Același program compilat, care există într-un format denumit bytecode, poate rula pe orice platformă și sistem de operare care posedă o mașină virtuală Java. Mașina virtuală mai este cunoscută și ca interpretor Java sau executor (runtime) Java.
De asemenea, Java este independent de platformă la nivel sursă. Programele java sunt salvate drept fișiere text înainte de a fi compilate, iar aceste fișiere pot fi create pe orice platformă care suportă Java.
Mașina virtuală se poate găsi în mai multe locuri. Pentru applet-uri, mașina virtuală este fie înglobată într-un browser care suportă Java, fie instalată separat, pentru a fi folosită în browser.
Aplicațiile Java, pe de altă parte, pot rula într-un sistem unde a fost instalată mașina virtuală Java corespunzătoare. Pentru Java există un oarecare impact asupra performanței, deoarece programele Java se execută mai lent decât limbajele compilate dependente de platformă, cum ar fi C, iar această diferență de viteză este principalul dezavantaj al Java. Însă, unele instrumente de dezvoltare Java conțin compilatoare rapide (just-in-time), care pot executa bytecode Java la o viteză mai mare.
Figura 2.1. Mecanismul de execuție a unei aplicații Java [3]
2.2.3. Java este orientat obiect
Programarea orientată obiect (Object Oriented Programming – OOP) este o modalitate de a modela un program drept un set de obiecte aflate în interacțiune. Pentru unii, reprezintă chiar o modalitte de a organiza programele, astfel, orice limbaj poate fi folosit pentru a crea programe orientate obiect.
Totuși, se obțin beneficii maxime prin programarea orientată obiect atunci când este folosit un program proiectat special în acest scop. Java moștenește majoritatea conceptelor OOP de la C++, limbajul în care își are rădăcinile. De asemenea, Java împrumută anumite concepte si de la alte limbaje orientate obiect.
2.3. O porție de Java
Cu ceva timp în urmă, cuvântul Java ducea cu gândul la o insulă indoneziană sau la o ceașcă de cafea fierbinte. Insă, utilizarea Internetului
ca mediu pentru dezvăluirea de informații, dar și de programe, conduce la ideea de numitor comun, de platformă comună pentru care să fie dezvoltate aplicațiile.
Atunci când limbajul de programare Java a fost lansat public pentru prima dată, în noiembrie 1995, a fost precum intrarea pistolarului Clint Eastwood într-un orașel din Vestul Sălbatic. Ca și Clint, Java era ceva pe care băștinașii nu-l mai văzuseră până atunci. Era vorba de un limbaj de programare care putea rula într-o pagina World Wide Web, facându-și un nume printre imagini, text și audio.
Legenda Java a depășit uneori realitatea, și anume:
“Programele Java rulează fără eroare pe diferite platforme, fără nici o modificare!”
“Java a încheiat hegemonia Microsoft asupra sistemelor de oprerare!”
“Java a transformat autorii de carte de informatică în celebrități adulate pe plan international!”. [8]
2.4. Caracteristici ale limbajului Java
Limbajul Java are câteva caracteristici care îl face un limbaj de succes pe piața actuală de software.
Simplitatea, una dintre carscteristicile limbajului Java, prin care elimină supraîncărcarea operatorilor, moștenirea multiplă și toate facilitățile ce pot provoca scrierea unui cod confuz;
Ușurința, în crearea de aplicații complexe ce folosesc programarea în rețea, fire de execuție, interfață grafică, baze de date, etc;
Robusețea, care elimină frecvente de erori ce apar în programe prin renunțarea la pointeri, administrarea automată a memoriei și eliminarea pierderilor de memorie printr-o procedură de colectare a obiectelor care nu mai sunt referite, ce rulează în fundal („garbage collector”);
Complet orientat pe obiecte, deoarece elimină complet stilul de programare procedural;
Securitate, deoarece Java este un limbaj de programare foarte sigur, furnizând mecanisme stricte de securitate a programelor concretizate prin verificarea dinamică a codului pentru detectarea secvențelor periculoase, impunerea unor reguli stricte pentru rularea proceselor la distanță, etc;
Neutralitate arhitecturală, deoarece comportamentul unei aplicații Java nu depinde de arhitectura fizică a mașinii pe care rulează;
Portabilitate, deoarece Java este un limbaj independent de platforma de lucru, aceeași aplicație rulând fără nici o modificare și fără nici o modificare și fără a necesita recompilarea ei pe sisteme de oprerare diferite cum ar fi windows, Linux, Mac, OS, Solaris, etc., lucru care aduce economii substanțiale firmelor dezvoltatoare de aplicații;
Este compilat și interpretat, acesta fiind soluția eficientă pentru obținerea portabilității;
Performanță, deoarece deși este mai lent decât limbajele de programare care generează executabile native pentru o anumită platformă de lucru, compilatorul Java asigură o performanță ridicată a codului de octeți, astfel încât viteza de lucru puțin mai scăzută nu va fi un impediment în dezvoltarea de aplicații orcât de complexe, inclusiv grafică 3D, animație, etc.;
Java este dinamic, bibliotecile de clase în Java putând fi reutilizate cu foarte mare ușurintă. Cunoscuta problemă a fragilității superclasei este rezolvată mai bine decât in C++. Acolo, daca o superclasă este modificată, trebuie recompilate toate subclasele acesteia pentru că obiectele au o altă structură în memorie. În Java această problemă este rezolvată prin legea târzie a variabilelor, doar la execuție. Regăsirea variabilelor se face prin nume și nu print-un deplasament fix. Dacă superclasa nu a șters o parte din vechiile variabile și metode, ea va putea fi refolosită fără să fie necesară recompilarea subclaselor acesteia. Se elimină asfel necesitatea actualizării aplicațiilor, generată de apariția unei noi versiuni de bibliotecă;
Conține o librărie de clase și interfețe pentru domenii specifice cum ar fi programarea interfețelor utilizator (JFC, AWT, Swing), programare distribuită (comunicare TCP/IP, CORBA, RMI etc.);
Este multi-thread, deoarece nu este greu de înțeles de ce multi-threadingul a devenit vital pentru un limbaj ca Java. O aplicație trebuie să facă ceva în timp ce așteaptă pentru intrări din partea clientului. Într-o aplicație de rețea bazată pe GUI așa cum sunt browserele Web, există de obicei mai multe acțiuni ce au loc în același timp. Java furnizează sprijin pentru thread-uri multiple la execuție, ce pot trata diferite sarcini cu o clasă Thread din pachetul java.lang. Clasa de thread suportă metode necesare pentru a porni un thread, a rula un thread, a opri un thread și a verifica statusul unui thread. Acestea fac programarea în Java folosind thread-uri mult mai ușoară decât programarea convențională cu un singur fir de execuție în stilul C sau C++.
Este modelat după C și C++, trecerea de la C, C++ la Java făcându-se foarte ușor;
Face diferența între literele mici și mari (este case sensitive);
Permite dezvoltarea aplicațiilor pentru Internet – crearea unor documente Web îmbunătățite cu animație și multimedia;
Java Development Kit (JDK) este disponibil gratis.
2.5. Platforma de lucru Java
Limbajul de programare Java a fost folosit la dezvoltarea unor tehnologii dedicate pentru rezolvarea unor probleme din cele mai diverse domenii. Aceste tehnologii au fost grupate în niște platforme de lucru, ce reprezentau seturi de librării scrise în limbajul Java, precum și diverse programe utilitare, care erau folosite pentru dezvoltarea de aplicații sau componente destinate unei anume categorii de utilizatori.
J2SE (Standard Editions), este platforma standard de lucru ce oferă suport pentru crearea de aplicații independente și appleturi. De asemenea, aici este inclusă și tehnologia JavaWeb start ce furnizează o modalitate extrem de dificilă pentru lansarea și instalarea locală a programelor scrise în Java de pe Web, oferind cea mai comodă soluție pentru distribuția și actualizarea aplicațiilor Java.
J2ME (Micro Edition), flosind Java, programarea dispozitivelor mobile fiind extrem de simplă, platforma de lucru J2ME oferind suportul necesar scrierii de programare dedicate acestui scop.
J2EE (Enterprise Edition), această platformă ofera API-ul necesar dezvoltării de aplicații complexe, formate din componente ce trebuie să ruleze în sisteme eterogene, cu indormațiile memorate în baze de date distribuite, etc. Tot aici se găsește și suportul necesar pentru crearea de aplicații și servicii Web, bazate pe componente cum ar fi servleturi, pagini JSP, etc.
2.6. Biblioteci de clase și pachete
Kitul de dezvoltare Java (JDK) este o colecție de sotware de la firma Sun care cuprinde tot ce este nevoie pentru crearea aplicațiilor standalone și applet-urilor Java. Astel, JDK conține compilatorul Java, depanatorul și un vizualizator de applet-uri cu ajutorul caruia aplett-urile pot rula în afara unui browser, precum și documentație și exemple de applet-uri.
Java conține o multțime de clase predefinite și metode care pot trata majoritatea cerințelor fundamentale ale unei aplicatții. Kitul Dezvoltatorului Java (JDK – Java Developer’s Kit) include clase pentru gestionarea de ferestre, intrare/ieșire și comunicație în rețea.
Java permite folosirea unor pachete predefinite dar și crearea unor pachete proprii în cazul în care se dorește a oferi o mai mare funcționalitate procesului de dezvoltare a unei aplicații.
Pachetele asigură bazele pentru funcționarea lui Java și sunt implementate sub forma unor serii de clase cu metode grupate după funcționalitate. Pachetele Java sunt echivalentul bibliotecilor din C. De exemplu, există un grup de clase care ajută la crearea și utilizarea conexiunilor de rețea, acestea sunt toate conținute în pachetul java.net.
Grafica în programare s-a impus pornind de la considerația că o imagine înseamnă mai mult decât 1000 de cuvinte. Inițial grafica în Java folosind pachetul AWT (Abstract Window Toolkit) s-a bazat pe ideea utilizării unui singur standard GUI (Graphic User Interface) standard ce a pornit de la dezvoltatorii Unix fiind cunoscut sub numele CDE (Common Desktop Environment). AWT folosește principiul CDE urmărind să conserve așa numitul “look and feel” caracteristic platformei specifice. Acest pachet a suferit cele mai mari modificări pornind de la versiunile Java dezvoltate de-a lungul timpului. Versiunea 1.0 cu pachetul java.awt se baza pe așa numitele handlere definite în interiorul componentelor grafice iar de la versiunea 1.1 pachetul java.awt.event permite definirea handlere-lor în alte clase asocierea făcându-se cu diferite metode. Grafica bazată pe swing-uri oferă un nou nivel mai profesional în realizarea aplicațiilor grafice.
Acest mecanism al utilizării graficii îl întâlnim și în limbajul C++ unde după cum se știe grafica nu este standardizată. [6]
Capitolul 3. Platforma Android
În ziua de azi, telefoanele mobile sunt peste tot, sunt mai răspândite decât calculatoarele persoanale. Au fost înlocuite ceasurile, calculatoarele, camerele video, playerele MP3 și de multe ori mijloacele de acces la internet pentru a putea fi mult mai ușor utilizate într-un sigur loc și anume într-un dispozitiv mobil (smartphone). Telefoanele oferă capabilități cum ar fi GPS, rețele sociale, interfețe de mișcare și gest, precum și o gamă largă de aplicații mobile. Cu toate acestea, este ușor pentru a putea vedea că dispozitivele mobile sunt foarte populare. Tehnologia din spatele dispozitivelor mobile a avansat foarte mult si foarte repede. Așadar, Android-ul este sistemul de operare care rulează pe dispozitivele mobile.
Figura 3.1. Câteva capturi de ecran, arătând câteva dintre capacitățile Android-ului, cum ar fi harta GPS, aplicație de market Google Play, browser de navigare internet, etc. [10]
3.1. Introducere în sistemul de operare Android
Android este o platformă software și un sistem de operare pentru dispozitivele mobile bazat pe un nucleu, și anume, nucleul Linux. Aplicațiile sunt dezvoltate în limbajul Java permițând interacțiunea cu utilizatorul prin intermediul bibliotecilor dezvoltate de Google.
Lansarea platformei Android a fost în 5 noiembrie 2007, când a fost anunțată prin fondarea Alliance, un consorțiu de 48 de companii de hardware, software și de telecomunicații, consacrat dezvoltării de standarde deschise pentru dispozitivele mobile.
Începând cu 21 octombrie 2008, Android a fost disponibil ca Open Source, Google deschizând întregul cod sursă (inclusiv suportul pentru rețea și telefonie ), care anterior era indisponibil, fiind sub licența Apache. [6]
În mai puțin de trei ani și jumătate, sistemul de operare, care „răspunde” la numele de Android și pe care îl asociem cu omulețul verde, a trecut deja prin șapte etape de evoluție, a devansat concurenții precum iOS, Symbian, BlackBerry OS etc. și a devenit platforma pentru smartphone-uri numărul unu la nivel mondial.
Platforma Android are foarte multe beneficii peste iOS, dar are însă și unele slăbiciuni. Pentru dezvoltatori, un prim avantaj este limbajul Java, care este foarte accesibil, datorită istoriei îndelungate și a multitudinii de unelte de dezvoltare, care ajută în crearea unei proces end-to-end foarte bine pus la punct. În plus, platforma este open-source, iar pentru Java sunt prezente și foarte multe biblioteci care facilitează o serie de tehnici moderne de dezvoltare.
Pentru dezvoltare, este totuși recomandat un mediu bazat pe Unix, în special datorită CLI (command line interface), care este mult mai puternic decât pe Windows. [8]
3.2. Pachetul Apk
APK-ul (Android Application Package file) este formatul fișierelor utilizate pentru distribuirea și instalarea aplicațiilor pe sistemul de operare Android, toate aplicațiile pentru Android având extensia .apk.
Uneltele din SDK-ul (Software Development Kit) Android, compilează codul sursa împreuna cu fișierele în care se află memorate resursele, în arhive ce au extensia *.apk. Tot codul aflat într-o arhivă *.apk este tratat ca o aplicație unitară ce este instalată ulterior pe dispozitivele ce rulează pe Android.
Un APK nu este o aplicație, dar este folosit pentru a distribui o aplicație și a o instala pe orice dispozitiv mobil. Totodată, un APK trebuie să fie semnat cu un certificat (care identifică autorul aplicației) a cărei cheie privată este deținută de dezvoltator. Certificatul nu trebuie să fie semnat de către o autoritate de certificare. [11]
În figura urmatoare sunt prezentate componentele care alcătuiesc un fișier *.apk.
Figura 3.2. Formatul unui fișier APK. [9]
3.3. Câteva caracteristici ale platformei Android
Principalele caracteristici ale unei aplicatii Android sunt:
Este o aplicație Java executată de catre o mașină virtuală Dalvik; mașina virtuală (VM) Dalvik execută fișiere.dex, obținute din fișiere .class Java;
Este distribuită într-un pachet Android (Android Package), care este un fișier .apk;
Este executată de către sistemul de operare Android (un Linux multi-utilizator), într-un sandbox. Fiecare aplicație are un ID utilizator unic și resursele sale pot fi accesate numai de către utilizatorul respectiv. Fiecare aplicație rulează în procesul Linux propriu și în propria instanță de mașină virtuală. În ciuda acestui fapt, două aplicații diferite pot avea același ID utilizator pentru a partaja resursele lor;
Operațiile critice (acces la Internet, citire/scriere date de contact, monitorizare SMS, acces la modulul GPS), pot fi restrictionate sau se poate solicita permisiunea utilizatorului, utilizând fișierul manifest de configurare a aplicației, AndroidManifest.xml este o aplicație Android ceea ce înseamna una sau mai multe activități (o activitate poate fi asociata cu un ecran sau o fereastră, dar este mai mult decât atât) și procesul Linux. Ciclul de viață al unei activitățti nu este legată de ciclul de viață al procesului. Activitatea poate rula chiar în cazul în care procesul sau nu mai exista (acesta situatie este diferita de aplicațiile C, C++ sau Java în cazul cărora o aplicație este un proces);
Aplicația poate executa o componentă (activitate) din altă aplicație; componenta (activitatea) este executată de procesul de care aparține;
Aplicația Android nu are un punct unic de intrare, cum ar fi metoda main() în aplicațiile Java, C sau C++.
3.4. Componentele aplicației Android
Compontele cele mai importante ale aplicației Android sunt:
Activity (Activitate) care reprezintă o interfață cu utilizatorul, formular sau fereastră. O aplicatie Android poate avea una sau mai multe activități, de exemplu o aplicatie de tip Agendă poate avea o activitate pentru a gestiona contactele, o activitate pentru a gestiona intâlniri și una pentru a edita o intrare în agenda. Fiecare Activitate are propriul său ciclu de viață, independent de ciclul de viață al procesului asociat aplicației. Fiecare activitate are propria stare și datele acesteia pot fi salvate sau restaurate. Activitățile pot fi pornite de aplicații diferite (daca este permis).
Activitatea are un ciclu de viață complex deoarece aplicațiile pot avea activități multiple și doar una este în prim-plan. Când utilizăm managerul de activități, sistemul Android gestioneazî o stiva de activități care se gasesc în diferite stări precum cea de pornire, execuție, întrerupta, oprită sau distrusă).
În SDK, activitatea este implementată folosind o subclasă a clasei Activity care extinde clasa Context;
Intent (Intenție) care reprezintă o entitate folosită pentru descrierea operațiunii care urmează a fi executată. Intenția este un mesaj transmis catre o altă componentă pentru a anunța o operațiune. Ea este oarecum similară cu conceptul de event-handler din .Net sau Java.
Intenția mai este și un mesaj asincron utilizat pentru a activa activităti sau servicii și gestionată de o instanță a claseri Intent.
Service (Serviciu) este un task care se execută în fundal, fără interacțiunea directă cu utilizatorul. Este gestionat de o instanță a clasei Service.
Content provider (Furnizor sau manager de conținut) este un API folosit pentru a gestiona datele private ale unei aplicații.
Un sistem de management de date descrie o alternativă la sistemul de fișiere, baze de date SQLite sau orice altă soluție de stocare persistentă. Managerul de conținut este implementat de o subclasă a clasei ContentProvider.
Este o soluție pentru a partaja și controla (pe baza de permisiuni) transferul de date între aplicații (de exemplu, sistemul Android ofera un furnizor de continut pentru datele de contact).
Broadcast receiver este o componentă care răspunde anunțurile programarte la nivel de sistem și este similar oarecum cu conceptul de handler global sau evenimentele de sistem. Broadcast-ul este implementat de o subclass[ a clasei BroadcastReceiver.
2.4. Ciclul de viață al unei activități a aplicației Android
O activitate este una dintre cele mai complicate și importante componente ale unei aplicații Android pentru că este strâns legată de interfața cu utilizatorul. O activitate este utilizată pentru a gestiona, a organiza interfața cu utilizatorul și este echivalentă cu fereastra sau formularul din aplicațiile desktop.
Pentru a înțelege modul în care se controlează activitatea este de a utiliza ciclul de viață pentru a permite crearea, vizualizarez, utilizarea și a oprirea activităților. Ne mai permite să salvăm datele utilizatorului înainte ca activitatea să fie oprită și apoi restaurate atunci când activitatea este redusă în prim-plan.
Ciclului de viață al unei activități descrie starea în care o activitate poate fi la momentul respectiv.
Activitatea Running a fost creată cu onCreate() apoi pornită cu onStart()) și este afisată pe ecranul aparatului. În cazul în care o activitate a mai fost utilizată și aplicația a salvat starea acesteia (onSaveInstanceState()), activitatea este reluată din acel punct și anume (onRestoreInstanceState() si onResume()). În aceasta stare utilizatorul interactionează cu acea activitatea prin intermediul unei interfețe a dispozitivului (cum ar fi tastatura, touchscreen-ul, display-ul).
Activitatea Paused pierde prim-planul onPause(), pentru că o altă activitate este în procesul de executare, de exemplu o fereastră de dialog. De asemenea, în cazul în care intră în modul sleep, activitatea este oprită temporar. Activitatea își poate relua execuția onResume() și este plasată în prim-plan înapoi.
Activitatea Stopped nu mai este în uz și din cauză că este oprită onStop() nu mai este vizibilă. Pentru a putea fi reactivată (ea deja exista), activitatea trebuie să fie repornită cu onRestart() și onStart() și reluată prin onResume().
Activitatea Destroyed este distrusă cu onDestroy() și memoriaa fost eliberată, pentru că nu mai este necesară sau sistemul are nevoie de memorie suplimentară pentru anumite rutine proprii sau pentru alte activități. Deoarece managementul memoriei este un aspect foarte important pentru sistemul de operare Linux al dispozitivelor mobile, procesul care gazduieste o activitate întreruptă, oprită sau distrusă, poate fi terminat pentru a elibera memoria pentru noile activități. Procesele care gestionează activități ce sunt în procesul rulării sunt protejate.
Figura 3.3. Diagrama ciclului de viată a unei aplicații Android [7]
Dupa cum se observă în această imagine, o activitate poate avea mai multe stări în care există treceri, schimbări clare. O singură activitate poate fi în prim-plan, doar sistemul gestionând stările și schimbările unei activități și nu programatoul.
onCreate (Bundle) este o metodă apelată când activitatea este creată. Prin folosirea argumentulului metodei de tip Bundle, există posibilitatea să se restabilească starea activității, care a fost salvată într-o sesiune anterioară. După ce activitatea a fost creată, va fi pornită de către onStart().
onStart() este metoda apelată în cazul în care activitatea va urma să fie afișată. Din acest motiv, activitatea poate deveni în prim-plan onResume() sau poate rămâne ascunsă în background (în fundal) prin onStop().
onRestoreInstanceState (Bundle) este o metodă apelată în cazul în care activitatea este initializată cu datele dintr-o stare anterioara, care a fost salvată. Din mod implicit, sistemul va returna starea interfeței cu utilizatorul (starea controalelor vizuale, poziția cursorului, etc).
onResume() este metodaa apelată când o anumită activitate este vizibiă iar utilizatorul poate interacționa cu aceasta. Din aceasta stare, activitatea poate fi plasată în background (fundal), devenind apoi intreruptă prin onPause().
onRestart() este o metodă apelată în cazul în care activitatea revine în prim-plan dintr-o stare care a fost oprită (stopped). Apoi, activitatea este pornită prin onStart() din nou.
onPause() este metoda apelată atunci când sistemul aduce în prim-plan o altă activitate. Activitatea curentă este mutată în background (fundal) și mai târziu poate fi oprită de către metoda onStop() sau repornită și afișată de către metoda onResume(). Acestă metodă este un moment bun pentru a salva datele aplicației într-un mediu de stocare cum ar fi fișierele sau bazele de date, pentru că dupa această fază activitatea poate fi terminată și distrusă fără să se anunțe acest lucru.
onSaveInstanceState (Bundle) este metoda apelată pentru a salva starea curentă a unei activitați. Prin acest mod implicit, sistemulva salva starea interfeței cu utilizatorul.
onStop() este o metodă apelată în cazul în care o activitate nu mai este utilizată și nu mai este vizibilă pentru că o altă activitate interactionează cu utilizatorul. Din acest punct de vedere, activitatea mai poate fi repornită de către metoda onRestart() sau distrusă prin metoda onDestroy().
onDestroy() este metoda apelată în cazul în care activitatea este distrusă și memoria va fi eliberată. Acest lucru se mai poate întâmpla și în cazul când sistemul necesită mai multă memorie sau dacă programatorul va termina în întregime o activitate prin apelarea metodei finish() din clasa Activity.
Figura 3.4. Evenimentele unei activități Android [9]
Concluzii
Fotografia, în ziua de azi, este un mod de comunicare pe rețelele de socializare, deoarece majoritatea își postează pe aceste rețele de socializare precum Facebook, Twitter, Instagram, diferite poze din viața fiecăruia, iar fiecare poză este pastrată intr-o ordine, după evenimentele pe care le-au trăit, formându-se o galerie foto completă care se poate accesa cu ușurintă de oricine.
Galeria foto este o colecție de fotografii adunate la un loc și aranjate după anumite criterii și preferințe.
Bug-uri întâlnite în aplicație:
7703-7703/com.example.teodora.fotogallery E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.NullPointerException
at com.example.teodora.fotogallery.FotoContainer$2.onClick(FotoContainer.java:49)
at android.view.View.performClick(View.java:4452)
at android.widget.Button.performClick(Button.java:148)
at android.view.View$PerformClick.run(View.java:18428)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5365)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Bibliografie
Istoricul fotografiei, http://www.ipedia.ro/istoria-si-evolutia-fotografiei-96, 9.05.2015;
Istoricul pozei color, https://www.google.ro/?gws_rd=cr&ei=E5NPVd-lMajhywOEkoCACw#q=istoricul+pozei+color, 09.05.2015;
Limbajul Java, http://ro.wikipedia.org/wiki/Java_%28limbaj_de_programare%29, 10.05.2015;
Introducere în Java, http://www.hfdesign.ro/introducere-in-java/, 11.05.2015;
Java,https://www.google.ro/?gws_rd=cr&ei=myFSVaXZM4HKsgGE34GICA#q=despre+limbajul+de+programare+java , 12.05.2015;
Despre Android, http://ro.wikipedia.org/wiki/Android_(sistem_de_operare), 13.05.2015;
Platforma Android, http://www.itcsolutions.eu/2011/09/08/android-tutorial-concepte-activitati-si-resurse-ale-unei-aplicatii-android/ , 13.05.2015;
Procesul de dezvoltare a platformei Android, http://ctrl-d.ro/development/resurse-development/procesul-de-dezvoltare-a-platformei-android/, 13.05.2015;
Formatul unui APK, http://students.info.uaic.ro/~dumitru.prelipcean/android/Laborator1.pdf, 13.05.2015;
Cărți
Java: Laura Lemay și Rogers Cadenhead, Java 2 fără profesor, editura Teora, București, 2001;
Android: Charlie Collins, Michael D. Galpin, Matthias Käppler, Android in Practice, USA 2012;
Sistemul de operare Android: Dave Smith & Jeff Friesen, Android Recipes. A Problem- Solutions Approach, USA, 2012;
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: Gestionarea Informatiilor Vizuale. Aplicatie de Galerie Foto (ID: 121374)
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.
