Aplicatie Ide Pentru Ucv Ace App. Utilizând Eclipse Adt Android
LUCRARE DE DISERTAȚIE
BARONESCU MIHĂIȚĂ – IULIAN
COORDONATOR ȘTIINȚIFIC
Prof. dr. ing. PREJBEANU RĂZVAN
Iulie 2016
CRAIOVA
Aplicație IDE pentru UCV-ACE App. utilizând ECLIPSE ADT-ANDROID
BARONESCU MIHĂIȚĂ – IULIAN
COORDONATOR ȘTIINȚIFIC
Prof. dr. ing. PREJBEANU RĂZVAN
Iulie 2016
CRAIOVA
„Nimic nu costa mai mult decat nestiinta „
Grigore Moisil
DECLARAȚIE DE ORIGINALITATE
[anonimizat] Iulian, student la specializarea Automatica Sistemelor Complexe din cadrul Facultății de Automatică, Calculatoare și Electronică a Universității din Craiova, certific prin prezenta că am luat la cunoștință de cele prezentate mai jos și că îmi asum, în acest context, originalitatea lucrării mele de disertație:
cu titlul Aplicație IDE pentru UCV-ACE App. utilizând ECLIPSE ADT-ANDROID
coordonată de Prof. dr. ing. PREJBEANU RĂZVAN,
prezentată în sesiunea iulie 2016
La elaborarea lucrării de disertație, se consideră plagiat una dintre următoarele acțiuni:
reproducerea exactă a cuvintelor unui alt autor, dintr-o altă lucrare, în limba română sau prin traducere dintr-o altă limbă, dacă se omit ghilimele și referința precisă,
redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte lucrări, dacă nu se indică sursa bibliografică,
prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori fără menționarea corectă a acestor surse,
însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care are alt autor.
Pentru evitarea acestor situații neplăcute se recomandă:
plasarea între ghilimele a citatelor directe și indicarea referinței într-o listă corespunzătoare la sfărșitul lucrării,
indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe a sursei originale de la care s-a făcut preluarea,
precizarea sursei de la care s-au preluat date experimentale, descrieri tehnice, figuri, imagini, statistici, tabele et caetera,
precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a căror paternitate este unanim cunoscută și acceptată.
Data, Semnătura candidatului,
LUCRARE DE DISERTAȚIE
REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC
În urma analizei lucrării candidatului au fost constatate următoarele:
În concluzie, se propune:
Data, Semnătura conducătorului științific,
REZUMATUL LUCRĂRII
Tema proiectului este aceea de a realiza o aplicatie pentru dispozitive mobile cu sistem de operare Android. Aplicatia ce urmeaza a fi prezentata este special dedicata studentilor Facultatii de Automatica, Calculatoare si Electronica . Aplicatia va rula pe dispozitive de tip smartphone ce suporta un sistem de operare Android si o conexiune la internet.
Principalul rol al acestei aplicatii este de a-i tine la curent pe studenti cu cele mai noi stiri/ oferte de munca/ intership-uri si cursuri postate pe site-ul fiecarui departament. Spre deosebire de alte aplicații de acest gen, ne propunem crearea unei aplicații care să aibă o interfață intuitivă pentru a putea fi folosită de orice utilizator indiferent de domeniul de care este interesat.
Termenii cheie: aplicatie, stiri, aceucv, android, smartphone.
MULȚUMIRI
Doresc să îi mulțumesc coordonatorului meu, Prof. dr. ing. PREJBEANU RĂZVAN, pentru informațiile oferite pentru a duce la bun sfârșit această aplicație.
PROLOG
Secolul XXI mai este numit si secolul vitezei si al informatiei. In urma acestor doua componente pe care cu totii le putem constata ca fiind prezente in viata de zi cu zi, se naste o noua nevoie si anume nevoia de accesare rapida a informatiei. Astfel ca omul modern nu trebuie doar sa fie bine informat ci trebuie sa aibe si acces rapid la informatii.
Pe masura ce fluxul continuu de noi date ce trebuiesc stocate s-a marit, s-a constatat nevoia de a simplifica întregul proces de accesare si gestionare a acestora. Având la dispoziție uneltele necesare și o bază de date în continuă schimbare, singura provocare consta în utilizarea acestor instrumente specifice pentru a obține cele mai bune rezultate cu un consum minim de resurse și într-o formă simplificată, astfel încât accesul și gestionarea propriu-zisa, să se desfășoare într-o manieră facilă și rapidă. Nevoia fluidizării procesului de gestionare a datelor este prezenta in orice institutie.
Luând aceste principii menționate mai sus drept punct de plecare, am dezvoltat o aplicatie dedicata studentilor acestei facultati , care să permită accesarea datelor într-un mod rapid, ușor si discret.
Prin utilizarea combinată a unor tehnologii precum Java, Android si multe altele, aplicația răspunde nevoii de simplificare a accesarii bazelor de date si reprezentarea acestora intr-o maniera mult mai eleganta.
CUPRINSUL
Aplicație IDE pentru UCV-ACE App. utilizând ECLIPSE ADT-ANDROID
1 Introducere 1
1.1 Scopul 1
1.2 Motivația 1
2 SPECIFICATII TEHNICE SI TEORETICE 2
2.1 Limbajul de programare Java 2
2.2 Sistemul de operare android 4
2.2.1Arhitectura………………………………………………………………………….4
2.2.2 Caracteristic ……………………………………………………………………….7
2.2.3 Managementul fisiere ….…………………………………………………………..8
2.2.4 Procese și cicluri de viață …………………………………………………………8
2.2.5 Procese …………………………………………………………………………..11
2.2.6 Fire de procese 14
2.2.7 Apelul procedurilor la distanta 14
3. Descrierea cercetării actuale în domeniul temei 16
3.1 Arhitectura 16
3.2 Arhitectura modulara 17
3.2.1 Modulul furnizor de informatii ………………………………………………….18
3.2.2 Modulul de interfata grafica ………………………………………………………19
3.2.3 Modul de achizitie de date ………………………………………………………20
3.3 Proiectarea Sistemulu……………………………………………………………….21
3.3.1 Ierarhia de clase, Diagrama UML 22
3.3.2 Descrierea Claselor 24
3.3.3 Descrierea Intefetelor 24
4. Implementarea Sistemului 31
4.1 Diagrama Use case 31
5. Testarea si evaluarea Sistemului 32
6. Concluzii 34
6.1 IMBUNATATIRI ……………………………………………………………………………35
7. referinte web 37
CD / DVD 51
LISTA FIGURILOR
Figura 1. Ecran Principal 2
Figure 2: Lista Departamentelor 2
Figure 3:Structura Android 7
Figure 4:Nivelul Linux Kernel 7
Figure 5:Nivelul Librarii 8
Figure 6 Android Run-Time 8
Figure 7 : Nivelul Aplicatii Frameworks 9
Figure 8 Nivelul Aplicatii 9
Figure 9: Grafic Smartphone 14
Figure 10: Download ADT 15
Figure 11: Versiuni Android 16
Figure 12: Procentajul de util a sistemelor de operare mobile 17
Figure 13: Arhitectura aplicatiei 18
Figure 14: Diagrama UML a claselor 21
Figure 15: Activity lifecycle 23
Figure 16: Interfata de pornire 26
Figure 17: interfata AceUcv 27
Figure 18: Interfata Departamentelor 28
Figure 19. Interfata de eroare 29
Figure 20: Interfata DAE 29
Figure 21: Interfata DCTI 30
Figure 22: Diagrama USE CASE 31
Figure 23: SDK Manager 33
Figure 24: Progress Diallog 34
Introducere
Scopul si Descrierea Aplicatiei
Scopul acestei lucrari este de a concepe și dezvolta arhitectura unei aplicații pe dispozitive smartphone cu sistem de operare Android Înțelegerea acestui sistem precum și folosirea lui în cel mai bun mod cu putință . Realizarea de aplicații pentru dispozitive smartphone simplifică extrem de mult viată oamenilor indiferent de domeniul de aplicabilitate.
Aplicatia prezentata reprezinta o modalitatea buna de a fi la curent cu noutatile prezentate de Facultatea de Automatica, Calculatoare si Electronica . Portabilitatea pe telefoane smartphone cu sistem de operare Android aduce un mare avantaj utilizatorilor deoarece acestia sunt conectati in timp real cu tot ceea ce se intampla in lumea sportului.
Aceasta Aplicatie ofera cele mai noi stiri , oferte de munca si intership-uri studentilor Facultatii de Automatica, Calculatoare si Electronica.
Aplicatia poate fi utilizata de orice student, intrucat aceasta ofera suport tuturor de la oricare departament, cat si organizatiile din care acestia pot face parte :
Departamentul de Automatica si Electronica
Departamentul de Calculatoare si Tehnologia Informatiei
Departamentul de Mecatronica si Robotica
EESTEC ( Electrical Engineering Student’s European Association Local Committee Craiova )
OSACE (Organizatia Studentilor din Facultatea de Automatica, Calculatoare si Electronica )
Figura 1 Ecran Principal
Motivația
Motivația mea pentru alegerea acestei teme este data de faptul ca nu mai exista o aplicatie Android a site-ului facultatii. Ce am facut eu a fost sa include aproape tot ce se poate din cadrul Facultatii de Automatica, Calculatoare si Electronica, atat pe partea de stiri si oferte de munca, cat si cursurile actualizate la zi de catre fiecare professor. Dezvoltarea aplicațiilor mobile a crescut foarte mult în ultimii ani, mai ales după apariția smartphone-urilor. Acestea au devenit din ce în ce mai performante și au început să aibă acces la diferite părți din viață noastră. Am ales platform Android deoarece acest sistem de operare deține monopolul pe piață smartphone-urilor . Pentru acest scop am decis să abordez eu această tema pentru disertatie .
SPECIFICATII TEHNICE SI TEORETICE
La realizarea aplicatiei a fost necesara implementarea a mai multor tehnologii ca Limbajul de programare Java , Sistemul de operare Android precum si diverse site-uri. In subcapitolele ce urmeaza am incercat sa cuprind cateva specificatii tehnice si teoretice de ansamblu legat de fiecare dintre aceste tehnologii.
Limbajul de programare Java
Limbajul de programare Java™ dezvoltat de catre Sun Microsystem, este construit pentru a fi un limbaj de programare masina independent, care este suficient de sigur sa traverseze retele si suficient de puternic pentru a inlocui codul executabil original. Denumita initial OAK, tehnologia Java care a avut un imapact enorm asupra dezvoltatorilor de software, dand dovada de robustete si simplitate, este formata dintr-un limbaj de programare de nivel inalt pe baza caruia sunt construite o serie de platforme destinate implementarii de aplicatii pentru toate segmentele industriei software.Initial, cel mai mare interes pentru Java a fost concentrat in jurul capacitatii sale de a dezvola aplicatii incorporate in world wide web, aceste aplicatii fiind numite applet-uri. Cu Java 2, limbajul de programare java devine cel mai complex instrument pentru construirea de interfete grafice, totodata el incepe sa devina o platforma populara in dezvoltarea traditionala de aplicatii software si de aplicatii de server folosind interfete servlet.
Dintre caracteristicile principale ale limbajului amintim:
simplitate – Java este ușor de învățat, caracteristicile complicate (supraîncărcarea operatorilor, moștenirea multiplă, șabloane) întâlnite în alte limbaje de programare nu mai sunt intalnite aici.
robustețe, elimină sursele frecvente de erori ce apar în programare prin eliminarea pointerilor, administrarea automată a memoriei și eliminarea fisurilor de memorie printr-o procedură de colectare a 'gunoiului' care rulează în fundal. Un program Java care a trecut de compilare are proprietatea că la execuția sa nu "crapă sistemul".
orientat pe obiecte – elimină complet stilul de programare procedural; se bazează pe încapsulare, moștenire, polimorfism
ușurință în ceea ce privește programarea în rețea sau a diverselor aplicatii ce folosesc baze de date ori fire de executie(multithreaded) etc
securitate, este cel mai sigur limbaj de programare disponibil în acest moment, asigurând mecanisme stricte de securitate a programelor concretizate prin: verificarea dinamică a codului pentru detectarea secvențelor periculoase, impunerea unor reguli stricte pentru rularea programelor lansate pe calculatoare aflate la distanta, etc
portabilitate, cu alte cuvinte Java este un limbaj independent de platforma de lucru, aceeași aplicație rulând, fără nici o modificare, pe sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce economii substanțiale firmelor care dezvoltă aplicații pentru Internet. Sloganul de bază este: „Write once, run anywhere”
compilat și interpretat
asigură o performanță destul de mare a codului de octeți
conține o librărie de clase și interfețe pentru diverse domenii cum ar fi programarea interfețelor-utilizator (JFC, AWT, Swing), programare distribuită (comunicare TCP/IP, CORBA, RMI etc.)
este un limbaj dinamic
este structurat dupa limbajele de programare C și C++, trecerea de la C / C++ la Java realizandu-se destul de ușor.
este case sensitive
permite dezvoltarea aplicațiilor pentru Internet – crearea unor documente Web îmbunătățite cu animație și multimedia.
Kitul de dezvoltare Java (JDK) este disponibil gratis
Limbajul Java este atat un limbaj compilat cat și interpretat. Limbajele de programare se împart în două categorii (dupa modul de executie) si anume:
interpretate: instrucțiunile limbajului sunt citite linie cu linie de catre un program numit interpretor și traduse în instrucțiuni cod mașină . Avantajul este legat de simplitate iar ca dezavantaj avem viteza de execuție redusă;
compilate: codul sursă al programelor este transformat de compilator într-un cod ce poate fi executat direct de procesor; avantaj: execuție rapidă; dezavantaj: lipsa portabilității, codul compilat într-un format de nivel scăzut nu poate fi rulat decât pe platforma pe care a fost compilat.
Codul de octeți este diferit de codul mașină. Codul mașină este reprezentat de o succesiune de 0 și 1; codurile de octeți sunt seturi de instrucțiuni care seamănă cu codul scris în limbaj de asamblare. Codul mașină este executat direct de către procesor și poate fi folosit numai pe platforma pe care a fost creat; codul de octeți este interpretat de mediul Java și de aceea poate fi rulat pe orice platformă care folosește mediul de execuție Java.
Fazele prin care trece un program Java sunt:
Codul sursa Java -> (compilare) -> Codul de octeti -> (interpretare)
Există două modalitati de a lucra în Java: în linie de comandă – pașii fiind descrisi mai jos, sau folosind un editor Java cum ar fi JCreator, Eclipse. In cazul de fata, pentru dezvoltarea aplicatiei ce urmeaza a fi prezentata in capitolele urmatoare s-a folosit editorul java Eclipse.
Realizarea unui program Java constă în următorii pași:
Programul este editat într-un editor de texte;
Salvarea programului sub numele NumeClasa.java unde NumeClasa este numele clasei care conține metoda main(). Într-un program Java trebuie să existe o singură clasă care să conțină o metodă main(). Cu alte cuvinte, numele clasei trebuie să coincidă cu numele fișierului. Extensia fișierului este .java
Compilarea programului se face folosindu-ne de comanda:
javac NumeClasa.java
Executarea programului se face cu comanda:
java NumeClasa
Sistemul de operare android
Android este o platforma software si un sistem de operare pentru dispozitive mobile, bazata pe nucleul Linux. Androidul include un sistem de operare middleware și aplicații cheie, fiind bazat pe o versiune modificată a kernel-ului de Linux .Acest sistem este dezvoltat initial de Google, mai tarziu fiind dezvoltat si de Open Handset Aliance (OHA), o alianta formata din mai multe firme celebre (HTC, Intel, Motorola, Nvidia,etc.), creata special pentru a dezvolta acest sistem.
2.2.1 Arhitectura. In figura de mai jos putem vedea ilustrata arhitectura Android si organizarea acestuia pe mai multe nivele:
Fig. 3 – Structura Android
Un kernel de linux. Se foloseste Linuxul pentru ca este un sistem foarte stabil, avand driveri deja existenti.
Fig 4 – Nivelul Linux Kernel
Nivelul Librarii. Aceste librarii sunt scrise in limbajul C/C++ si sunt alcatuite la randul lor din:
Fig 5 – Nivelul Librarii
*Surface Manager este responsabil cu compunerea ferestrelor si afisarea acestora pe ecran precum si asigurarea afisarii pixelilor pe ecran.
*Open GL ES este o librarie 3D
*SGL este o librarie 2D folosita pentru desene.
*Media Framework este utilizat pentru formele de date audio si video , cuprinzand toate codecurile necesare.
*Fonturi
*SSL
*SQLite- pentru stocarea datelor
*WebKit este folosit pentru navigarea web
*Libc
Android Run Time este un nivel ce contine contine:
Fig 6 – Android Runtime
-O masina virtuala Dalvik, aceasta fiind componenta principala a acestui nivel.
-Fisierele DEX care sunt alcatuite din cuvinte organizate pe biti.
-Core Libraries – aceste librarii sunt scrise in libajul JAVA
Aplicatii Framework este un alt nivel, fiind alcatuit in intregime in limbaj JAVA. Acesta cuprinde:
Fig 7 – Nivelul Aplicatii Frameworks
ActivityManager – gestiunea activitatii – coordoneaza ciclul de viata al aplicatiilor
PackageManager – gestionarea pachetelor – trebuie sa stie ce trebuie sa faca fiecare aplicatie in parte
WindowManager – gestiunea ferestrelor
TelephonyManager – gestiunea telefonului
ContentProvider – providerul de continut – ofera posibilitatea datelor sa fie folosite de alte aplicatii
ResouseManager – Gestiunea resurselor – este folosit in stocarea vectorilor
ViewSystem – Sistemul de vizualizare – contine butoane, liste, etc.
LocationManager – gestiunea locatiilor
NotificationManager – gestiunea instiintarilor
Nivelul Aplicatiilor este ultimul nivel din aceasta arhitectura. Este alcatuita din totalitatea aplicatiilor ce folosesc o frendly-user-interface – interfata prietenoasa. Componente
Fig 8 – Nivelul Aplicatii
-Home aplicatie de baza, asemenea unei pagini de start
-Contacte – o baza de date care contine nr de telefon, nume, adresa, etc.
-Telefon- aplicatie folosita pentru a putea da un telefon
-Browser – salveaza informatii, descarca informatii si acceseaza pagini web
Caracteristici
Sistemul de operare Android are urmatoarele caracteristici:
Cadru de aplicatii care permite reutilizarea și înlocuirea componentelor
Mașina virtuală folosita este Dalvik optimizata pentru dispozitive mobile
Browser-ul integrat bazat pe open-source WebKit motor
Grafica optimizata bazata pe o bibliotecă grafica 2D personalizată; grafica 3D este bazată pe OpenGL ES 1.0
SQLite pentru stocarea datelor structurale
Suport media pentru fisierele audio, video, și imagini (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
Telefonie GSM
Bluetooth, EDGE, 3G si WiFi
Aparat de fotografiat, GPS, busola, și accelerometru
Mediu bogat de dezvoltare, inclusiv un emulator de dispozitiv, instrumente pentru depanare, profilare de memorie și de performanță, precum și un plug-in pentru Eclipse IDE
Managementul fisierelor
Din momentul aparitiei sistemului Android 2.3 (Gingerbread), s-a trecut de la sistemul de fisiere YAFFS, la sistemul de fisiere ext4. Acest sistem de fisiere a fost dezvoltat pentru Linux, fiind succesorul sistemului ext3.
Procese și cicluri de viață
In momentul in care prima dintre componentele unei aplicații va trebui să fie rulata, sistemul Android începe un proces de Linux, cu un singur fir de execuție. In mod implicit, toate componentele aplicației ruleza în acest proces și fir de executie.
Sistemul Android încearcă să mențină procesul unei aplicatii pentru un timp cat mai indelungat, dar în cele din urmă vechile procese trebuiesc inchise atunci cand memoria este scăzuta. Pentru a determina care procese trebuiesc păstrate și care inchise, Androidul acorda locuri pentru fiecare proces într-o "ierarhie de importanță", bazata pe componentele ce funcționeaza în ea și starea acestor componente. Procese cu cea mai mica importanța sunt eliminate în primul rând, apoi următoarele cu cel mai mica, și așa mai departe. Există cinci niveluri în ierarhie. Lista de mai jos le prezintă în ordinea importanței:
Un proces de prim-plan este un proces necesar pentru ceea ce utilizatorul realizeaza efectiv în prezent. Un proces este considerat a fi în prim-plan dacă indeplineste oricare dintre următoarele condiții:
Acesta execută o activitate cu care utilizatorul interacționează.
Acesta găzduiește un serviciu care este legat de activitatea cu care utilizatorul interacționează.
Detine un obiect de tip Service care executa unul dintre Callbacks-urile ciclului său de viață
Detine un obiect de tip BroadcastReceiver care executa metoda de receptie.Doar câteva procese de prim-plan pot exista la un moment dat. Ele sunt ucise numai in ultimă instant.În cazul în care memoria este atât de mică încât să nu poate continua să le ruleze toate. În general, în acel moment, dispozitivul a atins o stare de paginare a memoriei, astfel încât uciderea unor procese de prim-plan este necesară pentru a păstra interfață pentru utilizator receptivă.
Un proces vizibil este unul care nu are toate componentele in prim-plan, dar încă mai pot afecta ceea ce utilizatorul vede pe ecran. Un proces este considerat a fi vizibil dacă oricare dintre următoarele condiții sunt indeplinite:
Acesta găzduiește o activitate care nu se află în prim-plan, dar este încă vizibila pentru utilizator.
Acesta găzduiește un serviciu de care este legat la o activitate vizibilă. Un proces vizibil este considerat important și nu va fi ucis excepția cazului în care acest lucru este necesar pentru a păstra toate procesele care rulează in prim-plan.
Un proces de servicii este unul care execută un serviciu care nu se încadrează în una dintre cele două categorii mai mari. Deși procesele de servicii nu sunt direct legate de orice interfata cu utilizatorul, ele fac, în general, lucruri de care utilizatorului ii pasa, astfel încât sistemul le menține, cu excepția cazului în care nu este de ajunsa memorie pentru a le menține, împreună cu toate procesele de prim-plan și vizibile.
Un proces de fundal este unul care deține o activitate care nu este în prezent vizibila pentru utilizator. Aceste procese nu au un impact direct asupra experienței utilizatorului, si poate fi ucis în orice moment pentru a recupera memorie pentru un proces de prim-plan, vizibil, sau de serviciu. De obicei, există mai multe procese care rulează in fundal, astfel încât acestea sunt ținute într-o lista LRU (Least Recently Used = cel mai puțin recent folosit) pentru a se asigura că procesul cu activitatea cea mai recent vazuta de catre utilizator este ultimul care urmează să fie ucis.
Un proces gol este unul care nu deține componentele active ale unei aplicație. Singurul motiv pentru a menține un astfel de proces este pentru a îmbunătăți timpul de pornire data viitoare cand o componentă are nevoie pentru a rula în el. Sistemul ucide adesea aceste procese, în scopul de a echilibra resursele generale ale sistemului de cache între proces și cache care stau la baza kernel-ului.
Android plaseaza un proces la cel mai înalt nivel care este posibil, pe baza importanței componentelor active în prezent în proces. De exemplu, dacă un proces găzduiește un serviciu și o activitate vizibilă, procesul va fi cotat ca fiind un proces vizibil, nu ca proces de serviciu.
În plus, clasamentul unui proces poate fi crescut, deoarece alte procese sunt dependente de el. Un proces care servește unui alt proces nu poate fi clasat mai jos decât procesul servit.
Deoarece un proces care rulează un serviciu este clasat mai sus decât unul cu activități de fundal, o activitate care inițiază o operațiune de lungă durată ar putea face bine să înceapă un serviciu pentru această operațiune, mai degrabă decât pur și simplu sa ruleze un fir – în special în cazul în care operațiunea va dura probabil mai mult decât activitatea. Folosind un serviciu garantează că operațiunea va avea cel puțin prioritat de "procesul de serviciu", indiferent de ceea ce se întâmplă cu activitatea.
2.2.5 Procese
Procesul în cazul în care o componentă se execută este controlat de fișierul manifest. Elementele componente:
– activitate
– serviciu
– receptor
– furnizor
Fiecare are un proces atribut care poate specifica un proces în cazul în care această componentă ar trebui să ruleze. Aceste atribute pot fi stabilite astfel încât fiecare componentă se execută în propriul proces, sau astfel încât unele componentele sa imparta un proces în timp ce altele nu. Acestea pot fi de asemenea setat astfel încât componentele diferitelor aplicații pot rula în cadrul aceluiași proces – cu condiția ca cererile sa aiba același ID-ul de utilizator Linux și sa fie semnate de către aceleași autorități. Fiecare aplicatie are de asemenea un process atribut, pentru a stabili o valoare implicită care se aplică la toate componentele.
Sitemul de operare Android poate decide să închidă un proces la un moment dat, atunci când memoria este scăzuta și este solicitat de alte procese care servesc imediat utilizatorul. Componentele aplicației care rulează în acest proces, sunt distruse. Un proces este repornit pentru acele componente atunci sunt utilizate.
2.2.6 Fire de proces
Deoarece interfața cu utilizatorul ar trebui să fie mereu rapidă pentru a răspunde la acțiunile utilizatorului, firul care găzduiește o activitate nu ar trebui sa gazduiasca, de asemenea, operațiunile de consumatoare de timp. Orice lucruri care nu pot fi realizate rapid sunt atribuite unui fir diferit.
Apelul procedurilor la distanță
Sistemul de operare Android are un mecanism ușor pentru apelurile de procedură la distanță (RPCs-remote procedure call), in cazul în care o metodă se numește la nivel local, dar este executată la distanță (într-un alt proces), cu orice rezultat întors înapoi la apelantului. Acest lucru presupune descompunerea apelul metodei și toate datele sale inerente la un nivel la care sistemul de operare poate înțelege, si transmite de la procesul de la nivelul și spatiu de adrese local la procesul și spațiul de adrese de la distanță. Valorile returnate sunt transmise în direcția opusă.
O interfață RPC pot include numai metode, in mod implicit, toate metodele sunt executate sincron, chiar dacă nu există nici o valoare de întoarcere.
3. Descrierea CERCETARII ACTUALE IN DOMENIUL TEMEI
3.1 Noțiuni generale
Popularitatea dispozitivelor mobile a crescut foarte mult în ultimii ani, în sepecial smartphone-urile. Deoarece acestea au devenit din ce în ce mai puternice și mai accesibile pentru majoritatea oamenilor, au început să aibă acces la diferite părți din viața noastră.
Conform celor de la eMarketer.com numărul utilizatorilor de smartphone-uri este în continuă creștere în anul 2014 estimându-se un număr de 4,55 de milioane de utilizatori.
Următorul grafic ilustrează o estimare a numărului de utilizatori de smartphone-uri din anul 2012 până în anul 2017. [1]
Figura 9. Grafic Smartphone
Un smartphone este un telefon mobil care oferă în plus față de funcționalitățile obișnuite, unele funcționalități asemănătoare cu cele ale unui computer și care este conectat la o rețea GSM sau UTMS. [2]
Un smartphone se deosebește de alte telefoane mobile prin faptul că dispune de un microprocesor dedicat, o memorie internă(RAM), dar cel mai important este faptul că are un sistem de operare.
Sistemul de operare reprezintă un cod software al cărui scop este de a realiza interfața între utilizatorul dispozitivului și componentele hardware ale acestuia.
Android Software Development Kit
SDK-ul Android include un set complet de instrumente de dezvoltare. Acestea includ un program de depanare, biblioteci, un emulator de dispozitiv (bazat pe QEMU), documentație, mostre de cod și tutoriale. Platformele de dezvoltare sprijinite în prezent includ calculatoare bazate pe x86 care rulează Linux (orice distribuție Linux desktop modernă), Mac OS X 10.4.8 sau mai recent, Windows XP sau Vista. Cerințele includ, de asemenea, Java Development Kit, Apache Ant, și Python 2.2 sau o versiune ulterioară. Mediul de dezvoltare (IDE) suportat oficial este Eclipse (3.2 sau mai recent), utilizând plug-in-ul Android Development Tools (ADT), deși dezvoltatorii pot folosi orice editor de text pentru a edita fișiere XML și Java și apoi să utilizeze unelte din linia de comandă pentru a crea, să construi și depana aplicații Android.
Figura 10 Download ADT
O versiune pentru examinare a Android Software Development Kit (SDK) a fost lansată la data de 12 noiembrie 2007.La 15 iulie 2008, echipa Android Developer Challenge a trimis accidental un e-mail la toți participanții Android Developer Challenge anunțând că o nouă versiune de SDK era disponibilă într-o zonă de descărcare "privată". Mesajul a fost destinat pentru câștigatorii primului tur al Android Developer Challenge. Revelația că Google furniza de noi versiuni SDK unor dezvoltatori și nu altora (și păstra acest regim secret) a condus la frustrare raportată pe scară largă în comunitatea dezvoltatorilor Android.
La 18 august 2008, a fost lansat Android SDK 0.9 beta. Această versiune oferă un API actualizată și extinsă, instrumente de dezvoltare îmbunătățite și un design actualizat pentru ecranul de bază. Instrucțiuni detaliate pentru actualizare sunt disponibile pentru cei care lucrează deja cu o versiune anterioară. La 23 septembrie 2008 a fost lansat SDK-ul Android 1.0 (Release 1). Conform documentației de lansare, includea "în principal remedii pentru probleme, deși au fost adaugate unele capabilități mai puțin semnificative". Includea, de asemenea, câteva modificări ale API-ului față de versiunea 0.9.
Pe 9 martie 2009, Google a lansat versiunea 1.1 pentru telefonul Android Dev. Deși există câteva actualizări estetice, câteva actualizări cruciale includ suport pentru "căutare prin voce, aplicații contra cost, remedii pentru ceasul cu alarmă, remediu pentru blocarea la trimiterea gmail, notificări de poștă electronică și intervale de împrospătare, iar acum hartile afișează evaluări de firme". Un alt update important este că telefoanele Dev pot acum accesa aplicații plătite și dezvoltatorii le pot vedea acum pe Piața Android.
Platforme Android
În tabelul de mai jos puteți vedea istoricul versiunilor Android, denumirea comercială și distribuția acestora în funcție de dispozitivele care au accesat magazinul Play Store în a doua parte a lunii august 2013
Figura 11 Versiuni Android
In momentul de fata principalul sistem de operare prezent pe majoritatea telefoanelor smartphone este Android.
Figura 12. Procentajul de utilizare a sistemelor de operare mobile
3.1 Arhitectura
3.2 Arhitectura modulara
Aplicația are trei tipuri distincte de module:
1. Modul furnizor de Informații Specifice fiecarui departament
2. Modul pentru interfață grafică
3. Modul pentru achiziția datelor necesare
Modul furnizor de Informații Specifice se află pe servere ce ar trebui să fie implementate de fiecare deținător de site. Acestea vor furniza informația necesară aplicațiilor mobile prin intermediul unor webview-uri.
Figură 13 – Arhitectura aplicatiei.
Modul achiziției de date se face prin implementarea unui webview ce va încărca un URL diferit de fiecare dată când un item din listview este selectat.
Web_fragment. xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/relative_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
/>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="bottom"
ads:adSize="SMART_BANNER"
ads:adUnitId="ca-app-pub-9347452276960512/4287377582"
></com.google.android.gms.ads.AdView>
</RelativeLayout>
String.xml
<!– Page Url –>
<!– Page Url –>
<string-array name="pageurl">
<item>http://www.ace.ucv.ro//</item>
<item>http://www.dae.ucv.ro//</item>
<item>http://www.dcti.ucv.ro/</item>
<item>http://www.robotics.ucv.ro/</item>
<item>http://cis01.central.ucv.ro/evstud/</item>
<item>http://www.eestec.go.ro//</item>
<item>http://www.osace.ucv.ro/</item>
</string-array>
Modul pentru interfață grafică este reprezentat de un sliding menu / navigation drawer , după care din partea stânga se va putea lansa un listview ce va conține ca items , departamentele oferti de facultate si pe care le-am inclus in această aplicație.
activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!– The main content view –>
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<!– The navigation drawer list –>
<ListView
android:id="@+id/slider_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#f4f2ea"
android:choiceMode="singleChoice"
android:divider="#dddddd"
android:dividerHeight="1dp" />
</android.support.v4.widget.DrawerLayout>
List_item.xml care are un imageview si un textview si un id de referinta .icon si .titles Valorile acestora se pot vedea in res>values>strings.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:padding="5dp" >
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:contentDescription="@string/imgdesc" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="7dp"
android:layout_toRightOf="@id/icon"
android:gravity="center_vertical"
android:textColor="#000000"
android:textSize="20sp" />
</RelativeLayout>
Imaginile din dreptul fiecarui department din lista se gasesc in res>drawable la diferite rezolutii
<!– Icons –>
<array name="icons">
<item>@drawable/acepic</item>
<item>@drawable/automaticapic</item>
<item>@drawable/dctipic</item>
<item>@drawable/mecrobpic</item>
<item>@drawable/evdstdpic</item>
<item>@drawable/eestecpic</item>
<item>@drawable/osacepic</item>
</array>
Lista sporturilor se gaseste practice in acelasi fisier, string.xml
<!– Title –>
<string-array name="titles">
<item>AceUcv</item>
<item>DAE</item>
<item>DCTI</item>
<item>DMR</item>
<item>EvdStd</item>
<item>EESTEC</item>
<item>OSACE</item>
</string-array>
Styles.xml pentru aplicarea temei aplicatiei
<resources>
<!–
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
–>
<style name="AppBaseTheme" parent="android:Theme.Light">
<!–
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
–>
</style>
<!– Application theme. –>
<style name="AppTheme" parent="AppBaseTheme">
<!– All customizations that are NOT specific to a particular API-level can go here. –>
</style>
</resources
3.3 Proiectarea Sistemului
3.3.1 Ierarhia de Clase
Clasele utilizate in aceasta aplicatie sunt MainActivity, MyWebViewFragment, SlideItemListener, OnBackPressedInterface, CustomAdapter, RowItem., ViewHolder si About
Figura 14. Diagrama UML a claselor
3.3.2 Descrierea Claselor
MainActivity class extinde Activity, ceea ce inseamna ca aceasta va crea o ferestra care trebuie populata cu element.
Activity LifeCycle
Diagrama Urmatoare va arata pasii importanti ai unei Activitati.
Figura 15 Activity Lifecycle
MainActivity Class conține metoda onCreate() care este invocată la începutul aplicației . Rolul acestei metode este de a crea interfața vizuală.
Celalalte metode folosite în această clasă sunt:
– SetTitle() schimbă titlul asociat cu această Activitate.
– OnCreateOptionsMenu() inițializează conținutul meniului . Aceasta este folosită pentru a crea un menu aplicației. Când este apăsat butonul de menu al telefonului.
– OnOptionsItemSelected() este apelată de fiecare dată când un item din menu este selectat.
– OnPostCreat() și OnConfigurationChanged() trebuie apelate când se folosește ActionBarDrawerToogle o clasă ce oferă o modalitate de a folosi împreună un DrawerLayout și un ActionBar pentru a implementa design-ul pentru un NavigationDrawer.
– OnBackPressed () este folosită pentru a implementa butonul de back al telefonului. Oferă posibilitatea de a naviga înapoi prin webviews.
MyWebviewFragment Class contine metoda onCreateView() ce creaza view-ul pentru fragment. Aceasta clasa extinde Fragment care În esența sa, reprezintă o anumită operație sau interfață care se execută într-o activitate mai mare. Interacțiunea cu fragmente se face prin FragmentManager, care pot fi obținute prin intermediul Activity.getFragmentManager () și Fragment.getFragmentManager ().
In aceasta clasa se activeaza mai multe setari necesare pentru webview, cum ar fi:
setJavaScriptEnable() – pentru a putea vizualiza video care sunt preluate de pe site-uri ce sunt create cu JavaScript (ex. Youtube.com )
setLoadWithOverviewMode() – ne reda o privire de ansamblu a site-ului.
setUseWideViewPort() – ne prezinta site-ul intr-o vedera larga, precum browserul de la un calculator.
setBuiltInZoomControls() – activeaza zoom-ul.
Metoda setWebViewClient() este necesara in lucrul cu webview deoarece in momentul cand accesam o stire, telefonul va apela brwoserul implicit si ne va deschide stirea . Deaceea este folosita aceasta metoda.
OnPageFinished() – notifica telefonului ca pagina s-a incarcat.
OnBackPressedWebViews – este apelata cand userul apasa butonul de back.
CustomAdapter Class creaza listviewul ce contine un textview si un imageview pentru fiecae item in parte.
Metodele folosite sunt:
view GetView() – realizeaza o vedere si afiseaza datele intr-o pozitie specifica.
getCount() – Numara cate elemente sunt in lista.
getItem() – asociaza datele si returneaza pozitia acestora
getItemId() – returneaza id-ul randului asociat cu pozitia din lista
RowItem Class este folosita pentru stabilirea si obtinerea datelor din fiecare rand al listei ( imaginea, titlu si url-ul ).
3.3.3 Descrierea Interfetelor
Pentru implementarea acestei aplicații am folosit un sliding menu, ce deschide un site
într-un webview în momentul în care un item din listview este selectat.
Interfata de pornire
Aceasta interfata apare in momentul in care utilizatorul porneste aplicatie . Inainte sa se incarce site-ul va aparea un ProgressDialog cu mesajul Please wait for a moment.
Figura 16. Interfata de pornire
Interfata ecranului principal ce deschide siteul principal al facultatii ace.ucv.ro
Figura 17. Interfata ecranului principal
Interfata ListView unde este afișată lista de departamentelor pentru a fi selectate. Pentru a accesa această lista este de-ajuns să faceți click pe iconiță sau glisați cu degetul pe ecran din partea stânga. După cum se poate vedea fiecare item din listview are un textview ( numele departamentului) și un imageview specific fiecăruia.
Background-ul este stabilit prin intermediul urmatoarei linie de cod in activity_main.xml
android:background="#f4f2ea"
Figura 18. Interfata ListView
Interfata departamentului de automatica si electronica este prezentat in momentul cand il accesam din lista . Informatiile sunt preluate de pe dae.ucv.ro
Figura 20. Interfata DAE
Interfata departamentului de calculatoare si tehnologia informatiei unde se poate vedea ca site-ul dcti.ucv.ro se incarca in modul OverViewMode si putem folosi zoom-ul, prin pictograma care apare pe ecran sau folosim multi-touch.
Figura 21. Interfata DCTI
Interfata evidentei studentilor unde acestia se pot loga si isi pot vedea rezultatele examenelor si planificarea acestora
Figura 21. Interfata evidentei studentilor
4. Implementarea sistemului
Diagrama Use case
Aplicația este menită să fie folosită de o singură persoană cu scop informativ pe smartphone-ul personal. Prin urmare va există un singur use case având că funcționalități accesarea unor diferite site-uri.
Figura 22. Diagrama use case
Aceasta diagrama are urmatoarea logica :
1 – Userul deschide aplicatia
2 – Aplicatia deschide site-ul principal al facultati.
3 – Aplicatia verifica daca exista conexiune la internet si incearca sa deschida site-ul respectiv.
După ce s-a reușit încărcarea cu success , utilizatorul are posibilitatea de a-și alege departamentul specific din lista.
Ca aplicația să dispună de internet, avem nevoie ca în AndroidManifest.xml să adăugăm Uses Permision prin următoarea linie de cod.
<uses-permission android:name="android.permission.INTERNET"/>
Aplicatia poate fi folosita pe majoritatea smartphone-urilor cu sistem de Operare Android care au o versiune nu mai noua de 4.2.2 Jelly Bean si nu mai veche de 3.0.
Acest lucru poate fi observant si in AndroidManifest.xml prin urmatoarea linie de cod
<uses-sdk android:minSdkVersion="11"
android:targetSdkVersion="17" />
11 si 17 reprezinta API Level pentru fiecare versiune de Android in parte. Acest lucru se poate vedea in Android SDK Manager
Figura 23. SDK Manager
5. Testarea și evaluarea sistemului
Testarea s-a efectuat prin metoda black-box sau metoda funcțională cum mai este ea numită și care reprezintă o strategie de testare care se bazează pe cerințele și funcționalitățile aplicației.
Ceea ce înseamnă că nu trebuie să cunoștem modul în care s-a implementat aplicația ci doar cum ar trebui această să funcționeze bazându-ne pe specificațiile acesteia.
Pentru început am testat modul în care răspunde aplicația în momentul deschiderii și încercării de a accesa site-ul.
În momentul în care deschidem aplicația, am implementat un ProgessDialog în clasa MyWebViewFragment ce va afișa mesajul “Loading, Please wait for a moment “ în timp ce site-ul se încarcă.
mProgress = ProgressDialog.show(getActivity(), "Loading",
"Please wait for a moment…");
Figura 24. Progress Diallog
Ca si metoda propriu-zisa de testare a proiectului, am folosit 2 metode :
AVD ( Android Virtual Device ) Emulator, ce simuleaza versiunea de Android 5.0.1
Direct pe un telefon Samsung prin intermediul unui cablu USB
Daca utilizatorul nu are o conexiune deschisa la internet prin Date 3G sau Wireless, site-ul nu va putea fi incarcat, Asadar am ales sa incadrez metoda webview.loadUrlurl(); cu un try catch.
try {
webview.loadUrl(url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
6. Concluzii
Aplicațiile mobile au devenit în ziua de astăzi extreme de importante în viața omului de rând și nu numai. Odată cu apariția smartphone-urilor industria tehnologiei a avut o evoluție ascendentă în ceea ce privește vânzările/încasările. Principalul atuu al smartphone-urilor este că acestea au devenit practic un PC portabil.
Aproximativ toate funcționalitățile unui PC le găsim integrate și într-un smartphone. De la editare de text și navigare pe internet până la jocuri de înaltă calitate. Probabil cea mai importantă și folosită funcție a unui astfel de gadget este cea a conexiuni la internet.
Nu mai ai nevoie de PC pentru a dispune de internet, și asta face că accesul la informație să fie extrem de rapid.
În lume există aproximativ 900 de milioane de smartphone-uri cu sistem de operare Android, ceea ce face ca piața dezvoltatorilor de astfel de aplicații să fie extrem de vastă.
Google a venit în ajutorul dezvoltatorilor dar și al utilizatorilor creând magazinul online de aplicații, Google Play unde orice dezvoltator își poate posta aplicația creata , fie free fie cerând o anumită suma de bani pentru a putea fi download-ata.
În vara anului 2013, Google a anunțat că s-a depășit 1 milion de aplicații disponibile în Google Play, depășind astfel marele rival App Store de la compania Americană Apple.
Însă e bine de știut că multe aplicații disponibile pe Android au fost dezvoltate pentru a putea fi rulate și pe smartphone-uri cu sistem de operare IOS.
In concluzie, motivul pentru care am ales dezvoltarea unei aplicatii pentru Android este acela ca este un domeniu de viitor in industria IT. Pe aceasi platforma de dezvoltare se vor putea crea in curand aplicatii pentru noua inventie de la Google., ochelarii inteligenti Google Glass.
6.1 Imbunatatiri
Pe viitor doresc sa imbunatatesc aplicatia prin posbilitatea de a te loga cu contul de google +, facebook, twitter si alte retele de socializare, si desgiur sa fac disponibila functionalitatea de like/share a diferitelor anunturi pe diferte platform de socializare.
O alta functionalitate pe care vreau sa o adaug acestei aplicatii este aceea de a putea trimite unui prieten sau grupului de student colegi pe mail un articol sau o stire extrem de importanta.
Deasemenea as dori sa creez si o sectiune unde studentul isi poate crea notite intr-un calendar, precum programarea examenelor sau testelor de laborator si altele.
Acesta va primi un reminder cu cateva zile inainte pentru a incepe sa se pregateasca de examen si un reminder cu o ora inainte pentru a sti unde sa se prezinte pentru sustinerea examenului.
7. Referinte WEB
Limbajul de programare Java
http://www.cs.ubbcluj.ro/~vcioban/Geografie/MasterGeoPOO/Curs/CursJava.doc
[Definitie Smartphone]
http://despretot.info/2012/09/smartphone-definitie/
[Sistemul de operare Android]
http://documentatieandroid.ro/management_fisiere.html
http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)
[Descrierea Cercetarii actuale in domeniul temei ]
http://www.emarketer.com/Article/Smartphone-Users-Worldwide-Will-Total-175-Billion-2014/1010536
[Android Software Development Kit ]
http://ro.wikipedia.org/wiki/Android_%28sistem_de_operare%29#Software_Development_Kit
http://ro.wikipedia.org/wiki/Java_%28limbaj_de_programare%29
http://www.technobuffalo.com/2013/11/01/android-still-dominates-with-81-percent-market-share/
http://sirurile.weebly.com/software.html
http://developer.android.com/sdk/index.html#download
[Activity LifeCycle]
http://developer.android.com/training/basics/activity-lifecycle/index.html
Codul sursă
package com.baronescu.aceucv;
import java.util.ArrayList;
import java.util.List;
import com.baronescu.aceucv.R;
import com.google.android.gms.ads.*;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.ListView;
public class MainActivity extends Activity {
WebView webview;
public boolean canGoBack = true;
String[] menutitles;
TypedArray menuIcons;
String[] pageUrl;
AdView adView;
// nav drawer title
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private List<RowItem> rowItems;
private CustomAdapter adapter;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Look up the AdView as a resource and load a request.
// AdView adView = (AdView)this.findViewById(R.id.adView);
// LinearLayout linear_layout = (LinearLayout) findViewById(R.id.linear_layout);
// linear_layout.removeAllViews();
// linear_layout.addView(adView);
// AdRequest adRequest = new AdRequest.Builder().build();
// adView.loadAd(adRequest);
// webview = (WebView) findViewById(R.id.webview1);
// adView = (AdView)this.findViewById(R.id.adView);
// AdRequest adRequest = new AdRequest.Builder().build();
// adView.loadAd(adRequest);
mTitle = mDrawerTitle = getTitle();
menutitles = getResources().getStringArray(R.array.titles);
menuIcons = getResources().obtainTypedArray(R.array.icons);
pageUrl = getResources().getStringArray(R.array.pageurl);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.slider_list);
rowItems = new ArrayList<RowItem>();
for (int i = 0; i < menutitles.length; i++) {
RowItem items = new RowItem(menutitles[i], menuIcons.getResourceId(
i, -1), pageUrl[i]);
rowItems.add(items);
}
menuIcons.recycle();
adapter = new CustomAdapter(getApplicationContext(), rowItems);
mDrawerList.setAdapter(adapter);
mDrawerList.setOnItemClickListener(new SlideitemListener());
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.app_name, R.string.app_name) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
updateDisplay(0);
}
}
class SlideitemListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
updateDisplay(position);
}
}
private void updateDisplay(int position) {
String url = rowItems.get(position).getPageUrl();
Fragment fragment = new MyWebViewFragment();
Bundle bundle = new Bundle();
bundle.putString("url", url);
fragment.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
setTitle(menutitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.about:
Intent i = new Intent("com.baronescu.aceucv.ABOUT");
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/***
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.about).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()…
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
if (canGoBack)
((onBackPressedInterface) getFragmentManager().findFragmentById(
R.id.frame_container)).onBackPressedWebView();
if (!canGoBack)
super.onBackPressed();
}
} package com.baronescu.aceucv;
import com.baronescu.aceucv.R;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MyWebViewFragment extends Fragment implements
onBackPressedInterface {
ProgressDialog mProgress;
WebView webview;
View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.web_fragment, container, false);
Bundle bundle = getArguments();
String url = bundle.getString("url");
webview = (WebView) rootView.findViewById(R.id.webview1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);
settings.setUseWideViewPort(true);
settings.setBuiltInZoomControls(true);
settings.setPluginState(PluginState.ON);
mProgress = ProgressDialog.show(getActivity(), "Loading",
"Please wait for a moment…");
try {
webview.loadUrl(url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (mProgress.isShowing()) {
mProgress.dismiss();
}
}
});
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
AdView mAdView = (AdView) getView().findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("B3EEABB8EE11C2BE770B684D95219ECB")
.build();
mAdView.loadAd(adRequest);
}
@Override
public void onBackPressedWebView() {
// TODO Auto-generated method stub
if (webview.canGoBack()) {
webview.goBack();
((MainActivity) getActivity()).canGoBack = true;
} else {
((MainActivity) getActivity()).canGoBack = false;
getActivity().onBackPressed();
}
}
}
package com.baronescu.aceucv;
public interface onBackPressedInterface {
/**
* the user presses the back button
*/
public void onBackPressedWebView();
}
package com.baronescu.aceucv;
public class RowItem {
private String title;
private int icon;
private String pageUrl;
public RowItem(String title, int icon, String pageUrl) {
this.title = title;
this.icon = icon;
this.pageUrl = pageUrl;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
public String getPageUrl() {
return pageUrl;
}
public void setPageUrl(String pageUrl) {
this.pageUrl = pageUrl;
}
}
package com.baronescu.aceucv;
import java.util.List;
import com.baronescu.aceucv.R;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomAdapter extends BaseAdapter {
Context context;
List<RowItem> rowItem;
CustomAdapter(Context context, List<RowItem> rowItem) {
this.context = context;
this.rowItem = rowItem;
}
private class ViewHolder {
ImageView icon;
TextView title;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
convertView = null;
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
holder.title = (TextView) convertView.findViewById(R.id.title);
RowItem row_pos = rowItem.get(position);
// setting the image resource and title
holder.icon.setImageResource(row_pos.getIcon());
holder.title.setText(row_pos.getTitle());
convertView.setTag(holder);
}
return convertView;
}
@Override
public int getCount() {
return rowItem.size();
}
@Override
public Object getItem(int position) {
return rowItem.get(position);
}
@Override
public long getItemId(int position) {
return rowItem.indexOf(getItem(position));
}
}
package com.baronescu.aceucv;
import com.baronescu.aceucv.R;
import android.app.Activity;
import android.os.Bundle;
public class About extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.about);
}
}
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textviewabout"
android:text="Aceasta aplicatie este creata pentru Facultatea de Automatica, Calculatoare si Electronica si este destinata numai studentilor acesteia."
>
</TextView>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!– The main content view –>
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<!– The navigation drawer list –>
<ListView
android:id="@+id/slider_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#f4f2ea"
android:choiceMode="singleChoice"
android:divider="#dddddd"
android:dividerHeight="1dp" />
</android.support.v4.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:padding="5dp" >
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:contentDescription="@string/imgdesc" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="7dp"
android:layout_toRightOf="@id/icon"
android:gravity="center_vertical"
android:textColor="#000000"
android:textSize="20sp" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/relative_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
/>
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="bottom"
ads:adSize="SMART_BANNER"
ads:adUnitId="ca-app-pub-9347452276960512/4287377582"
></com.google.android.gms.ads.AdView>
</RelativeLayout>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/about"
android:orderInCategory="50"
android:showAsAction="never"
android:title="@string/about"/>
</menu>
<resources>
<!–
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
–>
<style name="AppBaseTheme" parent="android:Theme.Light">
<!–
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
–>
</style>
<!– Application theme. –>
<style name="AppTheme" parent="AppBaseTheme">
<!– All customizations that are NOT specific to a particular API-level can go here. –>
</style>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">AceUcv</string>
<string name="action_settings">Settings</string>
<string name="about">About</string>
<string name="imgdesc">imgdesc</string>
<!– Title –>
<string-array name="titles">
<item>AceUcv</item>
<item>DAE</item>
<item>DCTI</item>
<item>DMR</item>
<item>EvdStd</item>
<item>EESTEC</item>
<item>OSACE</item>
</string-array>
<!– Page Url –>
<string-array name="pageurl">
<item>http://www.ace.ucv.ro//</item>
<item>http://www.dae.ucv.ro//</item>
<item>http://www.dcti.ucv.ro/</item>
<item>http://www.robotics.ucv.ro/</item>
<item>http://cis01.central.ucv.ro/evstud/</item>
<item>http://www.eestec.go.ro//</item>
<item>http://www.osace.ucv.ro/</item>
</string-array>
<!– Icons –>
<array name="icons">
<item>@drawable/acepic</item>
<item>@drawable/automaticapic</item>
<item>@drawable/dctipic</item>
<item>@drawable/mecrobpic</item>
<item>@drawable/evdstdpic</item>
<item>@drawable/eestecpic</item>
<item>@drawable/osacepic</item>
</array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.baronescu.aceucv"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light" >
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
<activity
android:name="com.baronescu.aceucv.MainActivity"
android:configChanges="orientation|screenSize"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<activity
android:name="About"
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog"
>
<intent-filter>
<action android:name="com.baronescu.aceucv.ABOUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest> CD / DVD
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: Aplicatie Ide Pentru Ucv Ace App. Utilizând Eclipse Adt Android (ID: 109928)
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.
