Εφαρμογή Ενημέρωςησ για Κινηματογραφικέσ Σαινίεσ ςε Android

Σχετικά έγγραφα
ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H )

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

Η αξρή ζύλδεζεο Client-Server

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

Ηλεκηπονικά Απσεία και Διεπαθέρ

Οργάνωση και Δομή Παρουσιάσεων

Ενδεικτικά Θέματα Στατιστικής ΙΙ

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

Constructors and Destructors in C++

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

ΕΓΧΕΙΡΙΔΙΟ ΕΚΔΟΗ 8.0.0

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD

Μορθές Κακόβοσλοσ Κώδικα (Malicious Code)

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

Διαδικαζία μεηαθοράς δεδομένων Εκκαθαριζηικής για ηο Eιδικό ζημείωμα περαίωζης Φ.Π.Α

Σηα παξαδείγκαηα πνπ αθνινπζνύλ ρξεζηκνπνηήζεθαλ ην JQUIZ, ην JCROSS θαη ην JMATCH, πνπ αλαιπηηθά πεξηγξάθνληαη παξαθάηω.

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

Οδηγίες Ασφρματης Πρόσβασης (Wi-Fi) στο Διαδίκτυο


ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

Εγκατάσταση του πακέτου XAMPP. Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά Άριςτοσ Παςιάσ

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Ειζαγωγή ζηη Φωηογραθία. Χριζηάκης Σαζεΐδης EFIAP

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Εισαγωγή στη Φωτογραυία. Χριζηάκης Σαζεΐδης - EFIAP

Σημεία Ασύπματηρ Ππόσβασηρ (Hot-Spots)

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

ύζηεκα Ωξνκέηξεζεο Πξνζσπηθνύ (Έθδνζε 2) ΤΠΗΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΩΝ ΤΣΗΜΑΣΩΝ

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

Intel Accelerate Your Code

ΗΛΕΚΤΡΟΝΙΚΗ ΜΝΗΜΗ ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

ΔΦΑΡΜΟΜΔΝΑ ΜΑΘΗΜΑΣΙΚΑ ΣΗ ΧΗΜΔΙΑ Ι ΘΔΜΑΣΑ Α επηέκβξηνο Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(x,y) =

ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε. Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

CytaInfo+ έλα application γηα ηε Cyta.

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

CT_back office. Internet Business Hellas

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

Εηζαγσγή ζηελ επηζηήκε ησλ ππνινγηζηώλ. Λνγηζκηθό Υπνινγηζηώλ Κεθάιαην 7ν Λεηηνπξγηθά Σπζηήκαηα

Κβαντικοί Υπολογισμοί. Πέκπηε Γηάιεμε

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

Πνηα λνκίδεηο όηη ζα είλαη ε ζπλνιηθή αληίζηαζε κηαο ζπλδεζκνινγίαο δύν αληηζηαηώλ ζπλδεδεκέλεο ζε ζεηξά; Γηαηί;...

Παλεπηζηήκην Θεζζαιίαο. Πνιπηερληθή Σρνιή. Τκήκα Μεραληθώλ Η/Υ, Τειεπηθνηλσληώλ & Δηθηύσλ. [ ]

ΦΥΣΙΚΗ ΤΩΝ ΡΕΥΣΤΩΝ. G. Mitsou

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

ΒΗΜΑ 2. Εηζάγεηε ηνλ Κωδηθό Πξόζβαζεο πνπ ιακβάλεηε κε SMS & δειώλεηε επηζπκεηό Όλνκα Πξόζβαζεο (Username) θαη ην ζαο

Άσκηση 1 - Μοπυοποίηση Κειμένου

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

UML (Unified Modeling Language )

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη

ΙΣΤΟΡΙΑ ΤΟΥ ΑΡΧΑΙΟΥ ΚΟΣΜΟΥ

Σημειώζεις Οδηγίες για ηη τρήζη ηοσ προγράμμαηος Acronis True Image Home

Έκδοζη /10/2014. Νέα λειηοσργικόηηηα - Βεληιώζεις

EL Eνωμένη στην πολυμορυία EL A8-0046/319. Τροπολογία

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

Δπαστηπιότητα 1 - ανάπτςξη, μεταγλώττιση, αποσυαλμάτωση και. εκτέλεση ππογπάμματορ

ΣΕΙ Δυτικήσ Μακεδονίασ, Παράρτημα Καςτοριάσ Τμήμα Πληροφορικήσ και Τεχνολογίασ Υπολογιςτών

ΜΕΛΕΣΗ E.O.K. ΜΕ ΑΙΘΗΣΗΡΑ ΘΕΗ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΗΛΕΚΤΡΟΛΟΓΙΑ/Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 08/09/2014

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

ISO/IEC 27001:2005 Certificate No: IS Aegate Ltd 2011 All rights reserved

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

Η επιζκόπηζη ηης έμμιζθης ενηολής ζηην Αλλοδαπή. Καηεξίλα Γαιαλνπνύινπ, Intellectual Property Manager, Microsoft Ειιάο Α.Ε.

ΔΙΑΚΡΙΤΑ ΜΑΘΗΜΑΤΙΚΑ. Αθροίσματα, Γινόμενα και Ασσμπτωτικές Εκτιμήσεις

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ Γευηέρα 11 Ηουνίου 2018 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΜΑΘΖΜΑΣΗΚΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ. (Ενδεικηικές Απανηήζεις)

ΜΗΧΑΝΟΛΟΓΙΚΟ ΣΧΔΓΙΟ ΙΙ

Δξγαιεία Καηαζθεπέο 1 Σάμε Σ Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ. ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Φαθόο κε ζσιήλα.

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΣΥΣΤΗΜΑΤΑ ΑΛΓΕΒΡΑ Α ΛΥΚΕΙΟΥ. 1. Να ιπζνύλ ηα ζπζηήκαηα. 1 0,3x 0,1y x 3 3x 4y 2 4x 2y ( x 1) 6( y 1) (i) (ii)

5 η Δργαζηηριακή Άζκηζη Κσκλώμαηα Γσαδικού Αθροιζηή/Αθαιρέηη

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

Αιγόξηζκνη Δνκή επηινγήο. Απιή Επηινγή ύλζεηε Επηινγή. Εηζαγσγή ζηηο Αξρέο ηεο Επηζηήκεο ησλ Η/Τ. introcsprinciples.wordpress.

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

Transcript:

ΑΣΕΙ ΘΕΑΛΙΑ ΧΟΛΗ ΣΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ Σμήμα Μηχανικών Πληροφορικής ΣΕ Εφαρμογή Ενημέρωςησ για Κινηματογραφικέσ Σαινίεσ ςε Android ΠΣΤΧΙΑΚΗ ΕΡΓΑΙΑ Γιάννησ Κοροντάνησ (ΑΜ:T03478) Επιβλέπων: Γεώργιος Κακαρόντζας ΛΑΡΙΑ 2015

«Εγώ ν Ιωάλλεο Κνξνληάλεο, δειώλω ππεύζπλα όηη ε παξνύζα Πηπρηαθή Εξγαζία κε ηίηιν «Εθαξκνγή Ελεκέξωζε γηα Κηλεκαηνγξαθηθέο Ταηλίεο ζε Android» είλαη δηθή κνπ θαη βεβαηώλω όηη: Σε όζεο πεξηπηώζεηο έρω ζπκβνπιεπηεί δεκνζηεπκέλε εξγαζία ηξίηωλ, απηό επηζεκαίλεηαη κε ζρεηηθή αλαθνξά ζηα επίκαρα ζεκεία. Σε όζεο πεξηπηώζεηο κεηαθέξω ιόγηα ηξίηωλ, απηό επηζεκαίλεηαη κε ζρεηηθή αλαθνξά ζηα επίκαρα ζεκεία. Με εμαίξεζε ηέηνηεο πεξηπηώζεηο, ην ππόινηπν θείκελν ηεο πηπρηαθήο απνηειεί δηθή κνπ δνπιεηά. Αλαθέξω ξεηά όιεο ηηο πεγέο βνήζεηαο πνπ ρξεζηκνπνίεζα. Σε πεξηπηώζεηο πνπ ηκήκαηα ηεο παξνύζαο πηπρηαθήο έγηλαλ από θνηλνύ κε ηξίηνπο, α- λαθέξω ξεηά πνηα είλαη ε δηθή κνπ ζπλεηζθνξά θαη πνηα ηωλ ηξίηωλ. Γλωξίδω πωο ε ινγνθινπή απνηειεί ζνβαξόηαην παξάπηωκα θαη είκαη ελήκεξνο(-ε) γηα ηελ επέιεπζε ηωλ λνκίκωλ ζπλεπεηώλ» < ππνγξαθή > Γηάλλεο Κνξνληάλεο

Δγθξίζεθε από ηελ ηξηκειή εμεηαζηηθή επηηξνπή Σόπος: Ημερομηνία: ΕΠΙΣΡΟΠΗ ΑΞΙΟΛΟΓΗΗ 1. 2. 3.

Πεπίλητη ηόρνο ηεο εξγαζίαο ήηαλ ν ρξήζηεο λα κπνξεί κέζσ ελόο θηλεηνύ κε ιεηηνπξγηθό Android λα κπνξεί λα ελεκεξσζεί ζρεηηθά κε ηηο ηαηλίεο πνπ πξνβάιινληαη ζην θηλεκαηνγξάθν, ηηο πξνζερώο θαη ηηο δεκνθηιείο. ε απηέο ηηο ηξεηο θαηεγνξίεο ρσξίζηεθε θαη ην κελνύ ώζηε λα κπνξεί ν ρξήζηεο λα ε- πηιέμεη ηε θαηεγνξία πνπ ζέιεη θαη αξγόηεξα λα επηιέμεη θαη από κηα από ηηο ηαηλίεο ηεο ιίζηαο γηα λα δηαβάζεη ηηο αηνκηθέο πιεξνθνξίεο (πεξίιεςε, βαζκνινγία, εζνπνηνύο, trailer, εκεξνκελία πξνβνιήο). Γηα ηελ επίηεπμε ησλ ζηόρσλ ηεο εθαξκνγήο θαη ηελ αμηνπηζηία θαη ηελ ζσζηή ελεκέξσζε ησλ δεδνκέλσλ γηα θάζε ηαηλία έγηλε ρξήζε API ηνπ site themoviedb.org, ε εθαξκνγή αλαπηύρζεθε ζηε γιώζζα πξνγξακκαηηζκνύ Java καδί κε ηελ βνήζεηα ηεο βηβιηνζήθεο ηεο Google Volley θαη ε ζρεδίαζε ησλ πιεξνθνξηώλ θαη ν ηξόπνο πνπ εκθαλίδνληαη ζηελ εθαξκνγή έγηλε κε ηελ ρξήζε XML. -i-

Δςσαπιζηίερ Θα ήζεια λα επραξηζηήζσ ηνλ επηβιέπνληα θαζεγεηή θύξην Γεώξγην Καθαξόληδα γηα ηελ βνήζεηα πνπ κνπ πξόζθεξε ζε πξνβιήκαηα πνπ αληηκεηώπηζα ζηελ εξγαζία θαζώο θαη γηα ηελ εηνηκόηεηα ζηελ νπνία βξηζθόηαλ γηα θάζε απνξία κνπ. ηε ζπλέρεηα ζα ήζεια λα επραξηζηήζσ θίινπο θαη ζπγγελείο έρνληαο γλώζε ή θαη όρη γηα ηνλ ηνκέα θάλεθαλ πνιινί ρξήζηκεο νη απόςεηο θαη ηδέεο ηνπο γηα ηελ εθαξκνγή. Γηάλλεο Κνξνληάλεο εκεξνκελία -iii-

Πεπιεσόμενα ΠΔΡΙΛΗΦΗ... I ΔΤΥΑΡΙΣΙΔ... III ΠΔΡΙΔΥΟΜΔΝΑ... V 1 ΔΙΑΓΧΓΗ... 7 1.1 ΛΔΙΣΟΤΡΓΙΚΑ ΤΣΗΜΑΣΑ ΓΙΑ ΚΙΝΗΣΔ ΤΚΔΤΔ... 9 1.2 ΟΡΙΜΟ ΠΡΟΒΛΗΜΑΣΟ... 11 2 ANDROID... 12 2.1 ΥΑΡΑΚΣΗΡΙΣΙΚΑ... 12 2.2 ΔΦΑΡΜΟΓΔ ANDROID... 13 2.3 ΔΞΔΛΙΞΗ ΣΟΤ ANDROID... 14 2.4 ΑΡΥΙΣΔΚΣΟΝΙΚΗ ANDROID... 17 2.5 ΑΠΑΡΑΙΣΗΣΑ ΔΡΓΑΛΔΙΑ ΚΑΙ ΤΣΑΣΙΚΑ ΣΟΙΥΔΙΑ ΓΙΑ ΑΝΑΠΣΤΞΗ ΔΦΑΡΜΟΓΩΝ Δ ANDROID... 18 2.6 ΑΦΑΛΔΙΑ ANDROID... 19 3 ΠΔΡΙΓΡΑΦΗ ΣΗ ΥΔΓΙΑΗ ΣΗ ΔΦΑΡΜΟΓΗ... 21 3.1 ΔΓΚΑΣΑΣΑΗ ΚΑΙ ΠΔΡΙΓΡΑΦΗ ECLIPSE IDE... 21 3.2 ΔΓΚΑΣΑΣΑΗ ΣΟΤ ECLIPSE... 21 3.3 ΓΗΜΙΟΤΡΓΙΑ ΔΝΟ PROJECT... 26 3.4 MANIFEST ΑΡΥΔΙΟ... 30 3.5 ΓΙΔΠΑΦΗ ΥΡΗΣΗ... 30 4 Η ΔΦΑΡΜΟΓΗ... 33 4.1 API... 33 4.2 JSON... 34 4.3 ΒΙΒΛΙΟΘΗΚΗ VOLLEY... 37 4.4 ΓΔΝΙΚΑ ΣΟΙΥΔΙΑ ΣΗ ΔΦΑΡΜΟΓΗ... 38 -v-

4.5 MAIN ACTIVITY... 39 4.5.1 Activity_main.xml... 43 4.5.2 String.xml... 45 4.5.3 Custom_shape_button.xml... 46 4.5.4 Manifest.xml της εφαρμογής... 49 4.6 APPCONTROLLER & LRUBITCACHE... 51 4.7 NOINTERNET... 53 4.8 NOWPLAYINGMOVIES, UPCOMINGMOVIES & POPULAR MOVIES... 56 4.9 SERVICEHANDLER... 60 4.10 MOVIE... 62 4.11 MYADAPTER... 64 4.12 SINGLENPACTIVITY... 69 4.13 ΑCTOR... 77 4.14 ΑCTORS... 80 4.15 ΑCTORADAPTER... 81 4.16 CREWONE... 85 4.17 CREW... 88 4.18 CREWADAPTER... 89 4.19 TRAILER... 93 5 ΤΜΠΔΡΑΜΑΣΑ... 103 ΒΙΒΛΙΟΓΡΑΦΙΑ... 105 -vi-

1 Διζαγυγή Σελ ζεκεξηλή επνρή ε ηερλνινγία εμειίζζεηαη ξαγδαία, εηδηθά ηα ηειεπηαία ρξόληα ζην ηνκέα ηεο θηλεηήο ηειεθσλίαο ππάξρεη ηαρεία πξόνδνο θαη εμέιημε. Οη αλαβαζκίζεηο ησλ λέσλ εθδόζεσλ ησλ ιεηηνπξγηθώλ ζπζηεκάησλ πιένλ βγαίλνπλ ζε πνιύ ζύληνκα ρξνληθά δηαζηήκαηα ώζηε λα κπνξνύλ θα θαιπθηνύλ θαη νη κεγάιεο αλάγθεο θαη απαηηήζεηο πνπ απνρηά θαη ν ρξήζηεο, ηα κνληέια ησλ ζπζθεπώλ πνπ βγαίλνπλ ζηελ αγνξά είλαη αλαξίζκεηα θαη νη εθαξκνγέο πνπ έρεη ην θάζε ιεηηνπξγηθό ζην store ηνπ επίζεο είλαη ακέηξεηεο. Δίλαη αμηνζεκείσην επίζεο λα επηζεκαλζεί όηη πιένλ ζύκθσλα κε ην SmartInsight.com. Οη θνξεηέο ζπζθεπέο όπσο smartphones θαη tablets έρνπλ μεπεξάζεη ηνπο ρξήζηεο ησλ ζηαζεξώλ ππνινγηζηώλ Δηθόλα 1. Mobile vs Desktop -7-

Δπίζεο ζύκθσλα κε έξεπλεο ην 80% ησλ ρξεζηώλ ηνπ internet ρξεζηκνπνηνύλ smartphones γηα ηελ πινήγεζε ηνπο θαη 91% ζηαζεξό ππνινγηζηή ή laptop, 47% tablets θαη έλα 37% θνλζόιεο βηληενπαηρληδηώλ. Δηθόλα 2. Γεκνθηιείο πζθεπέο γηα πινήγεζε ζην Internet Ο ρξήζηεο έρεη κε απηό ηνλ ηξόπν έρεη πνιιέο επηινγέο από πνηα ζπζθεπή ζα επηιέμεη θαη κε πνηό ιεηηνπξγηθό κέρξη πνηεο εθαξκνγέο ζα ρξεζηκνπνηεί, ηα smartphones δειαδή έρνπλ γίλεη έλαο ππνινγηζηήο ρεξηνύ αθνύ νη εθαξκνγέο δίλνπλ ηελ δπλαηόηεηα ζε έλα θηλεηό λα έρεη ζρεδόλ ηηο ίδηεο ιεηηνπξγίεο κε έλαλ ζηαζεξό ππνινγηζηή, έρνληαο θαη ην πιενλέθηεκα όηη ζε νπνηνδήπνηε ρώξν θαη ρξόλν κπνξείο λα έρεηο πξόζβαζε ζην δηαδίθηπν. Σα smartphones θαιύπηνπλ έηζη θαη αλάγθεο γηα δηαζθέδαζε αιιά θαη επαγγεικαηηθέο αλάγθεο όπσο είλαη ε αλάγλσζε θαη ε απνζηνιή email ή αθόκα θαη ε ελεκέξσζε κέζσ εηδεζενγξαθηθώλ εθαξκνγώλ. -8-

1.1 Λειηοςπγικά ςζηήμαηα για Κινηηέρ ςζκεςέρ Σα πην βαζηθά ιεηηνπξγηθά ζπζηήκαηα θηλεηώλ ζπζθεπώλ είλαη ηα εμήο ηξία : 1)ANDROID 2)IOS 3)WINDOWS PHONE Δηθόλα 3- Λνγόηππν ANDROID To ANDROID είλαη έλα ιεηηνπξγηθό ζύζηεκα βαζηζκέλν ζε ππξήλα ηνπ Linux ην ν- πνίν είρε αλαπηπρζεί αξρηθά από ηελ Google θαη έπεηηα από ηελ Handset Alliance. Η αλάπηπμε εθαξκνγώλ ζην ANDROID γίλεηαη ζε Java. Απηή ηελ ζηηγκή νη ζπζθεπέο κε ιεηηνπξγηθό ANDROID είλαη απηέο κε ηηο πεξηζζόηεξεο πσιήζεηο ζε ζρέζε κε ηα IOS θαη WINDOWS PHONE θαζώο είλαη θαη ην πην δηαδεδνκέλν ιεηηνπξγηθό ζην θόζκν. Δηθόλα 4- Λνγόηππν IOS -9-

Σν IOS είλαη έλα ιεηηνπξγηθό ζύζηεκα πνπ αλαπηύρζεθε από ηελ Apple ην 2007 γηα θνξεηέο ζπζθεπέο πνπ έρεη παξάγεη ε ίδηα όπσο iphone, ipad, ipod θαη ζε αληίζεζε από ηελ Google θαη ηελ Μicrosoft ε Apple δελ δίλεη άδεηα εγθαηάζηαζεο ζε ζπζθεπέο άιισλ θαηαζθεπαζηώλ. Οη γιώζζεο πξνγξακκαηηζκνύ είλαη Objective C ή Swift. Ο θώδηθαο ζε Swift ζπλππάξρεη κε ηα αξρεία ηεο Objective C ζε έλα project κε πξόζβαζε ζην Objective C API. Σνλ Ιαλνπάξην ηνπ 2013 θαηακεηξήζεθαλ πεξηζζόηεξεο από 775.000 εθαξκνγέο εληόο ηνπ store. Δηθόλα 5- Λνγόηππν WINDOWS PHONE Σν ιεηηνπξγηθό WINDOWS PHONE είλαη κηα εηδηθή έθδνζε ηνπ γλσζηνύ ιεηηνπξγηθνύ WINDOWS ηεο Microsoft πνπ αθνξά ηα θηλεηά, ζηηο πξώηεο εθδόζεηο ηνπ είρε ην όλνκα Windows Mobile. Η αλάπηπμε ηνπ μεθίλεζε ζηηο αξρέο ηνπ 2000, από ην 2010 κέρξη ζήκεξα έρεη θηάζεη Νν2 ζηηο πσιήζεηο θαη ιέγεηαη από εηδηθνύο όηη κέρξη ην 2017 ζα ππάξμεη θαη άιιε αύμεζε ζηηο πσιήζεηο. Η γιώζζα πξνγξακκαηηζκνύ πνπ ρξεζηκνπνηείηαη είλαη ε C#. Καη ηα ηξία ιεηηνπξγηθά είλαη εμίζνπ θαιά, ν ρξήζηεο επηιέγεη έλα ιεηηνπξγηθό κε βάζε ηηο αλάγθεο ηνπ θαη ηελ εκθάληζε ή θαη πόζν νηθείν ηνπ είλαη ην ιεηηνπξγηθό. Από ηελ άιιε πιεπξά έλαο πξνγξακκαηηζηήο επηιέγεη λα αλαπηύμεη κηα εθαξκνγή γηα έλα ιεηηνπξγηθό κε βάζε ηηο γλώζεηο ηνπ θαη ζην πόζν εύθνιε πξόζβαζε έρεη ζηα απαξαίηεηα εξγαιεία γηα ηελ αλάπηπμε κηαο εθαξκνγήο ζε έλα ιεηηνπξγηθό ζύζηεκα. -10-

Πίλαθαο 1. Λεηηνπξγηθά πζηήκαηα θαη Πεξηβάιινλ Αλάπηπμεο Γιώζζα Πξνγξακκαηηζκνύ Πεξηβάιινλ Αλάπηπμεο Γηάζεκεο πκβαηέο πζθεπέο ANDROID Java Eclipse IDE, Android Studio Samsung, Motorola, LG, Nexus, Tablets WINDOWS PHONE C# Visual Studio, Silverlight Nokia IOS Objective C, Swift X Code IDE, iphone, ipad MAC OS X 1.2 Οπιζμόρ Πποβλήμαηορ Όπσο πξναλαθέξζεθε ηα θηλεηά πιένλ είλαη έλαο κηθξόο ππνινγηζηήο ζηελ αξρή ηεο ζρεδίαζεο ηνπο είραλ ζηόρν ηελ επηθνηλσλία κεηαμύ θνξεηώλ ζπζθεπώλ θαη ζηαζεξώλ ζπζθεπώλ, θαζώο όκσο ε ηερλνινγία πξνρώξεζε έπξεπε λα θαιπθηνύλ θαη άιιεο αλάγθεο όπσο ε πινήγεζε ζην δηαδίθηπν θαη έηζη ηα smartphones έρνπλ γίλεη αλαπόζπαζην θνκκάηη ηεο ηερλνινγίαο. Μαδί όκσο κε ηελ ηερλνινγία πνπ αλαπηύρζεθε ζηα θηλεηά, αλαπηύρζεθε θαη ν όγθνο πιεξνθνξηώλ πνπ δέρεηαη ν θάζε ρξήζηεο είηε από ηηο ηζηνζειίδεο είηε από ηηο εθαξκνγέο αθόκα θαη από ηα θνηλσληθά δίθηπα, ν θάζε ρξήζηεο ζέιεη λα έρεη κηα γξήγνξε πξόζβαζε ζηηο πιεξνθνξίεο πνπ αλαδεηά. ηόρνο ινηπόλ ηεο πηπρηαθήο ήηαλ ε αλάπηπμε κηαο εθαξκνγήο ζε ANDROID γηα ηελ ελεκέξσζε ησλ ρξεζηώλ ζρεηηθά κε ηαηλίεο, έρνληαο νκαδνπνηεκέλα ηα δεδνκέλα γηα θάζε θαηεγνξία έηζη ώζηε ν ρξήζηεο κε κηα απιή ζύλδεζε ζην δηαδίθηπν λα κπνξεί λα ελεκεξσζεί γηα ηηο ηαηλίεο είηε δηαβάδνληαο ηελ πεξίιεςε είηε βιέπνληαο θάπνηα βαζκνινγία ή αθόκα βιέπνληαο θαη ην trailer κηαο ηαηλίαο θαη όια απηά κέζσ κηαο εθαξκνγήο πνπ παξέρεη κηα γξήγνξε θαη αμηόπηζηε ελεκέξσζε. -11-

2 ANDROID Σν ιεηηνπξγηθό ζύζηεκα ANDROID είλαη έλα ζύζηεκα πνπ έρεη ζαλ βάζε ηνπ ην ινγηζκηθό Linux, πξόθεηηαη γηα έλα ιεηηνπξγηθό ζύζηεκα αλνηρηνύ θώδηθα γηα θνξεηέο ζπζθεπέο. Η πξώηε παξνπζίαζε ηνπ ιεηηνπξγηθνύ ANDROID έγηλε ην 2007 από ηελ Google παξάιιεια κε ηελ αλαθνίλσζε ηεο δεκηνπξγίαο ηνπ νξγαληζκνύ Open Handset Alliance. Όπσο πξναλαθέξζεθε ε δεκηνπξγία εθαξκνγώλ ζην ANDROID γίλεηαη κε ηελ γιώζζα πξνγξακκαηηζκνύ Java, πην ζπγθεθξηκέλα κε ηελ έθδνζε Java Micro Edition. Η Java Micro Edition είλαη κηα έθδνζε ηεο γιώζζαο Java πνπ δίλεη ηελ δπλαηόηεηα πξόζβαζεο ζην Java API γηα ηελ αλάπηπμε εθαξκνγώλ ή παηρληδηώλ ζε ζπζθεπέο κε πεξηνξηζκέλεο δπλαηόηεηεο όπσο ηα θηλεηά. Σν 2010 παξνπζηάζηεθε ε πξώηε ζπζθεπή κε ιεηηνπξγηθό ζύζηεκα ANDROID ην smartphone Nexus One. 2.1 Υαπακηηπιζηικά Σν ANDROID ραξαθηεξίδεηαη σο κηα αλνηρηή θαη δσξεάλ πιαηθόξκα γηα θηλεηά ηειέθσλα. Λέγνληαο αλνηρηή πιαηθόξκα πξνζδηνξίδνπκε ηελ δηαδηθαζία open source, νπζηαζηηθά όηαλ νη πξνγξακκαηηζηέο αλαπηύζζνπλ κηα εθαξκνγή ηνπο έρνπλ ειεύζεξε πξόζβαζε ζηα ραξαθηεξηζηηθά ηεο ζπζθεπήο πνπ ρξεζηκνπνηνύλ. Δπίζεο άιιν έλα πιενλέθηεκα πνπ παξέρεη ε δπλαηόηεηα open source ζην ANDROID είλαη ε άδεηα GNU General Public License 2 πνπ παξέρεη ηελ δπλαηόηεηα ζηνπο ρξήζηεο λα πξνζαξκόζνπλ ην ιεηηνπξγηθό θαη λα ζπκβάιινπλ ζηελ βειηίσζε ηνπ. Γηα λα γίλεη νπνηνζδήπνηε κέινο ηεο θνηλόηεηαο δελ ρξεηάδεηαη λα πιεξσζεί θάπνην ρξεκαηηθό πνζό, επίζεο νύηε γηα πλεπκαηηθά δηθαηώκαηα ή γηα άδεηεο ρξήζεο. Δπίζεο ην ANDROID είλαη κηα νινθιεξσκέλε πιαηθόξκα θαζώο παξέρεη αμηνπηζηία θαη αζθάιεηα θαηά ηελ ρξήζε ηνπ θαη κπνξεί λα ππνζηεξίμεη δηάθνξα είδε εθαξκνγώλ. Σν ANDROID SDK παξέρεη έλα ζύλνιν από API γηα ηελ ρξήζε ραξαθηεξηζηηθώλ ηεο ζπζθεπήο όπσο GPS, Wi-Fi, web browser, Bluetooth, θάκεξα θαη άιιεο πνιιέο ιεηηνπξγίεο. -12-

2.2 Δθαπμογέρ ANDROID Σν ANDROID δηαζέηεη ηελ κεγαιύηεξε ελεξγή θνηλόηεηα πξνγξακκαηηζηώλ θαζώο ην Play Store έρεη κηα κεγάιε πνηθηιία εθαξκνγώλ. Οη πξνγξακκαηηζηέο κπνξνύλ λα θαηεβάζνπλ ην ANDROID SDK από ην επίζεκν site ηνπ ANDROID δσξεάλ αθνύ πξώηα δηαβάζνπλ θαη ζπκθσλήζνπλ κε ηνπο όξνπο άδεηαο ρξήζεο πνπ έρεη ην παθέην αλάπηπμεο. Οη πξνγξακκαηηζηέο κπνξνύλ λα επηιέμνπλ αλάκεζα ζε δύν πνιύ γλσζηά θαη νινθιεξσκέλα πεξηβάιινληα αλάπηπμεο ην Android Studio θαη ην Eclipse. Σν Android Studio είλαη πην λέν πεξηβάιινλ αλάπηπμεο από όηη ην Eclipse θαζώο κεηξάεη κόλν έλαλ ρξόλν δσήο θαη πξνζπαζεί λα βειηηώζεη ηελ αλάπηπμε θώδηθα πξνζθέξνληαο έλα νινθιεξσκέλν ζύλνιν ιεηηνπξγηώλ. Πίλαθαο 2. Android Studio VS Ecl\ipse ADT Feature Android Studio Eclipse ADT Built System Gradle Ant Maven-based build dependencies Build variants and multiple APK generation Advanced Android code completion and refactoring YES YES YES NO NO NO Graphical layout editor YES YES APK signing and keystore management YES YES NDK support YES YES -13-

Σν Eclipse είλαη πην γλσζηό θαζώο έρεη πεξηζζόηεξα ρξόληα δσήο θαη ίζσο γηα απηό ην ζεσξνύλ θαη αμηόπηζην νη πεξηζζόηεξνη πξνγξακκαηηζηέο πνπ ην επηιέγνπλ, είλαη αξθεηά εύθνιν ζηε ρξήζε ηνπ θαη κε ηα δηάθνξα plug ins πνπ θπθινθνξνύλ ν πξνγξακκαηηζηήο κπνξεί λα πξνζζέζεη θαη άιιεο ιεηηνπξγίεο ζην πεξηβάιινλ. Με ιίγα ιόγηα είλαη θαζαξά ζηελ θξίζε ηνπ πξνγξακκαηηζηή πνηό πεξηβάιινλ ζα επηιέμεη γηα λα αλαπηύμεη ηηο εθαξκνγέο ηνπ θαη ηα δύν δηαηίζεληαη δσξεάλ. Οη εθαξκνγέο ANDROID κπνξνύλ λα αλαπηπρζνύλ ζε όια ηα ιεηηνπξγηθά Windows, ζε MAC OS X ή επόκελε έθδνζε ηνπ θαη ζε Linux Gnome ή KDE. Όπσο έρεη αλαθεξζεί θαη παξαπάλσ γιώζζα πξνγξακκαηηζκνύ είλαη ε Java ππάξρνπλ όκσο ζθέςεηο γηα ηελ πξνζζήθε ηεο γιώζζαο C++ ζε κεηέπεηηα εθδόζεηο. Παξόια απηά κέζσ ηνπ NDK (Native Development Kit) ηνπ ANDROID γίλεηαη δπλαηή ε ρξήζε κηαο εθαξκνγήο πνπ δελ βαζίδεηαη ζηε γιώζζα πξνγξακκαηηζκνύ Java. 2.3 Δξέλιξη ηος ANDROID Σν ιεηηνπξγηθό ANDROID είλαη ην επηθξαηέζηεξν ιεηηνπξγηθό ζηελ αγνξά ελώ πνιινί πηζηεύνπλ όηη ηα επόκελα ρξόληα ζα έρεη θαηαθηήζεη κε δηαθνξά ηελ πξώηε ζέζε αλάκεζα ζηα ιεηηνπξγηθά ζπζηήκαηα γηα θηλεηέο ζπζθεπέο. Καζώο ην ANDROID όηαλ έθαλε ηελ πξώηε εκθάληζε ηνπ ην 2007 άιιαμε ηα δεδνκέλα θαη ηηο ιεηηνπξγίεο γηα ηα θηλεηά ηειέθσλα. Η APPLE δελ είρε θαηαθέξεη λα δηαδώζεη αθόκα ηόζν πνιύ ην iphone θαη ηα WINDOWS PHONE ην 2010 έγηλαλ γλσζηά ζηελ αγνξά άξα ην ANDROID είρε εκθαλέο πξνβάδηζκα. Πιένλ ελ έηε 2015 ην ANDROID είλαη εγθαηεζηεκέλν ζε πεξηζζόηεξεο ζπζθεπέο από όια ηα άιια ιεηηνπξγηθά ζπζηήκαηα γηα θνξεηέο ζπζθεπέο. Απηή ηε ζηηγκή ππάξρνπλ γύξν ζηηο 40 εθδόζεηο ηνπ ANROID από ην 2007 κέρξη θαη ζήκεξα. Η ηζηνξηθή εμέιημε ησλ εθδόζεσλ απεηθνλίδεηαη ζηελ παξαθάησ ζειίδα ζηελ εηθόλα 6. Με πην πξόζθαηε έθδνζε ην Marhmallow 6.0 θαη έρνληαο 82% πσιήζεσλ παγθνζκίσο ζε smartphones ην δεύηεξν εμάκελν ηνπ 2015 είλαη νξαηή θαη πξνθαλήο ε επηθξάηεζε ηνπ ηα επόκελα ρξόληα. -14-

Δηθόλα 6- Ιζηνξία ηνπ ANDROID -15-

Όια ηα ινγηζκηθά κέζα ζην θύθιν δσήο ηνπο παξέρνπλ λέεο εθδόζεηο ώζηε λα βειηηώλνληαη, λα πξνζζέηνπλ θαηλνύξγηα ραξαθηεξηζηηθά θαη λα βξίζθνληαη πάληα θνληά ζηε γεληθή εμέιημε ηεο ηερλνινγίαο ώζηε λα παξέρνπλ ζην ρξήζηε όζν ην δπλαηόλ θαιύηεξε εκπεηξία θαηά ηελ ρξήζε. Παξαηεξόληαο ηηο θσδηθέο νλνκαζίεο ησλ εθδόζεσλ ηνπ ANDROID θαηαιαβαίλνπκε όηη ε Google έρεη όλνκαζεη ηελ θάζε έθδνζε κε βάζε είδε δαραξνπιαζηηθήο θαη νη νλνκαζίεο αθνινπζνύλ κηα αιθαβηηηθή ζεηξά. Δηθόλα 7- Ολνκαζίεο Δθδόζεσλ -16-

2.4 Απσιηεκηονική ANDROID Η αξρηηεθηνληθή ηνπ ιεηηνπξγηθνύ ζπζηήκαηνο ANDROID είλαη έλα ζύλνιν από επίπεδα όπνπ ην θαζέλα παξέρεη ππεξεζίεο δηαζύλδεζεο πξνο ην αλώηεξν επίπεδν. ηε παξαθάησ εηθόλα κπνξεί λα δεη θαλείο όια ηα επίπεδα ηεο αξρηηεθηνληθήο. Δηθόλα 8- Αξρηηεθηνληθή ANDROID Η αξρηηεθηνληθή ηνπ ιεηηνπξγηθνύ ANDROID ρσξίδεηαη ζε πέληε επίπεδα πνπ αλαιύνπλ όιε ηελ δνκή ηνπ ιεηηνπξγηθνύ. Σν επίπεδν πνπ ζεσξείηαη σο βάζε είλαη ν ππξήλαο ηνπ Linux όπνπ πεξηέρεη όινπο ηνπο drivers γηα ην πιηθό ηεο ζπζθεπήο όπσο γηα παξάδεηγκα ε θάκεξα, ν ππξήλαο εκπεξηέρεη ηνλ driver γηα ηελ θάκεξα έηζη ώζηε ν ρξήζηεο λα κπνξεί λα ρξεζηκνπνηήζεη ηελ θάκεξα κε όπνηνλ ηξόπν ζέιεη. ηε ζπλέρεηα αθνινπζεί ην δεύηεξν επίπεδν πνπ ρσξίδεηαη ζε δύν νκάδεο ην επίπεδν βηβιηνζήθεο θαη ην επίπεδν πεξηβάιινλ ρξόλνπ εθηέιεζεο. Απηό ην πεξηβάιινλ πεξηέρεη όιεο ηηο βηβιηνζήθεο ηνπ ιεηηνπξγηθνύ ζπζηήκαηνο ANDROID, νπζηαζηηθά νη βηβιηνζήθεο ιεηηνπξγνύλ ζαλ έλα ζεη εληνιώλ πνπ νξίδνπλ ζηε ζπζθεπή ηνλ ηξόπν πνπ ζα δηαρεηξηζηνύλ δηαθνξεηηθά δεδνκέλα. Γηα παξάδεηγκα ην Media Framework Library ππνζηεξίδεη ην playback θαη ηελ αλαπαξαγσγή ήρνπ, βίληεν θαη εηθόλαο. -17-

Κύξην κέξνο ηνπ επίπεδνπ πεξηβάιινλ ρξόλνπ εθηέιεζεο είλαη ε εηθνληθή κεραλή Dalvik. Οη πξνγξακκαηηζηέο πνπ αλαπηύζζνπλ κηα εθαξκνγή ANDROID γξάθνπλ θώδηθα ζε γιώζζα Java θαη ε εηθνληθή κεραλή Dalvik επηηξέπεη ζε νπνηαδήπνηε εθαξκνγή ANDROID λα εθηειείηαη ζε κηα μερσξηζηή δηεξγαζία κε ην δηθό ηεο ζηηγκηόηππν. To όηη κηα εθαξκνγή εθηειείηαη σο κηα μερσξηζηώ δηεξγαζία είλαη ζεκαληηθό δηόηη, α) θακία εθαξκνγή δελ εμαξηάηαη από ηελ εθηέιεζε άιιεο εθαξκνγήο. β) ε πεξίπησζε απνηπρίαο εθηέιεζεο κηαο εθαξκνγήο δελ επεξεάδεη ηελ εθηέιεζε ησλ ππόινηπσλ εθαξκνγώλ πνπ εθηεινύληαη ζηελ ζπζθεπή. Με απηό ηνλ ηξόπν είλαη θαη πην απιή ε δηαρείξηζε κλήκεο ηεο ζπζθεπήο. Σν επόκελν επίπεδν νλνκάδεηαη Application Framework. Απηό ην επίπεδν δίλεη ηελ δπλαηόηεηα πξόζβαζεο ζηνπο δηαρεηξηζηέο ζε δηάθνξεο ιεηηνπξγίεο ζρεηηθέο κε ην πιηθό. Οη δηαρεηξηζηέο νξίδνληαη σο έλα παθέην από Java θιάζεηο πνπ δηαρεηξίδνληαη βαζηθέο ιεηηνπξγίεο ηνπ θηλεηνύ όπσο εθαξκνγέο ηνπ θηλεηνύ, ελαιιαγέο κεηαμύ ησλ πξνγξακκάησλ ή δηαδηθαζηώλ θαη λα ππνινγίδεη ηελ θπζηθή ηνπνζεζία ηεο ζπζθεπήο. Σέινο, πάλσ από ηα άιια επίπεδα βξίζθεηαη ην επίπεδν Δθαξκνγώλ (Applications). ε απηό ην επίπεδν ππάξρνπλ νη βαζηθέο ιεηηνπξγίεο ηνπ ηειεθώλνπ όπσο γηα παξάδεηγκα ε δεκηνπξγία θιήζεο, ε πξόζβαζε ζην δηαδίθηπν ή ε πξόζβαζε ζηεο επαθέο. 2.5 Απαπαίηηηα Δπγαλεία και ςζηαηικά ηοισεία για Ανάπηςξη Δθαπμογών ζε ANDROID Κάζε εθαξκνγή ζην ιεηηνπξγηθό ANDROID έρεη αλαπηπρζεί σο έλα ζύλνιν από Activities. Σν Activity είλαη κηα θιάζε πνπ είλαη κηα ιεηηνπξγία ε ελέξγεηα ηεο εθαξκνγήο, ζπλήζσο θάζε νζόλε ζηελ εθαξκνγή είλαη θαη έλα δηαθνξεηηθό Activity. Σν Activity αλαπηύζζεηαη ζε γιώζζα Java, επίζεο θάζε Activity κπνξεί λα επηθνηλσλεί ή λα ζπλδέεηαη κε έλα άιιν Activity αθνύ είλαη θνκκάηη ηνπ ζπλόινπ κηαο εθαξκνγήο. Δπίζεο ππάξρνπλ εξγαιεία πνπ είλαη απαξαίηεηα γηα ηελ αλάπηπμε εθαξκνγώλ ζε ANDROID θαη ρξεζηκνπνηνύληαη γηα ηελ πινπνίεζε ηνπ θώδηθα. Γηα παξάδεηγκα ην Android Development Tools πνπ είλαη έλα plug in ηνπ πεξηβάιινληνο αλάπηπμεο Eclipse ην νπνίν παξέρεη ζην πξνγξακκαηηζηή έλα ζεη από εξγαιεία γηα ηελ αλάπηπμε εθαξκνγώλ γηα ANDROID. -18-

Σν Android Development Tools δηαζέηεη ζπληάθηεο γηα Java θαη γηα XML έηζη ώζηε λα αλαπηύζζνληαη ηα Activities ζε Java θαη κε ζεη θαλόλσλ XML λα νξίδνπκε ηελ εκθάληζε ηεο εθαξκνγήο, επίζεο παξέρεη ιεηηνπξγία απνζθαικάησζεο θαη γηα ηνπο δύν ζπληάθηεο. Δπίζεο θάζε εθαξκνγή ANDROID πεξηέρεη έλα αξρείν manifest.xml ην νπνίν θαζνξίδεη ην όλνκα ηεο εθαξκνγήο, ηελ έθδνζε ηεο θαη από πνηα ζηνηρεία απαξηίδεηαη. Οη πιεξνθνξίεο ηνπ manifest ρξεζηκνπνηνύληαη ζηηο παξαθάησ δηαδηθαζίεο : Δγθαηάζηαζε ή Αλαβάζκηζεο ηεο εθαξκνγήο Όλνκα εθαξκνγήο Δηθνλίδην εθαξκνγήο Απαηηήζεηο ζπζηήκαηνο Δθθίλεζε Δθαξκνγήο 2.6 Αζθάλεια ANDROID Σν ANDROID θαζώο έρεη ζρεδηαζηεί γηα λα είλαη αλνηρηό ινγηζκηθό θαη παξέρεη ζηηο εθαξκνγέο ηνπ πξνεγκέλν πιηθό αιιά θαη ιεηηνπξγηθό πξνο ρξήζε κε ζηόρν ηελ ηθαλνπνίεζε ησλ θαηαλαισηώλ. Γηα ηελ πξνζηαζία ινηπόλ απηνύ ηνπ ζηόρνπ, ε πιαηθόξκα ANDROID παξέρεη αζθάιεηα πνπ εμαζθαιίδεη ηελ πξνζηαζία ηνπ ρξήζηε, ησλ δεδνκέλσλ, ησλ εθαξκνγώλ, ηεο ζπζθεπήο θαη ηνπ δηθηύνπ. Γηα ηελ αζθάιεηα ελόο αλνηρηνύ ινγηζκηθνύ ρξεηάδεηαη κηα ζηαζεξή θαη δπλαηή αξρηηεθηνληθή θαη απζηεξά πξνγξάκκαηα αζθαιείαο. Καζώο ην ANDROID όπσο αλαθέξζεθε ζην πξνεγνύκελν θεθάιαην έρεη κηα αξρηηεθηνληθή κε πέληε επίπεδα πξνζθέξεη θαη κηα αζθάιεηα κε ηελ ειαζηηθόηεηα πνπ ρξεηάδεηαη κηα αλνηρηή πιαηθόξκα πξνζηαηεύνληαο όινπο ηνπο ρξήζηε ηεο πιαηθόξκαο. Δπίζεο εθηόο από ηελ πξνζηαζία ηνπ ρξήζηε ην ANDROID παξέρεη αζθάιεηα θαη ζηνλ πξνγξακκαηηζηή, αθνύ αθήλεη ηνλ πξνγξακκαηηζηή λα αλαπηύμεη ηελ εθαξκνγή ηνπ θαη παξέρνληαο ηνπ πξνεπηιεγκέλεο ξπζκίζεηο γηα ηελ αζθάιεηα ώζηε λα κελ ρξεηάδεηαη λα αλαπηύμεη θαη ηελ αζθάιεηα ηεο εθαξκνγήο. Σν ANDROID έρνληαο σο βάζε ηνπ ην Linux παξέρεη ζην ρξήζηε κνλαδηθή ηαπηόηεηα θαη ζε θάζε εθαξκνγή έηζη ώζηε νη ππόινηπεο εθαξκνγέο λα κελ έρνπλ πξόζβαζε ζε απηό. -19-

3 Πεπιγπαθή ηηρ σεδίαζηρ ηηρ Δ- θαπμογήρ ην παξαθάησ θεθάιαην ζα δνζνύλ θάπνηα βήκαηα γηα ηελ εγθαηάζηαζε ηνπ πεξηβάιινληνο αλάπηπμεο Eclipse IDE πνπ ρξεζηκνπνηήζεθε γηα ηελ αλάπηπμε ηεο εθαξκνγήο καδί κε κηα πεξηγξαθή ηνπ πεξηβάιινληνο. 3.1 Δγκαηάζηαζη και πεπιγπαθή Eclipse IDE Όπσο πξναλαθέξζεθε ππάξρνπλ δύν θύξηα πεξηβάιινληα αλάπηπμεο γηα ANDROID εθαξκνγέο, όπνηα θαη λα είλαη ε επηινγή ηνπ πξνγξακκαηηζηή αλάκεζα ζε απηά ηα δύν ε γιώζζα πξνγξακκαηηζκνύ πνπ ζα ρξεζηκνπνηήζεη ζα είλαη ε Java θαη νη εθαξκνγέο πνπ ζα δεκηνπξγεί ζα εθηεινύληαη από ηελ εηθνληθή κεραλή Dalvik. Οη εθαξκνγέο π- πόθεηληαη ζπλερώο ζε ηξνπνπνηήζεηο ώζηε λα παξέρνπλ ππνζηήξημε ζε δηάθνξεο ζπζθεπέο θαη ηηο αλαιύζεηο ησλ νζνλώλ ηνπο. Σν Eclipse είλαη έλα πεξηβάιινλ αλάπηπμεο πνπ αλαπηύρζεθε ζε Java, είλαη έλα από ηα πην δεκνθηιείο πεξηβάιινληα αλάπηπμεο γηα εθαξκνγέο Java θαζώο θαη γηα άιιεο γιώζζεο πξνγξακκαηηζκνύ αθνύ κε ηα απαξαίηεηα plugins ππάξρεη ε δπλαηόηεηα αλάπηπμεο εθαξκνγώλ θαη κε άιιεο γιώζζεο πξνγξακκαηηζκνύ. πγθεθξηκέλα γηα ηελ α- λάπηπμε εθαξκνγώλ ANDROID είλαη απαξαίηεηε ε εγθαηάζηαζε ηνπ plugin ADT ζην Eclipse. 3.2 Δγκαηάζηαζη ηος Eclipse Σα βήκαηα γηα ηελ εγθαηάζηαζε ηνπ Eclipse είλαη ηα παξαθάησ : Αξρηθά ζα πξέπεη λα γίλεη ιήςε θαη εγθαηάζηαζε ηνπ JAVA JDK 8, ην JAVA JDK δίλεη ηελ δπλαηόηεηα αλάπηπμεο θώδηθα ζε Java, εθηόο από ηελ έθδνζε ζα πξέπεη λα επηιερζεί θαη ην θαηάιιειν παθέην κε βάζε ην ππάξρνλ ιεηηνπξγηθό ζύζηεκα ηνπ ππνινγηζηή πνπ ζα εγθαηαζηαζεί ην JAVA JDK, όπσο θαίλεηαη θαη ζηελ παξαθάησ εηθόλα. -21-

Δηθόλα 9- Δπηινγή JDK κε βάζε ην ιεηηνπξγηθό Γεύηεξν βήκα είλαη ε ιήςε ηνπ Eclipse από ηελ ζειίδα https://eclipse.org/, από ην ίδην ην ANDROID ππνζηεξίδνληαη νη εθδόζεηο ηνπ Eclipse Indigo θαη νη λεόηεξεο κε πην πξόζθαηε ηελ έθδνζε Eclipse Mars. Αθνύ επηιέμνπκε ζην https://eclipse.org/downloads/ ην Eclipse IDE for Java Developers θαη ην αλ πξόθεηηαη λα εγθαηαζηαζεί ζε 32 ή 64 bit ζύζηεκα ην Eclipse ζα είλαη έηνηκν γηα εγθαηάζηαζε. Αθνύ γίλνπλ νη απαξαίηεηεο ξπζκίζεηο θαη νξηζηεί ην path ζην δίζθν γηα ην Eclipse ζεηξά έρεη λα νξηζζεί θαη ην workspace (πρ C:\Users\User\workspace). ην workspace ζα απνζεθεύνληαη όια ηα projects πνπ γίλνληαη κε ην πεξηβάιινλ αλάπηπμεο Eclipse. Κάζε θνξά πνπ αλνίγεη ην Eclipse δεηά νξηζκό ηνπ workspace όπσο θαίλεηαη ζηελ εηθόλα 10, εθηόο αλ επηιερζεί λα κελ μαλά εκθαληζηεί απηό ην κήλπκα. Μεηά ηνλ νξηζκό ηνπ workspace ην Eclipse αλνίγεη θαη είλαη έηνηκνο γηα ρξήζε. -22-

Δηθόλα 10- Οξηζκόο ηνπ workspace Δπόκελν βήκα είλαη ε εγθαηάζηαζε ηνπ ADT plugin γηα ηελ δπλαηόηεηα αλάπηπμεο εθαξκνγώλ ζε ANDROID. Αλνίγνληαο ην Eclipse πάλσ ζηε κπάξα ησλ επηινγώλ ππάξρεη ε επηινγή Help. Δπηιέγνπκε Help > Install New Software ζην λέν παξάζπξν (εηθόλα 12 Install) πνπ ζα αλνίμεη επηιέγνπκε Add ζηελ ζπλέρεηα ζα αλνίμεη άιιν έλα παξάζπξν (εηθόλα 12 Add Repository) ζην πιαίζην location ζα ζπκπιεξσζεί ε δηεύζπλζε https://dl-ssl.google.com/android/eclipse/ θαη ζην πιαίζην name ζα κπεη ην ίδην. Δηθόλα 11- Eclipse επηινγή Help -23-

Δηθόλα 12- Παξάζπξν ηνπ Install New Software Έπεηηα επηιέγνπκε OK ζην Add Repository θαη επηζηξέθνληαο ην παξάζπξν ηνπ Install επηιέγνπκε ην Developer tools θαη ζηε ζπλέρεηα Next, θάλνπκε απνδνρή ησλ όξσλ θαη έπεηηα επηιέγνπκε Finish ην Eclipse ζα αξρίζεη λα θαηεβάδεη ηα απαξαίηεηα εξγαιεία θαη ζην ηέινο ίζσο δεηήζεη λα θάλεη επαλεθθίλεζε. Μεηά ηελ επαλεθθίλεζε ηνπ Eclipse ζηε επηινγή Window (δίπια ζην Help) έ- ρνπλ πξνζηεζεί νη επηινγέο Android SDK Manager θαη Android Virtual Device Manager. Δπηιέγνληαο ην πξώην ζα αλνίμεη έλα λέν παξάζπξν πνπ ζα έρεη πξόζζεηα εξγαιεία γηα ηελ αλάπηπμε εθαξκνγώλ. Δπηιέγνληαο θάπνην παθέην θαη παηώληαο Install θαη έρνληαο απνδερηεί ηνπο όξνπο ν Manager μεθηλάεη ην θαηέβαζκα. -24-

Δηθόλα 13- Android SDK Manager ηε πεξίπησζε πνπ ν πξνγξακκαηηζηήο δελ έρεη κηα ζπζθεπή ANDROID ζηε θαηνρή ηνπ κπνξεί λα δεκηνπξγήζεη έλα πεξηβάιινλ πξνζνκνίσζεο κέζσ ηνπ Android Virtual Device Manager. Η δπλαηόηεηα ρξήζεο ελόο πεξηβάιινληνο πξνζνκνίσζεο είλαη έλα πνιύ ζεκαληηθό ζηάδην θαηά ηελ αλάπηπμε κηαο εθαξκνγήο, θαζώο κπνξείο λα νξίζεηο ζπζθεπή κε όηη αλάιπζε νζόλεο ζεο ώζηε λα δεηο ηελ εκθάληζε ηεο εθαξκνγήο θαη λα ππνβάιεηο ζε ηεζη ηελ ιεηηνπξγία ηεο εθαξκνγήο ώζηε λα ππάξρεη κηα εηθόλα γηα ην πώο ζα εθηειείηαη ε εθαξκνγή ζε έλα πξαγκαηηθό πεξηβάιινλ ANDROID. Μεηά ηελ δεκηνπξγία ηνπ AVD ην πεξηβάιινλ αλάπηπμεο ζα είλαη έηνηκν γηα ρξήζε. Δηθόλα 14- Android Virtual Device Manager -25-

3.3 Γημιοςπγία ενόρ Project ε απηό ην θεθάιαην ζα αλαιπζνύλ ηα βήκαηα πνπ γίλνληαη γηα ηελ δεκηνπξγία ελόο ANDROID project ζην Eclipse. Αθνύ αλνίμεη ην Eclipse επηιέγνπκε από ην κελνύ New > Android Application Project. ηε ζπλέρεηα ζα εκθαληζηεί έλα παξάζπξν πνπ ζα δεηάεη ην όλνκα ηεο εθαξκνγήο, ό- λνκα project θαη όλνκα ηνπ παθέηνπ, αθξηβώο από θάησ ζα δεηάεη λα νξηζηεί ε ειάρηζηε θαη ε κέγηζηε έθδνζε ηνπ ANDROID πνπ κπνξεί λα εθηειέζεη ηελ εθαξκνγή θαζώο θαη κε πνηα έθδνζε ζα γίλεη compile ν θώδηθαο θαη ηελ επηινγή θάπνηνπ ζέκαηνο εκθάληζεο. Δηθόλα 15 - Αξρηθνπνίεζε λένπ Project -26-

Αθνύ ζπκπιεξσζνύλ νη παξαπάλσ επηινγέο παηάκε Next γηα ην επόκελν βήκα. ε απηό ην βήκα ζπλήζσο αθήλνπκε ηηο πξνεπηιεγκέλεο επηινγέο α ) δεκηνπξγίαο εηθνληδίνπ β ) δεκηνπξγίαο activity γ ) δεκηνπξγίαο ηνπ project ζην workspace όπσο είλαη θαη επηιέγνπκε Next. Δηθόλα 16 - Γεκηνπξγία λένπ Project Έπεηηα ζα εκθαληζηεί έλα παξάζπξν ζρεηηθά κε ηνλ νξηζκό ηνπ default εηθνληδίνπ ηεο εθαξκνγήο ζπληζηάηαη θαη εδώ λα αθήζνπκε ηηο επηινγέο όπσο είλαη θαη λα πξνρσξήζνπκε ζην επόκελν βήκα παηώληαο ην Next. ε απηό ην βήκα πξέπεη λα νξηζηεί από ηνλ πξνγξακκαηηζηή ηη είδνπο activity ζέιεη λα αξρηθνπνηήζεη, είλαη θαζαξά ζέκα επηινγήο θαη ζρεδίαζεο γηα ην πώο έρεη ν ίδηνο ζπιιάβεη ηελ ηδέα ηεο δηεπαθήο ηνπ ρξήζηε. -27-

Δηθόλα 17 - Αξρηθνπνίεζε ηνπ Activity -28-

ην ηειεπηαίν βήκα νξίδεηαη ην όλνκα ηνπ activity θαη ηνπ layout θαη εδώ αθήλνπκε ηα πξνεπηιεγκέλα νλόκαηα θαζώο θαη ην αξρηθό activity ζα είλαη ην main activity. Δηθόλα 18 - Όλνκα Activity & Layout Γεληθά ηα νλόκαηα πνπ δίλνληαη ζηα activities ζα πξέπεη γηα δηεπθόιπλζε, λα είλαη ζρεηηθά κε ηελ ιεηηνπξγία ηνπ activity όπσο επίζεο ην θάζε layout ζα πξέπεη λα έρεη ίδην όλνκα κε ην Activity. Δπηιέγνληαο ην Finish ηειεηώλεη ε δηαδηθαζία ηεο δεκηνπξγίαο λένπ project θαη παξάγεηαη ν θάθεινο κε ηα θαηάιιεια αξρεία ηνπ project ζην Eclipse. -29-

3.4 Manifest απσείο Μεηά ηελ εγθαηάζηαζε ηνπ πεξηβάιινληνο αλάπηπμεο θαη θαηά ηελ δεκηνπξγία θάπνηνπ project, ην πεξηβάιινλ αλάπηπμεο παξάγεη έλα αξρείν manifest.xml. Όιεο νη εθαξκνγέο πξέπεη έλα manifest αξρείν, εθηόο από άιιεο πιεξνθνξίεο πνπ έρνπλ πξναλαθεξζεί ζε πξνεγνύκελν θεθάιαην ην αξρείν απηό παξέρεη θαη ηα παξαθάησ : Ολνκάδεη ην παθέην Java ηνπ project, ην νπνίν είλαη κνλαδηθό γηα θάζε εθαξκνγή Πεξηγξάθεη ηα ζπζηαηηθά ηεο εθαξκνγήο θαη πσο απηά αιιειεπηδξνύλ Οξίδεη πνηεο άδεηεο πξέπεη λα έρεη ε εθαξκνγή ώζηε λα απνθηήζεη πξόζβαζε ζε πξνζηαηεπκέλα κέξε ηνπ API θαη ηελ δπλαηόηεηα επηθνηλσλίαο κε άιιεο εθαξκνγέο Οξίδεη πνηα δηαδηθαζία εθηειέζεη πνην θνκκάηη ηεο εθαξκνγήο Οξίδεη πνηεο άδεηεο ρξεηάδεηαη θαλείο ώζηε λα κπνξεί λα αιιειεπηδξάζεη κε ηελ εθαξκνγή Οξίδεη ηελ ειάρηζηε έθδνζε ηνπ ιεηηνπξγηθνύ ζπζηήκαηνο πνπ κπνξεί λα εθηειέζεη ηελ εθαξκνγή Καη πεξηέρεη ηηο βηβιηνζήθεο πνπ είλαη ζπλδεδεκέλεο κε ηελ εθαξκνγή 3.5 Γιεπαθή Υπήζηη Όια ηα ζηνηρεία ηεο δηεπαθήο ηνπ ρξήζηε εληόο κίαο εθαξκνγήο ANDROID δεκηνπξγνύληαη ρξεζηκνπνηώληαο ηα αληηθείκελα View θαη ViewGroup. Σν View είλαη έλα α- ληηθείκελν πνπ ζρεδηάδεη θάηη ζηελ νζόλε ηνπ ρξήζηε, ην νπνίν ν ρξήζηεο κπνξεί λα ην ρξεζηκνπνηήζεη. Σν ViewGroup είλαη έλα αληηθείκελν πνπ είλαη ζύλνιν από View ή αθόκα θαη άιια ViewGroup ώζηε λα ζρεκαηηζηεί κηα δηάηαμε επαθήο ηνπ ρξήζηε. -30-

Δηθόλα 19 Ιεξαξρία πνπ νξίδεη έλα User Interface Η δηεπαθή ρξήζηε (user interface) γηα θάζε επηκέξνπο θνκκάηη ηεο εθαξκνγήο είλαη ν- ξηζκέλν κέζσ ηεο ηεξαξρίαο ηνπ View θαη ηνπ ViewGroup όπσο θαίλεηαη ζην δέλδξν ηεο εηθόλαο 15. Γηα λα νξηζηεί κηα δηάηαμε πξέπεη λα γίλεη αξρηθνπνίεζε ηνπ View, ν πην εύθνινο ηξόπνο θαη ν πην δξαζηηθόο είλαη κέζσ ελόο αξρείνπ XML. Σν XML πξνζθέξεη κηα δνκή επαλάγλσζηε θαη παξόκνηα κε απηή ηεο HTML. Σν όλνκα ελόο ζηνηρείνπ ζην XML αξρείν γηα θάπνην View είλαη αληίζηνηρν ηεο θιάζεο πνπ εθπξνζσπεί. Γηα παξάδεηγκα έλα < TextView > ζηνηρείν δεκηνπξγεί έλα View ηύπνπ TextView ζηελ νζόλε ηνπ ρξήζηε. Έλα παξάδεηγκα γηα ην πώο νξίδνπκε κηα δηάηαμε κέζσ ελόο αξρείνπ XML βξίζθεηαη ζηελ παξαθάησ εηθόλα. ην αθόινπζν παξάδεηγκα ε δηάηαμε είλαη ηύπνπ LinearLayout είλαη θάζεηε θαη πεξηέρεη έλα TextView θαη έλα Button. -31-

Δηθόλα 20 - Παξάδεηγκα XML -32-

4 Η Δθαπμογή ε απηό ην θεθάιαην ζα αλαθεξζνύλ νη ηερλνινγίεο πνπ ρξεζηκνπνηήζεθαλ γηα ηελ ζπγθεθξηκέλε πηπρηαθή ζην πξαθηηθό ηεο κέξνο. Καζώο θαη νη ιεηηνπξγίεο πνπ κπνξεί λα θάλεη ν ρξήζηεο κέζσ ηεο εθαξκνγήο θαη ζα αλαιπζνύλ ηα θνκκάηηα θώδηθα γηα θάζε ιεηηνπξγία ηεο εθαξκνγήο. 4.1 API Σν API, δειαδή ην Application Programming Interface ή ζηα ειιεληθά Γηαζύλδεζε Πξνγξακκαηηζκνύ Δθαξκνγώλ, είλαη ε δηεπαθή ησλ πξνγξακκαηηζηηθώλ δηαδηθαζηώλ πνπ παξέρεη έλα ιεηηνπξγηθό ζύζηεκα, κηα βηβιηνζήθε ή αθόκα θαη κηα εθαξκνγή ώζηε λα ππάξρεη ε δπλαηόηεηα λα γίλνληαη αηηήζεηο πξνο απηά από άιια πξνγξάκκαηα ή α- θόκα θαη παξνρή δεδνκέλσλ πξνο άιια πξνγξάκκαηα. Τπάξρνπλ αξθεηνί ηύπνη API γηα ιεηηνπξγηθά ζπζηήκαηα, εθαξκνγέο ή θαη ηζηνζειίδεο. Γηα παξάδεηγκα ην ιεηηνπξγηθό ζύζηεκα Windows ηεο Microsoft γηα ππνινγηζηέο παξέρεη έλα ζεη από APIs πνπ ρξεζηκνπνηείηαη από ην πιηθό ηνπ ζπζηήκαηνο όηαλ ν ρξήζηεο θάλεη αληηγξαθή θεηκέλνπ από κηα εθαξκνγή θαη επηθόιιεζε ηνπ θεηκέλνπ ζε κηα άιιε. Έλα άιιν παξάδεηγκα είλαη ηα APIs πνπ παξέρνληαη από ηζηνζειίδεο όπσο ην Amazon ή ην ebay πνπ παξέρνπλ ζηνπο πξνγξακκαηηζηέο ηελ δπλαηόηεηα λα αλαπηύμνπλ έλα web store κέζσ ησλ δεδνκέλσλ πνπ ηνπο δηαζέηνπλ. Βαζηθόο ζθνπόο κηαο δηεπαθήο είλαη λα νξίδεη θαη λα δηαηππώλεη ην ζύλνιν ησλ ιεηηνπξγηώλ ρσξίο λα παξέρεη πξόζβαζε ζην θώδηθα ησλ ζπγθεθξηκέλσλ ππεξεζηώλ. Η εθαξκνγή απηή πνπ αλαπηύρζεθε σο πηπρηαθή θάλεη ρξήζε ηνπ API πνπ παξέρεη ε ηζηνζειίδα themoviedb.org, ε ηζηνζειίδα απηή είλαη κηα βάζε δεδνκέλσλ γηα θηλεκαηνγξαθηθέο ηαηλίεο θαη ηειενπηηθέο ζεηξέο. Η ηζηνζειίδα απηή έρεη έλα επαξθέο documentation γηα ηελ ρξήζε ηνπ API από ηνλ πξνγξακκαηηζηή θαη ηελ εμάζθεζε ηνπ ζε απηό, ην documentation δίλεη παξαδείγκαηα θώδηθα γηα δηάθνξεο ιεηηνπξγίεο πνπ ζα πξέπεη λα αλαπηπρζνύλ ηα παξαδείγκαηα απηά κπνξεί λα ηα δηαβάζεη θαλείο ζε κηα από ηηο παξαθάησ γιώζζεο πξνγξακκαηηζκνύ. -33-

JavaScript Perl PHP Python Java Ruby C# Go Visual Basic Groovy Objective C Swift Δπίζεο εθηόο από ην API ε ηζηνζειίδα απηή παξέρεη γηα αξθεηέο από ηηο παξαπάλσ γιώζζεο κηα ζεηξά από βηβιηνζήθεο γηα ηελ δηεπθόιπλζε ηεο ζπιινγήο δεδνκέλσλ πνπ παξέρεη ην API. Σν documentation παξακέλεη ελεξγό θαζώο θαηά ηελ αλάπηπμε ηεο εθαξκνγήο δελ ππήξρε documentation γηα ηηο γιώζζεο Java θαη Swift ην νπνίν πξνζηέζεθε πξόζθαηα. Με ην ζπγθεθξηκέλν API έρνπλ αλαπηπρζεί πνιιέο εθαξκνγέο - από media players κέρξη βάζεηο γηα ηαηλίεο - γηα αξθεηά ιεηηνπξγηθά ζπζηήκαηα γηα θνξεηέο ζπζθεπέο ή κε όπσο ANDROID, WINDOWS PHONE, IOS, OS X, WINDOWS, LINUX. 4.2 JSON Σα δεδνκέλα ηνπ API είλαη ζε κνξθή JSON. Η κνξθή JSON είλαη κηα κνξθή θεηκέλνπ πνπ κπνξεί λα δηαβαζηεί από ηνλ άλζξσπν θαη ρξεζηκνπνηείηαη γηα ηελ κεηάδνζε δεδνκέλσλ, είλαη γξακκέλε ζε δεπγάξηα κεηαβιεηήο ηηκήο. Δίλαη ε θύξηα κνξθή δεδνκέλσλ πνπ ρξεζηκνπνηείηαη γηα ηελ αζύγρξνλε επηθνηλσλία server θαη browser αληηθαζηζηώληαο ην XML. Η JSON κνξθή είλαη κηα επέθηαζε από ηελ γιώζζα πξνγξακκαηηζκνύ JavaScript απηό θαίλεηαη θαη από ην όλνκα ηεο JSON αθνύ είλαη αθξσλύκην ηνπ JavaScript Object Notation, όκσο ζεσξείηαη αλεμάξηεηε από ηελ JavaScript αθνύ κπνξεί λα γίλεη παξαγσγή θαη ζπιινγή ηεο JSON κνξθήο θαη κε άιιεο γιώζζεο πξνγξακκαηηζκνύ. -34-

Οη ηύπνη δεδνκέλσλ πνπ ρξεζηκνπνηεί ε JSON κνξθή βξίζθνληαη ζην παξαθάησ πίλαθα ζηε ζπλέρεηα ζα αθνινπζήζεη έλα παξάδεηγκα κνξθήο JSON. Πίλαθαο 3 - Σύπνη δεδνκέλσλ ζηε JSON ΣΤΠΟ ΑΡΙΘΜΟ ΤΜΒΟΛΟΔΙΡΑ ΛΟΓΙΚΟ ΠΙΝΑΚΑ ΑΝΣΙΚΔΙΜΔΝΟ NULL(KENO) ΠΔΡΙΓΡΑΦΗ Δίλαη έλαο δεθαδηθόο πξνζεκαζκέλνο αξηζκόο Δίλαη κηα ζεηξά από ραξαθηήξεο κέζα ζε δηπιά εηζαγσγηθά Οη ηηκέο πνπ παίξλεη είλαη true ή false Δίλαη κηα ηαμηλνκεκέλε ιίζηα κε ηηκέο όπνπ ε θάζε ηηκή κπνξεί λα είλαη νπνηνζδήπνηε ηύπνο. Όια ηα ζηνηρεία ηνπ πίλαθα βξίζθνληαη κέζα ζε αγθύιεο ηύπνπ [] θαη ρσξίδνληαη κεηαμύ ηνπο κε, Δίλαη κηα κε ηαμηλνκεκέλε ζπιινγή από δεύγε όλνκαηηκή, όπνπ ην όλνκα είλαη πάληα string. Κάζε όλνκα κέζα ζε έλα αληηθείκελν πξέπεη λα είλαη κνλαδηθό. Όια ηα ζηνηρεία ηνπ αληηθεηκέλνπ πεξηβάιινληαη από αγθύιεο ηύπνπ { θαη ρσξίδνληαη κεηαμύ ηνπο κε, Δίλαη ε ηηκή πνπ ραξαθηεξίδεη ην θελό. -35-

{ "firstname": "John", "lastname": "Smith", "isalive": true, "age": 25, "address": { "streetaddress": "21 2nd Street", "city": "New York", "state": "NY", "postalcode": "10021-3100", "phonenumbers": [ { "type": "home", "number": "212 555-1234", { "type": "office", "number": "646 555-4567" ], "children": [], "spouse": null Όπσο είλαη νξαηό ζην παξάδεηγκα από πάλσ αλάκεζα ζην δεύγνο όλνκα-ηηκή κεηά ην όλνκα ππάξρεη πάληα :, αλεμάξηεηα ηνλ ηύπν δεδνκέλσλ. -36-

4.3 ΒΙΒΛΙΟΘΗΚΗ VOLLEY ηελ επηζηήκε ηεο πιεξνθνξηθήο βηβιηνζήθε νξίδεηαη κηα ζπιινγή από ξνπηίλεο πνπ κπνξεί λα ρξεζηκνπνηήζεη έλα πξόγξακκα. Οη βηβιηνζήθεο πεξηέρνπλ ππνβνεζεηηθό θώδηθα θαη δεδνκέλα παξέρνληαο κε απηό ηνλ ηξόπν ππεξεζίεο ζε πξνγξάκκαηα. Κάπνηα εθηειέζηκα αξρεία είλαη πξνγξάκκαηα θαη βηβιηνζήθεο ηαπηόρξνλα, αιιά νη πεξηζζόηεξεο βηβιηνζήθεο δελ είλαη εθηειέζηκεο. Σα εθηειέζηκα αξρεία θαη νη βηβιηνζήθεο αλαθέξνληαη ην έλα ζηνλ θώδηθα θαη ηα δεδνκέλα ηνπ άιινπ κέζσ κηαο δηαδηθαζίαο πνπ νλνκάδεηαη ζύλδεζε θαη ηελ πξαγκαηνπνηεί ν ζπλδέηεο. Σα ζύγρξνλα ιεηηνπξγηθά ζπζηήκαηα παξέρνπλ βηβιηνζήθεο πνπ πινπνηνύλ ηελ πιεηνλόηεηα ησλ ππεξεζηώλ ηνπ ζπζηήκαηνο. Έηζη, ν πεξηζζόηεξνο θώδηθαο πνπ ρξεζηκνπνηνύλ νη ζύγρξνλεο εθαξκνγέο παξέρεηαη από απηέο ηηο βηβιηνζήθεο θαη δελ ρξεηάδεηαη λα γξαθεί από ηελ αξρή γηα θάζε λέν πξόγξακκα. ηελ αλάπηπμε ηεο εθαξκνγήο ηεο πηπρηαθήο έγηλε ρξήζε ηεο βηβιηνζήθεο Volley ηεο Google. πγθεθξηκέλα έγηλε ρξήζε ζην θνκκάηη ιήςεο θσηνγξαθηώλ εζνπνηώλ, παξαγσγώλ θαη θηλεκαηνγξαθηθώλ ηαηληώλ από ην API θαη ζηε δηαδηθαζία ηεο εκθάληζεο ηνπο ζην ρξήζηε. Η βηβιηνζήθε Volley είλαη κηα HTTP βηβιηνζήθε πνπ θάλεη εύθνιε ηελ επηθνηλσλία κηαο εθαξκνγήο κε ην δηαδίθηπν. πγθεθξηκέλα πξνζθέξεη ζηνλ πξνγξακκαηηζηή ηα παξαθάησ πιενλεθηήκαηα : Απηόκαηε ξύζκηζε ησλ αηηεκάησλ δηαδηθηύνπ Πνιιαπιέο ηαπηόρξνλεο ζπλδέζεηο ζην δηαδίθηπν Τπνζηήξημε γηα αίηεκα πξνηεξαηόηεηαο Γπλαηόηεηα αθύξσζεο ηνπ αηηήκαηνο API. Μπνξεί λα αθπξσζεί έλα αίηεκα ή αθόκα θαη νιόθιεξε νκάδα αηηεκάησλ. Τπάξρεη ηεξαξρία πνπ θάλεη εύθνιε ηελ δεκηνπξγία ηνπ user interface κε ηα δεδνκέλα πνπ έρνπλ ιεθζεί από ην δηαδίθηπν Η βηβιηνζήθε Volley ππεξέρεη ζηηο δηαδηθαζίεο RPC πνπ ρξεζηκνπνηνύληαη γηα λα γεκίζνπλ κηα δηεπαθή ρξήζηε, όπσο γηα παξάδεηγκα ε ιήςε κηαο ζειίδαο απνηειεζκάησλ αλαδήηεζεο σο δνκεκέλα δεδνκέλα. Μπνξεί λα ρξεζηκνπνηεζεί γηα νπνηνδήπνηε πξσηόθνιιν θαη παξέρεη ππνζηήξημε γηα δεδνκέλα όπσο εηθόλεο, ζπκβνινζεηξέο αθόκα θαη γηα δεδνκέλα ζε κνξθή JSON. -37-

Ο ππξήλαο ηεο βηβιηνζήθεο Volley έρεη δεκηνπξγεζεί ζην ρώξν απνζήθεπζεο AOSP (Android Open Source Project). Ο πην εύθνινο ηξόπνο γηα λα πξνζζέζεη θαλείο ηελ βηβιηνζήθε απηή ζε έλα project είλαη ε εθηέιεζε ηεο παξαθάησ εληνιήο ζε έλα command window. git clone https://android.googlesource.com/platform/frameworks/volley Μεηά ηελ ιήςε ηνπ αξρείνπ επόκελν βήκα είλαη ε πξνζζήθε ηεο βηβιηνζήθεο ζην project. ηε πεξίπησζε ρξήζεο ηνπ πεξηβάιινληνο αλάπηπμεο Eclipse ε δηαδηθαζία γίλεηαη πην εύθνιε αλ κεηαηξαπεί ην αξρείν ζε jar αξρείν ή αθόκα θαιύηεξα αλ βξεζεί θαη ε βηβιηνζήθε ζε κνξθή jar. Η δηαδηθαζία πξνζζήθεο είλαη ε παξαθάησ Παηώληαο δεμί θιηθ ζην θάθειν ηνπ project πνπ εκθαλίδεηαη ζην Eclipse επηιέγνπκε ην Properties Δπηιέγνπκε ην Java Build Path θαη ηελ θαηεγνξία Libraries Σέινο παηάκε ην Add External JARs γηα λα αλαδεηήζνπκε ην jar πνπ θαηεβάζακε θαη λα ην πξνζζέζνπκε ζην project 4.4 Γενικά ζηοισεία ηηρ Δθαπμογήρ Η εθαξκνγή πνπ αλαπηύρζεθε πεξηιακβάλεη κηα νκάδα από θιάζεηο πνπ ζπλδένληαη κεηαμύ ηνπο θαη θάζε κηα από απηέο απνηειεί θαη κηα δηαθνξεηηθή ιεηηνπξγία ηεο ε- θαξκνγήο. Αξρηθή θιάζε ηεο εθαξκνγήο είλαη ην Main Activity νπζηαζηηθά είλαη ε αξρηθή ζειίδα ηεο εθαξκνγήο πνπ απνηειείηαη από έλα κελνύ επηινγώλ. Σν κελνύ επηινγώλ έρεη ηξεηο επηινγέο : α) Now Playing Movies β)upcoming Movies γ) Popular Movies ε θάζε επηινγή είλαη θαη έλα θνπκπί πνπ κεηαθέξεη ηνλ ρξήζηε ζηελ αληίζηνηρε θιάζε θαη ιεηηνπξγία. Αθνύ ν ρξήζηεο επηιέμεη κηα θαηεγνξία από ηηο παξαπάλσ κπνξεί λα ελεκεξσζεί ζρεηηθά κε ηηο θηλεκαηνγξαθηθέο ηαηλίεο πνπ αλήθνπλ ζε απηή ηελ θαηεγνξία, νη ηαηλίεο απηέο εκθαλίδνληαη ζην ρξήζηε ζε κηα κνξθή ιίζηαο καδί κε ηηο πην ζεκαληηθέο πιεξνθνξίεο όπσο ε εκεξνκελία παγθόζκηαο πξεκηέξαο, ην ηίηιν ηεο ηαηλίαο, ηελ επίζεκε αθίζα ηεο ηαηλίαο, θξηηηθή ηεο ηαηλίαο κέζν βαζκνινγίαο θαη ην είδνο ηεο ηαηλίαο. -38-

ηε ζπλέρεηα γηα πεξηζζόηεξεο πιεξνθνξίεο ν ρξήζηεο κπνξεί λα επηιέμεη κηα από ηηο ηαηλίεο ηεο ιίζηαο, κε απηό ηνλ ηξόπν ζα έρεη πξόζβαζε ζε πεξηζζόηεξεο πιεξνθνξίεο όπσο κηα πεξίιεςε ηεο ηαηλίαο, πνηνί εζνπνηνί παίδνπλ ζηελ ελ ιόγσ ηαηλία, πνηα ήηαλ ε νκάδα παξαγσγήο θαη ηέινο ηε δπλαηόηεηα πξνβνιήο ηνπ trailer ηεο ηαηλίαο. 4.5 Main Activity Σν Main Activity όπσο πξναλαθέξζεθε είλαη ην ελαξθηήξην κελνύ επηινγώλ ηεο εθαξκνγήο, ζε απηό ην ζεκείν ζα αλαιπζεί ε ιεηηνπξγία ηεο θιάζεο Main Activity ηνπ project. package com.example.test; import android.app.activity; import android.content.context; import android.content.intent; import android.net.connectivitymanager; import android.net.networkinfo; import android.os.bundle; import android.view.view; import android.widget.imageview; // εηλαη ην αξρηθν κελνπ ηεο εθαξκνγεο public class MainActivity extends Activity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ImageView image = (ImageView) findviewbyid(r.id.app_pic); Η κέζνδνο oncreate ρξεζηκνπνηείηαη θαηά ηελ εθθίλεζε ελόο Activity, νξίδεη κέζσ ηνπ setcontentview πνην xml αξρείν αληηζηνηρεί ζε πνηα θιάζε. Σν savedinstancestate ρξεζηκνπνηείηαη γηα ηελ πεξίπησζε πνπ έρνπκε απνζεθεύζεη δεδνκέλα γηα ηελ θαηάζηαζε ηεο εθαξκνγήο ζε απηό θαη ρξεηαζηεί λα μαλά δεκηνπξγεζεί ην Activity γηα θάπνην ιόγν ( π.ρ. πεξηζηξνθή ηνπ θηλεηνύ θαηά ηελ εθηέιεζε ηεο εθαξκνγήο) ηόηε ην savedinstancestate μαλά θαιείηαη. Δθόζνλ απηή ε κέζνδνο είλαη override ζα ηελ δνύκε ζε θάζε θιάζε. ηε ζπγθεθξηκέλε πεξίπησζε πεξηέρεη θαη ην ινγόηππν ηεο εθαξκνγήο. -39-

// κεηαβαζε ζην NowPlayingMovies αλ ππαξρεη ζπλδεζε public void nowplaying_movies(view view) { // Do something in response to button if(isnetworkavailable()==true) { Intent intent = new Intent(this, NowPlayingMovies.class); startactivity(intent); if(isnetworkavailable()==false){ Intent intent = new Intent(this, NoInternet.class); startactivity(intent); Η κέζνδνο nowplaying_movies ειέγρεη ηελ αληίδξαζε όηαλ παηεζεί ην αληίζηνηρν θνπκπί. Μέζσ ηεο κεζόδνπ isnetworkavailable γίλεηαη έιεγρνο αλ ππάξρεη ζύλδεζε ζην δηαδίθηπν. ηε πεξίπησζε πνπ ππάξρεη ζύλδεζε θαη επηιερζεί ην θνπκπί γίλεηαη κεηάβαζε ζηε θιάζε NowPlayingMovies, ζηε πεξίπησζε πνπ δελ ππάξρεη ζύλδεζε θαιείηαη ε θιάζε NoInternet. Αληίζηνηρα ιεηηνπξγνύλ θαη νη παξαθάησ κέζνδνη ηεο upcoming_movies θαη popular_movies, όηαλ ππάξρεη ζύλδεζε ε πξώηε θάλεη κεηάβαζε ζηε θιάζε Upcoming Movies όηαλ επηιερζεί ην αληίζηνηρν θνπκπί, ελώ ε δεύηεξε θάλεη κεηάβαζε ζηε θιάζε PopularMovies θαη ζηε πεξίπησζε πνπ επηιερζεί έλα από ηα θνπκπηά θαη δελ ππάξρεη ζύλδεζε γίλεηαη κεηάβαζε ζηε θιάζε NoInternet. // κεηαβαζε ζην UpcomingMovies αλ ππαξρεη ζπλδεζε public void upcoming_movies(view view) { // Do something in response to button if(isnetworkavailable()==true) { Intent intent = new Intent(this, UpcomingMovies.class); startactivity(intent); if(isnetworkavailable()==false){ Intent intent = new Intent(this, NoInternet.class); -40-

startactivity(intent); // κεηαβαζε ζην PopularMovies αλ ππαξρεη ζπλδεζε public void popular_movies(view view) { if(isnetworkavailable()==true) { Intent intent = new Intent(this, PopularMovies.class); startactivity(intent); if(isnetworkavailable()==false){ Intent intent = new Intent(this, NoInternet.class); startactivity(intent); Η κέζνδνο isnetworkavailable ειέγρεη κέζσ ηνπ getsystemservice εάλ ππάξρεη ζύλδεζε ζην δηαδίθηπν ή όρη θαη πεξλάεη ηελ θαηάιιειε ηηκή (true ή false)ζην activenetworkinfo. Πεγή ρξήζεο ηεο κεζόδνπ : stackoverflow private boolean isnetworkavailable() { ConnectivityManager connectivitymanager = (ConnectivityManager) getsystemservice(context.connectivity_service); NetworkInfo activenetworkinfo = connectivitymanager.getactivenetworkinfo(); return activenetworkinfo!= null && activenetworkinfo.isconnected(); Σέινο γηα ηελ θιάζε Main Activity είλαη νη κέζνδνη OnCreateOptionsMenu, onoptionsitemselected θαη About. Η πξώηε κέζνδνο αληηζηνηρεί ζηηο ξπζκίζεηο, ε δεύηεξε ζηηο επηινγέο πνπ έρνπλ νη ξπζκίζεηο θαη ε ηξίηε κέζνδνο είλαη ηε εκθαλίδεηαη κεηά ηελ επηινγή. @Override public boolean oncreateoptionsmenu(menu menu) { MenuInflater inflater = getmenuinflater(); inflater.inflate(r.menu.main, menu); return true; -41-

Οη επηινγέο εκθάληζεο ηνπ oncreateoptionsmenu παξνπζηάδνληαη κε βάζε ην main.xml ην νπνίν βξίζθεηαη ζην θάθειν menu ηνπ project. <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.test.mainactivity" > </menu> <item android:id="@+id/action_settings" android:orderincategory="100" android:showasaction="never" android:title="@string/action_settings"/> Η κέζνδνο onoptionsitemselected ιεηηνπξγεί κε κηα switch γηαηί ζε επόκελε έθδνζε ηεο εθαξκνγήο κπνξεί λα πξνζηεζνύλ θαη άιιεο επηινγέο ζηηο ξπζκίζεηο, κέζα ζηε switch όηαλ επηιεγνύλ νη ξπζκίζεηο ( case R.id.action_settings: ) εθηειείηαη ην About @Override public boolean onoptionsitemselected(menuitem item) { // Handle item selection switch (item.getitemid()) { case R.id.action_settings: About(); return true; default: return super.onoptionsitemselected(item); Σν About είλαη έλα pop-up πνπ κήλπκα πνπ εκθαλίδεη ηα credits ηεο εθαξκνγήο, θάλνληαο αλαθνξά ζην δεκηνπξγό ησλ εηθνληδίσλ θαη πεξηέρεη επίζεο έλα θείκελν θαη κηα θσηνγξαθία σο αλαθνξά ζην themoviedb.org όπσο ην απαηηνύλ νη όξνη ρξήζεο ηνπ API. Σν κήλπκα απηό εκθαλίδεηαη όηαλ επηιεγεί ην About από ηηο ξπζκίζεηο θαη εμαθαλίδεηαη όηαλ ν ρξήζηεο παηήζεη νπνηνδήπνηε ζεκείν ηεο νζόλεο. -42-

private void About() { CharSequence about[] = new CharSequence[] {"Developer : Giannis Korontanis", "Movie Info : TMDb ","\nthis product uses the TMDb API but is not endorsed or certified by TMDb. \n", "\nicon made by Freepik from www.flaticon.com \n " ; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.settitle(" "); builder.seticon(r.drawable.poweredbytmbd); builder.setitems(about, new DialogInterface.OnClickListener() { @Override public void onclick(dialoginterface dialog, int which) { ); builder.show(); 4.5.1 Activity_main.xml ηε ζπγθεθξηκέλε θιάζε αληηζηνηρεί ην xml αξρείν activity_main. Σν αξρείν απηό νξίδεη ηνλ ηξόπν εκθάληζεο ηεο θιάζεο όια ηα δεδνκέλα ζα εκθαλίδνληαη θάζεηα θαη ζην θέληξν ηεο νζόλεο ηνπ ρξήζηε. Έγηλε ρξήζε ηνπ RelativeLayout έηζη ώζηε ην θάζε αληηθείκελν λα ιακβάλεη κηα ζέζε ζε ζρέζε κε ην πξνεγνύκελν. RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context="com.example.test.mainactivity" > <ImageView android:id="@+id/app_pic" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/clapperboard" android:layout_margintop="15dp" android:layout_marginbottom="4dp" /> Αξρηθά έρνπκε ηελ εηθόλα ηεο εθαξκνγήο κε όλνκα clapperboard θαη id ην app_pic. Καηαιακβάλεη ρώξν 15dp πξνο ηα πάλσ θαη 4dp πξνο ηα θάησ. -43-

<Button android:id="@+id/btn1" android:layout_width="179dp" android:layout_height="wrap_content" android:text="@string/now_playing_movies" android:onclick="nowplaying_movies" android:background="@drawable/custom_shape_button" android:layout_margintop="15dip" android:layout_centerinparent="true" android:layout_below="@id/app_pic" /> ηε ζπλέρεηα έρνπκε ηελ εηηθέηα Button πνπ αληηπξνζσπεύεη ην πξώην θνπκπί κε όλνκα string/now_playing_movies θαη id btn1. Σν θνπκπί έρεη νξηζζεί από ην αξρείν xml custom_shape_button, όηαλ παηεζεί ην θνπκπί απηό ζηε θιάζε εθηειείηαη ε κέζνδνο nowplaying_movies. To btn1 βξίζθεηαη ζην θέληξν ηεο νζόλεο αθξηβώο από θάησ από ηελ εηθόλα ηεο εθαξκνγήο. Αθνινπζνύλ αθξηβώο από θάησ άιια δπν θνπκπηά κε id btn2 θαη btn3 κε text πνπ νξίδεηαη από string/upcoming_movies θαη string/popular_movies αληίζηνηρα έρνπλ αθξηβώο ηηο ίδηεο ηδηόηεηεο κε ην btn1, θαη ην έλα βξίζθεηαη θάησ από ην άιιν. ε πεξίπησζε επηινγήο ην btn2 εθηειείηαη ε κέζνδνο upcoming_movies θαη ζηελ πεξίπησζε ηνπ btn3 ε κέζνδνο popular_movies. <Button android:id="@+id/btn2" android:layout_width="179dp" android:layout_height="wrap_content" android:text="@string/upcoming_movies" android:onclick="upcoming_movies" android:background="@drawable/custom_shape_button" android:layout_margintop="15dip" android:layout_centerinparent="true" android:layout_below="@id/btn1"/> <Button android:id="@+id/btn3" android:layout_width="179dp" android:layout_height="wrap_content" android:text="@string/popular_movies" android:onclick="popular_movies" android:background="@drawable/custom_shape_button" android:layout_margintop="15dip" android:layout_centerinparent="true" android:layout_below="@id/btn2"/> </RelativeLayout> -44-

4.5.2 String.xml Έλα ζεκαληηθό αξρείν xml είλαη ην String.xml ην νπνίν πεξηέρεη δηάθνξα string πνπ ρξεζηκνπνηνύληαη από άιια xml ζηελ ηδηόηεηα android:text όπσο γηα παξάδεηγκα ζην activity_main.xml ππάξρεη ζην ηξίην θνπκπί ην android:text="@string/popular_movies" πνπ αλαγξάθεη πάλσ ζην θνπκπί ην θείκελν Popular. Σν string.xml ρξεζηκνπνηείηαη δειαδή όηαλ ζέινπκε λα έρνπκε καδεκέλα ηα text ζε έλα xml αξρείν θαη λα ηα θαινύκε έλα από απηά κηα νη πεξηζζόηεξεο θνξέο ζε θάπνηα xml πνπ ζέινπκε λα εκθαλίζνπκε ην ζρεηηθό θείκελν ζην user interface. Σν string.xml βξίζθεηαη ζην θάθειν values πνπ βξίζθεηαη ζην θάθειν res ηνπ project. <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name"><b>cinemadvisor</b></string> <string name="now_playing_movies">now Playing</string> <string name="upcoming_movies">upcoming</string> <string name="popular_movies">popular</string> <string name="action_settings">about</string> <string name="title_activity_upcoming_movies"><b>upcoming Movies</b></string> <string name="title_activity_popular_movies"><b>popular Movies</b></string> <string name="title_activity_now_playing_movies"><b>now Playing Movies</b></string> <string name="title_activity_single_npmovie"><b>movie Profile</b></string> <string name="rating">ratings: </string> <string name="cast">cast</string> <string name="crew">crew</string> <string name="title_cast"><b>cast</b></string> <string name="title_crew"><b>crew</b></string> <string name="overview">overview</string> <string name="title_logo">movie Trailer</string> <string name="trailer">trailer</string> <string name="error_player">sorry,there is no Trailer</string> <string name="backformore">press Back for more Info</string> <string name="nointernet">please Connect to Internet</string> <string name="pressback">press Back and </string> </resources> -45-

4.5.3 Custom_shape_button.xml Έλα αθόκα αξρείν xml πνπ θαιείηαη από ην main_activity.xml είλαη ην custom_shape_button.xml πνπ βξίζθεηαη ζην θάθειν drawable καδί κε ηα εηθνλίδηα ηεο εθαξκνγήο. Σν custom_shape_button.xml θαιείηαη ζηηο εηηθέηεο button σο εμήο : android:background = @drawable/custom_shape_button.xml Οπζηαζηηθά νξίδεη ην θνπκπί σο πξνο ηελ εκθάληζε ηνπ, δειαδή ην ζρήκα θαη ην ρξώκα ηνπ. <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <solid android:color="#a3e661"/> <corners android:radius="4dp"/> <padding android:left="10dp" android:right="10dp" android:top="5dp" android:bottom="5dp"/> <stroke android:width="1dp" android:color="#aeaeae"/> </shape> -46-

Δηθόλα 21 - Σειηθό απνηέιεζκα ηνπ Main Activity -47-

Δηθόλα 22 - Δπηινγή ηνπ About -48-

4.5.4 Manifest.xml ηηρ εθαπμογήρ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="17" android:targetsdkversion="20" /> <uses-permission android:name="android.permission.internet" /> <uses-permission android:name="android.permission.access_network_state" /> <application android:name=".appcontroller" android:allowbackup="true" android:icon="@drawable/clapperboard" android:label="@string/app_name" android:theme="@style/apptheme" > Αξρηθά όπσο θαίλεηαη από πάλσ νξίδνπκε ηελ ειάρηζηε έθδνζε ANDROID πνπ κπνξεί λα εθηειέζεη ηελ εθαξκνγή θαη ηελ έθδνζε γηα ηελ νπνία δεκηνπξγήζεθε. ηε ζπλέρεηα δίλεηαη ε άδεηα γηα ρξήζε ηνπ δηαδηθηύνπ θαη γηα ηελ θαηάζηαζε ηεο ζύλδεζεο θαη παξαθάησ νξίδνπκε ην εηθνλίδην ηεο εθαξκνγήο, ην όλνκα θαη ην ζέκα ηεο. Παξαθάησ αθνινπζεί ν νξηζκόο ησλ activities κε ηελ εηηθέηα πνπ ζα εκθαλίδνληαη ζην ρξήζηε κε βάζε ην αξρείν string.xml, θαζώο θαη ε ζειίδα εκθάληζεο ζην ρξήζηε ζα κπνξεί λα πεξηζηξαθεί (android:configchanges="orientation screensize" ) ή όρη (android:screenorientation="portrait"). Σέινο νξίδεηαη ε Main Activity σο MAIN θιάζε ηεο εθαξκνγήο θαη ζηε ζπλέρεηα νξίδνληαη θαη νη ππόινηπεο θιάζεηο θαη ν γνλέαο ηνπο κε ηνλ θαλόλα android:parentactivityname. <activity android:name=".mainactivity" android:label="@string/app_name" android:configchanges="orientation screensize" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".nowplayingmovies" android:label="@string/title_activity_now_playing_movies" android:parentactivityname=".mainactivity" -49-

-50- android:configchanges="orientation screensize" > <meta-data android:name="android.support.parent_activity" android:value=".mainactivity" /> </activity> <activity android:name=".upcomingmovies" android:label="@string/title_activity_upcoming_movies" android:parentactivityname=".mainactivity" android:configchanges="orientation screensize" > <meta-data android:name="android.support.parent_activity" android:value=".mainactivity" /> </activity> <activity android:name=".popularmovies" android:label="@string/title_activity_popular_movies" android:parentactivityname=".mainactivity" android:configchanges="orientation screensize" > <meta-data android:name="android.support.parent_activity" android:value=".mainactivity" /> </activity> <activity android:name=".singlenpactivity" android:label="@string/title_activity_single_npmovie" android:parentactivityname=".nowplayingmovies" android:screenorientation="portrait" > <meta-data android:name="android.support.parent_activity" android:value=".nowplayingmovies" /> </activity> <activity android:name=".actor" android:label="@string/title_cast" android:parentactivityname=".singlenpactivity" android:configchanges="orientation screensize" > <meta-data android:name="android.support.parent_activity" android:value=".singlenpactivity" /> </activity> <activity android:name=".crewone" android:label="@string/title_crew" android:parentactivityname=".singlenpactivity" android:configchanges="orientation screensize" > <meta-data