Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΠερσεφόνη Κομνηνός Τροποποιήθηκε πριν 8 χρόνια
1
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές 2 ο μέρος: Android ΠΜΣ: Τεχνολογίες Υπολογισμού και Δικτύων Τμήμα Μηχανικών Πληροφορικής ΤΕΙ Αθήνας
2
Τι είναι το Android To Android είναι ένα ανοιχτού κώδικα Linux- based Λειτουργικό Σύστημα για κινητές συσκευές (smartphones and tablet computers). Ανα π τύχθηε α π ό την Open Handset Alliance, υ π ό την καθοδήγηση της Google, και άλλων εταιριών. Το Android π ροσφέρει μία ενο π οιημένη π ροσέγγιση για την ανά π τυξη εφαρμογών για κινητές συσκευές. Η π ρώτη beta version του Android Software Development Kit (SDK) διανεμήθηκε α π ό την Google το 2007 και το Android 1.0 διανεμήθηκε το Σε π τέμβρη του 2008. Δίκτυα Κινητών Ε π ικοινωνιών και Εφαρμογές – Android 2
3
Χαρακτηριστικά του Android FeatureDescription Beautiful UIAndroid OS basic screen provides a beautiful and intuitive user interface. ConnectivityGSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wi-Fi, LTE, NFC and WiMAX. StorageSQLite, a lightweight relational database, is used for data storage purposes. Media supportH.263, H.264, MPEG-4 SP, AMR, AMR-WB, AAC, HE-AAC, AAC 5.1, MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF, and BMP MessagingSMS and MMS Web browserBased on the open-source WebKit layout engine, coupled with Chrome's V8 JavaScript engine supporting HTML5 and CSS3. Multi-touchAndroid has native support for multi-touch which was initially made available in handsets such as the HTC Hero. Multi-taskingUser can jump from one task to another and same time various application can run simultaneously. Resizable widgetsWidgets are resizable, so users can expand them to show more content or shrink them to save space Multi-LanguageSupports single direction and bi-directional text. GCMGoogle Cloud Messaging (GCM) is a service that lets developers send short message data to their users on Android devices, without needing a proprietary sync solution. Wi-Fi DirectA technology that lets apps discover and pair directly, over a high-bandwidth peer-to-peer connection. Android BeamA popular NFC-based technology that lets users instantly share, just by touching two NFC- enabled phones together. Δίκτυα Κινητών Ε π ικοινωνιών και Εφαρμογές – Android 3
4
Ιστορία του Android Δίκτυα Κινητών Ε π ικοινωνιών και Εφαρμογές – Android 4
5
Ε π ί π εδο API Platform VersionAPI LevelVERSION_CODE Android 5.122LOLLIPOP_MR1 Android 5.021LOLLIPOP Android 4.4W20KITKAT_WATCHKitKat for Wearables Only Android 4.419KITKAT Android 4.318JELLY_BEAN_MR2 Android 4.2, 4.2.217JELLY_BEAN_MR1 Android 4.1, 4.1.116JELLY_BEAN Android 4.0.3, 4.0.415ICE_CREAM_SANDWICH_MR 1 Android 4.0, 4.0.1, 4.0.214ICE_CREAM_SANDWICH Android 3.213HONEYCOMB_MR2 Android 3.1.x12HONEYCOMB_MR1 Android 3.0.x11HONEYCOMB Android 2.3.4 Android 2.3.3 10GINGERBREAD_MR1 Android 2.3.2 Android 2.3.1 Android 2.3 9GINGERBREAD Android 2.2.x8FROYO Android 2.1.x7ECLAIR_MR1 Android 2.0.16ECLAIR_0_1 Δίκτυα Κινητών Ε π ικοινωνιών και Εφαρμογές – Android 5
6
6 Περιγραφή της αρχιτεκτονικής Android software stack Δομείται στη μορφή μίας στοίβας που περιλαμβάνει εφαρμογές, το λειτουργικό σύστημα, περιβάλλον run- time, ενδιάμεσο λογισμικό, υπηρεσίες και βιβλιοθήκες
7
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 7 Linux Kernel Παρέχει ένα αφαιρετικό επίπεδο μεταξύ του hardware και των ανώτερων επιπέδων του Android stack. Βασίζεται σε linux 3.6 και παρέχει multitasking, υπηρεσίες συστήματος χαμηλού επιπέδου όπως διαχείριση μνήμης, επεξεργαστικής ισχύος και ισχύος κατανάλωσης και μία στοίβα από συσκευές όπως device display, wi-fi, audio, κτλ.
8
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 8 Android runtime - ART Όταν μία εφαρμογή (android app) χτίζεται στο Studio μεταγλωττίζεται σε ένα ενδιάμεσο bytecode format (DEX). Όταν η εφαρμογή φορτώνεται στη συσκευή, το ART χρησιμοποιεί μία διεργασία που ονομάζεται Ahead-of-time (AOT) compilation για τη μετάφραση του bytecode στις native εντολές που απαιτεί ο processor. Αυτό το format είναι γνωστό ως Executable and Linkable Format (ELF). Κάθε φορά που η εφαρμογή καλείται, η εκτελέσιμη έκδοση ELF είναι run, με αποτέλεσμα καλύτερες επιδόσεις εκτέλεσης. Σε παλαιότερες εκδόσεις υπήρχε η προσέγγιση Just-in-time compilation (Dalvik Virtual Machine το οποίο αντικαταστάθηκε πλήρως από την έκδοση 5.0 και μετά)
9
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 9 Android libraries Εκτός των standard βιβλιοθηκών για την ανάπτυξη εφαρμογών, το περιβάλλον ανάπτυξης εφαρμογών περιλαμβάνει και τις Android libraries. Πρόκειται για σύνολο από Java-based libraries που είναι καθορισμένες για το Android.
10
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 10 Android libraries android.app – Παρέχει πρόσβαση στο application model. android.content – διευκολύνει την πρόσβαση περιεχομένου, την ανταλλαγή μηνυμάτων μεταξύ εφαρμογών android.database – Για την πρόσβαση δεδομένων που δημοσιεύονται από content providers και περιλαμβάνει τις κλάσεις της SQLite database. android.graphics – Χαμηλού επιπέδου drawing API για 2D γραφικά (colors, points, filters, rectangles and canvases). android.hardware – Παρέχει ένα API για την πρόσβαση στο υλικό (accelerometer, light sensor). android.opengl – μία Java διεπαφή στο OpenGL ES 3D graphics rendering API. android.os – παρέχει εφαρμογές με πρόσβαση στις βασικές υπηρεσίες του λειτουργικού συστήματος (messages, system services and inter-process communication). android.media – Παρέχει κλάσεις για την υποστήριξη playback audio και video.
11
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 11 Android libraries android.net – Ένα σύνολο από APIs που παρέχουν πρόσβαση στο network stack. Περιλαμβάνει το android.net.wifi, που παρέχει πρόσβαση στο wireless stack του device. android.print – περιλαμβάνει μία σειρά από κλάσεις που επιτρέπουν να σταλεί περιεχόμενο σε διαμορφωμένους printers μέσα από Android applications. android.provider – Ένα σύνολο από κλάσεις που παρέχουν πρόσβαση σε standard Android content provider databases όπως αυτές που διατηρούνται από το calendar και contact applications. android.text – Για τη διαχείριση κειμένου. android.util – Ένα σύνολο από utility classes για τη λειτουργία tasks όπως string and number conversion, XML handling και date and time manipulation. android.view – Τα θεμελιώδη δομικά στοιχεία των application user interfaces. android.widget - Μία πλούσια συλλογή από pre-built user interface components όπως buttons, labels, list views, layout managers, radio buttons etc. android.webkit – Ένα σύνολο από κλάσεις που επιτρέπουν web-browsing capabilities να συμπεριληφθούν (built) σε εφαρμογές.
12
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 12 C/C++ libraries Οι Android runtime core libraries που είδαμε πριν είναι βασισμένες σε Java και παρέχουν τα πρωτεύοντα APIs για τους developers. Στην ουσία πρόκειται για το περιτύλιγμα ενός συνόλου από C/C++ libraries, συνεπώς όταν ο developer καλεί μία κλάση από τις Java βιβλιοθήκες, αυτές με τη σειρά τους καλούν τις υποκείμενες C/C++ βιβλιοθήκες. Η άμεση κλήση των C/C++ libs μπορεί να επιτευχθεί με τη χρήση του Android Native Development Kit (NDK) το οποίο επιτρέπει την κλήση native methods της C/C++ από κώδικα Java μέσω του Java Native Interface (JNI).
13
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 13 Application framework Είναι ένα σύνολο από υπηρεσίες που συνολικά σχηματίζουν το περιβάλλον στο οποίο διαχειριζόμαστε και εκτελούμε Android apps. Το framework υλοποιεί την αρχή ότι οι εφαρμογές Android οικοδομούνται από επαναχρησιμοποιούμενα, ανταλλασσόμενα και αντικαθιστάμενα συστατικά. Πρακτικά αυτό σημαίνει ότι κάθε app είναι σε θέση να δημοσιοποιεί τις δυνατότητές της και άλλα δεδομένα που μπορούν να χρησιμοποιηθούν από άλλες εφαρμογές.
14
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 14 Application services Activity Manager – Ελέγχει όλες τις εκφάνσεις του application lifecycle και του activity stack. Content Providers – Επιτρέπει σε εφαρμογές να μοιράζονται data μεταξύ τους Resource Manager – Παρέχει πρόσβαση σε πόρους που δεν είναι ενσωματωμένοι σε κώδικα όπως strings, color settings και user interface layouts. Notifications Manager – επιτρέπει σε εφαρμογές να δείχνουν alerts notifications στο χρήστη. View System – Ένα μεγάλο σύνολο από views που χρησιμοποιούνται για να δημιουργήσουν application user interfaces. Package Manager – Το σύστημα μέσω του οποίου οι εφαρμογές μπορούν να βρουν πληροφορίες για άλλες εφαρμογές που έχουν εγκατασταθεί στη συσκευή. Telephony Manager – Παρέχει πληροφορίες στην εφαρμογή για τις υπηρεσίες τηλεφωνίας που είναι διαθέσιμες στη συσκευή (status, subscriber information). Location Manager – Παρέχει πρόσβαση στις υπηρεσίες τοποθεσίας επιτρέποντας σε μία συσκευή να συλλέγει ενημερώσεις σχετικές με τις αλλαγές τοποθεσίας.
15
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 15 App framework – key services Βρίσκονται στην κορυφή της στοίβας του software Αποτελούν είτε τις native applications (web browser, e-mail, etc) και τις third-party applications.
16
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 16 Συστατικά των εφαρμογών Τα application components είναι τα ουσιαστικά δομικά στοιχεία μίας Android εφαρμογής. Τα συστατικά (components) είναι χαλαρά συζευγμένα μεταξύ τους μέσω του αρχείου AndroidManifest.xml που περιγράφει κάθε συστατικό και πως αλληλεπιδρά με τα υπόλοιπα. Τα βασικά συστατικά δίνονται στον παρακάτω πίνακα ComponentsDescription ActivitiesThey dictate the UI and handle the user interaction to the smart phone screen ServicesThey handle background processing associated with an application. Broadcast Receivers They handle communication between Android OS and applications. Content Providers They handle data and database management issues. FragmentsRepresents a portion of user interface in an Activity. ViewsUI elements that are drawn on-screen including buttons, lists forms etc. LayoutsView hierarchies that control screen format and appearance of the views. IntentsMessages wiring components together. ResourcesExternal elements, such as strings, constants and drawable pictures. ManifestConfiguration file for the application
17
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 17 Android activities Οι Android εφαρμογές δημιουργούνται φέρνοντας κοντά ένα ή περισσότερα συστατικά γνωστά ως Activities. Μία activity είναι ένα απλό, standalone module λειτουργικότητας επιπέδου εφαρμογής που συχνά συσχετίζεται με μία οθόνη user interface. Π.χ. μία εφαρμογή appointments έχει ένα activity screen που δείχνει τα ραντεβού που έχουν οριστεί για την τρέχουσα ημέρα. Η εφαρμογή μπορεί επίσης να χρησιμοποιεί μία δεύτερη activity που αποτελείται από μία οθόνη όπου νέα ραντεβού μπορούν να εισαχθούν από το χρήστη. Είναι reusable και interchangeable building blocks Μία εφαρμογή e-mail π.χ. μπορεί να περιέχει ένα activity για τη σύνθεση και αποστολή μηνυμάτων. Ένας developer μπορεί να γράψει μία εφαρμογή που επίσης απαιτεί την αποστολή e-mail. Αντί να αναπτύξει μία activity για αυτό το σκοπό μπορεί να χρησιμοποιήσει την activity της υπάρχουσας εφαρμογής.
18
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 18 Android activities Τα activities δημιουργούνται σαν υπο- κλάσεις της κλάσης Android Activity και είναι ανεξάρτητες από άλλες activities στο application. Υπό συνθήκες μία activity μπορεί να επιστρέψει αποτελέσματα στην activity από την οποία κλήθηκε. public class MainActivity extends Activity { }
19
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 19 Android services To service είναι ένα συστατικό που εκτελείται στο υπόβαθρο ώστε να επιτελέσει λειτουργίες μεγάλης διάρκειας. Για παράδειγμα ένα service μπορεί να παίζει μουσική στο υπόβαθρο ενώ ο χρήστης λειτουργεί μία άλλη εφαρμογή. Άλλο χαρακτηριστικό service είναι η μεταφόρτωση δεδομένων από το δίκτυο χωρίς να κωλύεται η αλληλεπίδραση του χρήστη με ένα activity To service υλοποιείται σαν υποκλάση της Service class public class MyService extends Service { }
20
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 20 Android intents Intents είναι ο μηχανισμός μέσω του οποίου μία activity έχει τη δυνατότητα να καλέσει άλλη και να υλοποιήσει τη ροή πληροφορίας ή λειτουργίας μέσω των activities που αποτελούν μία εφαρμογή. Τα intents αποτελούνται από μία περιγραφή της λειτουργίας που θα υλοποιηθεί και προαιρετικά από τα δεδομένα στα οποία θα επενεργήσει. Τα intents μπορεί να είναι συγκεκριμένα (explicit) (απαιτούν την κλήση συγκεκριμένου activity αναφέροντας το class name) ή να υποδεικνύουν (implicit) τον τύπο της ενέργειας που πρέπει να γίνει ή ακόμα και τα δεδομένα ενός συγκεκριμένου τύπου πάνω στον οποίο θα γίνει η ενέργεια. Στην περίπτωση των implicit intents, το ART θα επιλέξει το activity που ταιριάζει περισσότερο με τα κριτήρια που έχουν καθοριστεί (intent Resolution)
21
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 21 Broadcast receivers Είναι ο μηχανισμός μέσω του οποίου οι εφαρμογές αποκρίνονται σε Broadcast messages από άλλες εφαρμογές ή το σύστημα. Ένας broadcast receiver πρέπει να καταχωρισθεί από μία εφαρμογή και να διαμορφωθεί με ένα intent filter που υποδεικνύει τους τύπους του broadcast που τον ενδιαφέρουν. Μόλις ένα matching intent γίνει broadcast, o δέκτης θα κληθεί από το ART ανεξάρτητα του αν η εφαρμογή εκτελείται. Ο receiver έχει 5 δευτερόλεπτα μέσα στα οποία πρέπει να ολοκληρώσει τα απαιτούμενα tasks πριν επιστρέψει. Οι broadcast receivers εργάζονται στο υπόβαθρο και δεν έχουν user interface. Ένας broadcast receiver υλοποιείται σαν υποκλάση της BroadcastReceiver κλάσης και κάθε μήνυμα στέλνεται ευρέως σαν ένα αντικείμενο Intent public class MyReceiver extends BroadcastReceiver { public void onReceive(context,intent){} }
22
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 22 Broadcast intents Είναι ένα system wide intent που στέλνεται σε όλα τα applications που έχουν καταχωρίσει ένα «ενδιαφερόμενο» Broadcast receiver. Για παράδειγμα, το Android θα στείλει τυπικά Broadcast intents για να υποδείξει τις αλλαγές στην κατάσταση της συσκευής όπως η ολοκλήρωση του system start up, σύνδεση μίας εξωτερικής πηγής, κλείσιμο της οθόνης, κλπ. Ένα Broadcast Intent στέλνεται σε όλους τους ενδιαφερόμενους Receivers λίγο πολύ την ίδια στιγμή.
23
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 23 Content providers Υλοποιούν ένα μηχανισμό για τη διανομή δεδομένων μεταξύ των εφαρμογών Κάθε εφαρμογή μπορεί να παρέχει πρόσβαση των δεδομένων σε άλλες εφαρμογές μέσω της υλοποίησης ενός Content provider παρέχοντας τη δυνατότητα προσθήκης, αφαίρεσης, ερώτησης (permissions). Πρόσβαση στα δεδομένα παρέχεται μέσω του universal resource identifier (URI). Οι content providers που υπάρχουν σε ένα σύστημα Android μπορούν να βρεθούν καλώντας μεθόδους της κλάσης ContentResolver. Ο Content Provider υλοποιείται σαν μία υποκλάση της ContentProvider κλάσης και πρέπει να υλοποιεί ένα καθορισμένο σύνολο APIs που επιτρέπουν σε άλλες εφαρμογές να πραγματοποιούν δοσοληψίες. public class MyContentProvider extends ContentProvider { public void onCreate() {} }
24
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 24 Ένα απλό παράδειγμα Νέα εφαρμογή ENTER AN APPLICATION NAME SELECT MIN-SDK VERSION
25
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 25 Ένα απλό παράδειγμα Βασική εικόνα
26
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 26 Ανατομία εφαρμογής Sr.NoFolder, File & Description 1Build: This contains the auto generated file which are as Aidl,Build configuration, and R(R.JAVA) 2Libs: This is a directory to add the libraries to develop the android applications 3Src: This contains the.java source files for your project. By default, it includes an MainActivity.java source file having an activity class that runs when your app is launched using the app icon. 4Res: This is a directory, which is having drawable,layout,values,and android manifest file 5res/drawable-hdpi: This is a directory for drawable objects that are designed for high-density screens. 6res/layout: This is a directory for files that define your app's user interface. 7res/menu: This is a directory for menu objects that are designed to make menu in android applications 8res/values: This is a directory for other various XML files that contain a collection of resources, such as strings and colors definitions. 9AndroidManifest.xml: This is the manifest file which describes the fundamental characteristics of the app and defines each of its components.
27
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 27 The Application Manifest Η συγκολλητική ουσία που δένει τα διαφορετικά στοιχεία που συναποτελούν μία εφαρμογή είναι το Application Manifest αρχείο. Μέσα σε αυτό το XML αρχείο η εφαρμογή περιγράφει τα activities, services, broadcast receivers, data providers και permissions που χτίζουν μία ολοκληρωμένη εφαρμογή.
28
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 28 Application resources Μαζί με το manifest file και τα Dex files που περιέχουν τον byte κώδικα, το Android application package περιέχει και μία συλλογή από resource files. Αυτά τα αρχεία περιέχουν resources όπως strings, images, fonts, colors που εμφανίζονται στο user interface μαζί με την XML αναπαράσταση των user interface layouts. Εν γένει, τα αρχεία αποθηκεύονται στο /res υποφάκελο της ιεραρχίας του project
29
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 29 Application context Όταν ένα application μεταγλωττίζεται, μία κλάση ονόματι R δημιουργείται και περιέχει αναφορές στα resources. To application manifest file και τα resources συνδυάζονται για να δημιουργήσουν το γνωστό Application context. Αυτό αναπαρίσταται από την Android context class και μπορεί να χρησιμοποιηθεί στον κώδικα για να έχει πρόσβαση στα application resources την ώρα της εκτέλεσης. Επιπρόσθετα, ένα μεγάλο εύρος μεθόδων μπορούν να κληθούν πάνω στο application context για να συλλέξουν πληροφορίες και να κάνουν αλλαγές στο περιβάλλον της εφαρμογής κατά την εκτέλεση.
30
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 30 Resource management Κάθε εφαρμογή που τρέχει φαίνεται στο λειτουργικό σαν ξεχωριστή διεργασία Αν το σύστημα αντιληφθεί ότι τα resources στη συσκευή εξαντλούν τη χωρητικότητά της, θα αναλάβει δράση ώστε να τερματίσει processes. To σύστημα λαμβάνει υπόψή του την προτεραιότητα και την κατάσταση των τρεχουσών διεργασιών (importance hierarchy).
31
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 31 Android process states Τα processes φιλοξενούν applications οι οποίες αποτελούνται από συστατικά. Μέσα στο Android, η τρέχουσα κατάσταση μίας διεργασίας ορίζεται από το ενεργό συστατικό με τη μεγαλύτερη βαθμολογία (highest ranking active component)
32
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 32 Android process states Foreground: Υψηλότερος βαθμός προτεραιότητας το πολύ μία ή δύο ενεργές σε κάθε στιγμή. Μία διεργασία είναι foreground όταν φιλοξενεί τρέχουσα activity, φιλοξενεί service συνδεδεμένο με την τρέχουσα activity, Φιλοξενεί ένα service που καλεί τη μέθοδο startForeground(), Φιλοξενεί ένα service που εκτελεί onCreate(), onResume(), onStart() Φιλοξενεί ένα broadcast receiver που εκτελεί onReceive() Visible process Μία διεργασία που περιέχει ένα activity (ή service) ορατό στο χρήστη αλλά όχι το τρέχον. Service process Processes που περιέχουν ένα service που έχει εκκινήσει και εκτελείται
33
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 33 Android process states Background Μία διεργασία που περιέχει μία ή περισσότερες activities που δεν είναι ορατές στο χρήστη και δεν περιέχει ένα service που βρίσκεται στην service process status To android περιέχει μία δυναμική λίστα από background processes και τις τερματίζει σε χρονολογική σειρά. Empty process Δεν περιέχουν ενεργές εφαρμογές και κρατούνται στη μνήμη για να φιλοξενήσουν νέες εφαρμογές.
34
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 34 Activity Lifecycle Η κατάσταση μίας διεργασίας καθορίζεται από την κατάσταση των activities, components που συναποτελούν την εφαρμογή που φιλοξενεί. Οι activities μεταβαίνουν μεταξύ διαφορετικών καταστάσεων κατά το χρόνο ζωής εκτέλεσης μίας εφαρμογής. Η τρέχουσα κατάσταση καθορίζεται εν μέρει από τη θέση της activity στο Activity Stack
35
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 35 Activity Stack Για κάθε εφαρμογή που εκτελείται το ART διατηρεί το Activity stack. Κατά την κλήση της εφαρμογής, η πρώτη activity τοποθετείται στο stack. Όταν μία δεύτερη ξεκινά, τοποθετείται στην κορυφή του stack και η προηγούμενη πάει μία θέση κάτω Η activity στην κορυφή της στίβας είναι η ενεργή (ή τρέχουσα). Όταν η τρέχουσα ολοκληρώνεται (exit) πετιέται από τη στοίβα από το ART (π.χ κατά το πάτημα του back button)
36
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 36 Activity Stack LIFO stack
37
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 37 Activity states Active/running – στην κορυφή της στοίβας – αλληλεπιδρά την τρέχουσα στιγμή με το χρήστη Paused – Είναι ορατή στο χρήστη αλλά δεν υπάρχει εστίαση διότι επισκιάζεται από την ενεργή, διατηρείται στη μνήμη, υφίσταται στο window manager Stopped – Δεν είναι ορατή στο χρήστη, έχει το υψηλότερο ρίσκο τερματισμού Killed – Έχει τερματιστεί
38
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 38 Configuration changes Καταστροφή και επαναδημιουργία διεργασιών όπως κατά την περιστροφή του κινητού (portrait, landscape)
39
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 39 Handling Activity Changes Κατά τη διάρκεια της ζωής των εφαρμογών, τα εσωτερικά συστατικά τους μεταβαίνουν σε πολλές καταστάσεις. Είναι σημαντικό να τονισθεί ότι οι αλλαγές που λαμβάνουν χώρα επικοινωνούνται στην εφαρμογή από το ART ώστε να μπορέσει η εφαρμογή να αντιδράσει κατάλληλα για την αποθήκευση ή ανάκτηση δεδομένων.
40
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 40 The Activity Class Εκτός ολίγων εξαιρέσεων, τα activities σε ένα application δημιουργούνται σαν υποκλάσεις του Android Activity Class ή μίας άλλης κλάσης που είναι και αυτή υποκλάση της Activity Class (Π.χ. ActionBarActivity ή FragmentActivity classes) Ας δούμε την περίπτωση μίας απλής εφαρμογής (AndroidSample project)
41
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 41 AndroidSampleActivity.java package com.ebookfrenzy.androidsample; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; public class AndroidSampleActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_android_sample); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.android_sample, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }
42
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 42 The ActionBarActivity Class Διατρέχοντας το ref document της ActionBarActivity θα δούμε ότι είναι μία υποκλάση της Activity Class. Για την ακρίβεια είναι υποκλάση της FragmentActivity που είναι υποκλάση της Activity Class.
43
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 43 Method overriding Method overriding στον αντικειμενοστραφή προγραμματισμό ονομάζουμε ένα χαρακτηριστικό της γλώσσας που επιτρέπει σε μία υποκλάση ή κλάση παιδί να παρέχει συγκεκριμένη υλοποίηση μίας μεθόδου που παρέχεται ήδη από τις υπερκλάσεις ή πατρικές κλάσεις.
44
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 44 Δυναμική vs Μόνιμης κατάστασης Ένας βασικός στόχος της διαχείρισης του Activity lifecycle είναι να επιβεβαιωθεί ότι το activity αποθηκεύεται και ανακτάται σε συγκεκριμένες στιγμές. Όταν μιλάμε για state εννοούμε τα δεδομένα που κρατούνται μέσα στο activity και την εμφάνιση του user interface. H activity μπορεί για παράδειγμα να διατηρεί ένα μοντέλο δεδομένων στη μνήμη που πρέπει να αποθηκευτούν σε μία βάση, ένα content provider ή ένα αρχείο. (persistent state) H εμφάνιση του user interface (όπως το κείμενο που εισάγεται σε ένα text field αλλά δεν έχει δεσμευτεί ακόμα στο εσωτερικό data model της εφαρμογής) ονομάζεται δυναμική κατάσταση (instance state)
45
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 45 Android Activity Lifecycle Methods H Activity class περιέχει ένα αριθμό lifecycle methods που δρουν σαν event handlers όταν η κατάσταση μίας Activity αλλάζει. Οι κύριες methods που υποστηρίζονται από την Android Activity class είναι οι ακόλουθες onCreate(Bundle savedInstance State) – Η μέθοδος που καλείται όταν το activity δημιουργείται για πρώτη φορά και η ιδανική τοποθεσία για τη λειτουργία των initialization tasks. Έχει ένα argument στη μορφή ενός Bundle object που περιέχει δυναμική κατάσταση πληροφορίας onRestart() – Όταν ξαναξεκινά το activity μετά από λήξη του από το ART onStart() – Μετά από το onCreate, onRestart, η μέθοδος υποδεικνύει ότι η activity θα γίνει ορατή στο χρήστη onResume() – Υποδεικνύει ότι το activity είναι στην κορυφή του activity stack, πρόκειται για την δραστηριότητα με την οποία αλληλεπιδρά ο χρήστης onPause() – Υποδεικνύει ότι μία προηγούμενη activity πρόκειται να γίνει το foreground activity. Αυτή η κλήση ακολουθείται από άλλη κλήση είτε στο onResume(), ή onStop(). Θα πρέπει να γίνουν οι ενέργειες για την αποθήκευση persistent data που απαιτούνται από το activity (content provider, database or file)
46
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 46 Android Activity Lifecycle Methods onStop()– Η μέθοδος δεν είναι πλέον ορατή στο χρήστη (onRestart() για να επανέλθει, onDestroy() για να καταστραφεί) onDestroy() – H activity πρόκειται να καταστραφεί είτε εθελοντικά (ολοκληρώθηκε και καλεί τη finish() μέθοδο) ή επειδή το ART ανέλαβε να την τερματίσει Εκτός των lifecycle methods, υπάρχουν δύο methods που υπάρχουν για να αποθηκεύουν και να ανακτούν τη δυναμική κατάσταση του activity onRestoreInstanceState(Bundle savedInstanceState) – Αυτή η μέθοδος καλείται αμέσως μετά μία κλήση στην OnStart() μέθοδο στην περίπτωση που το activity ξαναξεκινά από ένα προηγούμενο invocation στο οποίο είχε σωθεί η κατάσταση. Το Bundle object περιέχει τα data της προηγούμενης κατάστασης. onSaveInstanceState(Bundle outState)– Καλείται πριν την καταστροφή μίας activity ώστε η τρέχουσα δυναμική κατάσταση να αποθηκευτεί. Η μέθοδος αποθηκεύει την τρέχουσα κατάσταση στο Bundle object.
47
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 47 Activity Lifetimes Entire lifetime – οτιδήποτε μεταξύ του onCreate() και του onDestroy() Visible Lifetime – καλύπτει τις περιόδους εκτέλεσης μεταξύ του onStart() και του onStop(). Foreground Lifetime – Μεταξύ του onResume() και του OnPause().
48
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 48 Activity Lifetimes
49
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 49 1 ο παράδειγμα StateChange: Στόχος του παραδείγματος είναι να σας δείξει τις αλλαγές των καταστάσεων της activity με την περιστροφή του κινητού τηλεφώνου. Κάνουμε χρήση του method overriding
50
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 50 Φιλτράρισμα του LogCat Ξεκινά με Alt+6
51
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 51 Android Views Κάθε στοιχείο σε ένα user interface είναι μία υποκλάση της Android View Class. To Android SDK παρέχει ένα σύνολο από pre-built views για την κατασκευή ενός interface (button, CheckBox, ProgressBar, …) που ονομάζονται συνήθως Widgets ή Components Νέα views μπορούν να δημιουργηθούν μέσω sublcassing ή extending στα υπάρχοντα views. Ένα view μπορεί να αποτελείται από πολλά άλλα (composite view υποκλάσεις της Android ViewGroup)
52
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 52 Android Layout Managers Υπάρχει ένα σύνολο από views που αναφέρονται ως Layouts, τα οποία είναι container views (υποκλάσεις της viewGroup). To Android SDK περιέχει τα ακόλουθα layout views LinearLayout – Βάζει child views σε μία στήλη ή γραμμή ανάλογα με την επιλογή του Orientation. TableLayout - Διευθετεί τα child views σε ένα grid format. FrameLayout – Κάνει allocation μίας περιοχής της οθόνης για την προβολή συνήθως ενός view RelativeLayout – Επιτρέπει στα child views να τοποθετηθούν σχετικά το ένα ως προς το άλλο AbsoluteLayout – Επιτρέπει στα child views να τοποθετηθούν σε απόλυτες θέσεις – δεν χρησιμοποιείται σχεδόν ποτέ GridLayout – Ένας νέος Layout Manager μέρος του Android 4.0. Ένα instance του GridLayout διαιρείται σε αόρατες γραμμές που σχηματίζουν ένα πλέγμα (grid)
53
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 53 View Hierarchy Εκτός των ορατών στοιχείων (visible button, checkbox views), το UI περιλαμβάνει ένα αριθμό από layout views που ελέγχουν πως τα visible views τοποθετούνται
54
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 54 View Hierarchy Εδώ βλέπουμε και τα Layout views σε σχέση με τα child views
55
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 55 Δημιουργία User Interfaces Υπάρχουν τρεις τρόποι να σχεδιάσει κανείς το user interface. Android Studio Designer tool Handwriting XML Layout resource files Java Code.
56
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 56 Δημιουργία XML Layout <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:paddingLeft="64dp" android:paddingRight="64dp" android:paddingTop="64dp" android:paddingBottom="64dp" tools:context= "com.ebookfrenzy.layoutsample.layoutsample.LayoutSampleActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_string" android:id="@+id/button" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_above="@+id/button" android:layout_centerHorizontal="true" android:layout_marginBottom="51dp" android:inputType="text" android:width="350dp" /> To XML, δηλώνει ένα RelativeLayout σαν το root στοιχείο. Ο διαθέσιμος χώρος της συσκευής έχει padding σε κάθε πλευρά 64 density independent pixels. Το button, EditText είναι παιδιά του RelativeLayout view. Το button είναι κεντραρισμένο και έχει την επιλογή wrap_content που σημαίνει προσαρμογή στο περιεχόμενο Το δεύτερο έχει πιο συγκεκριμένες παραμέτρους
57
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 57 Android events Συνήθως σχετίζονται με την αλληλεπίδραση με την οθόνη αφής (input events) Το Android διατηρεί μία ουρά συμβάντων στην οποία τοποθετούνται τα συμβάντα με τη σειρά πρόκλησης (FIFO). To συμβάν μεταφέρεται στο view που τοποθετείται στην περιοχή της οθόνης όπου υπήρξε η επαφή. Για τη διαχείριση του event απαιτείται να υπάρχει ένας listener To Android view class περιέχει ένα εύρος από event listener interfaces, με το καθένα να συνοδεύεται από μία αφαιρετική δήλωση μίας callback μεθόδου.
58
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 58 Android:onClick Resource Ας θεωρήσουμε ένα UI layout που περιέχει ένα button view button1 με την απαίτηση όταν ένας χρήστης αγγίξει ένα κουμπί, η μέθοδος buttonClick() να κληθεί. Αυτό που απαιτείται είναι να γράψουμε την buttonClick() μέθοδο και να προσθέσουμε μία απλή γραμμή στη δήλωση του button view στο XML αρχείο.
59
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 59 Android:onClick Resource Δεν θα τη χρησιμοποιήσουμε εδώ εκτενώς
60
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 60 Event listeners onClickListener: Απλό κλικ – onClick() method onLongClickListener: Παρατεταμένο κλικ – onLongClick() method onTouchListener: Αντιλαμβάνεται κάθε είδους επαφή με την οθόνη (απλές, πολλαπλές επαφές και άλλα gesture motions) – onTouch() method onCreateContextMenuListener, onFocusChangeListener, onKeyListener
61
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 61 2 ο παράδειγμα @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_event_example); Button button = (Button)findViewById(R.id.myButton); button.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { TextView myTextView = (TextView)findViewById(R.id.myTextView); myTextView.setText("Button clicked"); } ); }
62
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 62 παράδειγμα Button button = (Button)findViewById(R.id.myButton); Τι κάνει; 1. Δήλωση μεταβλητής button τύπου Button 2. Δημιουργία ενός instance της κλάσης Button. 3. η μέθοδος findViewById() επιστρέφει ένα αντικείμενο τύπου View. 4. Γράφοντας (Button) δίπλα από την ανάθεση κάνουμε οριοθέτηση του αντικειμένου View σε Button καθώς η κλάση Button είναι υποκλάση της View. 5. Έτσι, αρχικοποιούμε το αντικείμενο button "συνδέοντάς" το με το αντίστοιχο στο xml.
63
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 63 παράδειγμα button.setOnClickListener( new Button.OnClickListener() { public void onClick(View v) { TextView myTextView = (TextView)findViewById(R.id.myTextView); myTextView.setText("Button clicked"); } ); Αρχικοποίηση της κλάσηςOnClickList ener και ανάθεση αλλαγής της τιμής του TextView μετά από το click
64
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 64 Intents Τα intents είναι το σύστημα ανταλλαγής μηνυμάτων μέσω του οποίου μία activity μπορεί να εκκινήσει μία άλλη. Τα intents επίσης επιτρέπουν σε μία activity να ζητήσει μία λειτουργικότητα που παρέχεται από κάποια άλλη activity της συσκευής (μέσω του ART). επιτρέπουν επίσης την ανταλλαγή μηνυμάτων μεταξύ των activities και την επικοινωνία με services, broadcast receivers
65
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 65 Explicit Intents Απαιτεί την έναρξη μίας συγκεκριμένης activity μέσω της αναφοράς του component name (Java class name) της activity. Συνήθως οι activities είναι στην ίδια εφαρμογή. Ένα explicit intent εκκινεί με τη δημιουργία ενός νέου instance της intent class Μετά γίνεται κλήση της startactivity() method
66
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 66 Explicit Intents Intent i = new Intent(this, ActivityB.class); startActivity(i);
67
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 67 Explicit Intents – μεταφορά δεδομένων Μεταφορά δεδομένων στη λαμβάνουσα activity με την προσθήκη της στο intent object πριν εκκινήσει με κλήσεις της putExtra() method του intent object Παράδειγμα Intent i = new Intent(this, ActivityB.class); i.putExtra("myString", "This is a message for ActivityB"); i.putExtra("myInt", 100); startActivity(i);
68
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 68 Explicit Intents – μεταφορά δεδομένων Τα δεδομένα φτάνουν στην target activity σαν μέρος του Bundle object του οποίου το περιεχόμενο είναι προσβάσιμο με την κλήση της getIntent().getExtras(). Παράδειγμα Bundle extras = getIntent().getExtras(); If (extras != null) { String myString = extras.getString("myString"); int myInt = extras.getInt("myInt"); }
69
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 69 Explicit Intents θα πρέπει να εμφανίζονται οι activities στο manifest file.
70
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 70 Επιστροφή δεδομένων από Activity Στο προηγούμενο παράδειγμα τα δεδομένα μεταφέρονται στο ActivityB, δεν υπάρχει όμως τρόπος να επιστραφούν στην πρώτη Activity. Ο εύκολος τρόπος πραγματοποίησης είναι να εκκινήσει η ActivityB σαν υπό-activity της A. Το request code ταυτοποιεί τα return data startActivityForResult(i, REQUEST_CODE);
71
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 71 Επιστροφή δεδομένων από Activity Η sub-activity πρέπει να υλοποιήσει την finish() method Δημιουργεί ένα νέο intent object που περιέχει τα δεδομένα που είναι να αποθηκευτούν. public void finish() { Intent data = new Intent(); data.putExtra("returnString1", "Message to parent activity"); setResult(RESULT_OK, data); super.finish(); }
72
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 72 OnActivityResult Για να πάρει η αρχική activity τα returned data εκτελεί protected void onActivityResult(int requestCode, int resultCode, Intent data) { String returnString; if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) { if (data.hasExtra("returnString1")) { returnString = data.getExtras().getString("returnString1"); } } }
73
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 73 Implicit intents [1] H Activity A δημιουργεί ένα intent με μία περιγραφή του action και το διοχετεύει στην startActivity(). [2] Tο Android System αναζητά όλες τις εφαρμογές για ένα intent filter που ταιριάζει στο intent. [3] Όταν βρεθεί μία αντιστοιχία, το σύστημα εκτελεί την ταιριαστή activity (Activity B) μέσω της επίκλησης (invokation) της onCreate() μεθόδου και της διοχέτευσης του intent. Αν υπάρχουν πολλές εφαρμογές που έχουν συμβατά intent filters, τότε το σύστημα δίνει στο χρήστη τη δυνατότητα να επιλέξει.
74
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 74 Intent filter To intent filter είναι μία έκφραση στο manifest file της εφαρμογής που διευκρινίζει τον τύπο των intents τους οποίους το component θα ήθελε να λάβει. Για παράδειγμα, δηλώνοντας ένα intent filter για μία activity, επιτρέπεις σε άλλες εφαρμογές να εκκινήσουν άμεσα την activity με ένα συγκεκριμένο τύπο intent. Παρομοίως, αν δεν δηλώσεις κανένα τύπο από intent filters για μία activity, τότε μπορεί να εκτελεστεί μόνο από explicit intent.
75
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 75 Φτιάχνοντας ένα implicit intent Ένα intent object μεταφέρει πληροφορία την οποία το Android system χρησιμοποιεί για να κατανοήσει ποιο component πρέπει να ξεκινήσει (όπως το ακριβές όνομα ή η ακριβής κατηγορία component που θα έπρεπε να λάβει το intent), καθώς και πληροφορία που το component παραλήπτης χρησιμοποιεί για να εκτελέσει το action ACTION Ένα string που προδιαγράφει το generic action προς εκτέλεση π.χ. ACTION_VIEW, ACTION_SEND.ACTION_VIEW ACTION_SEND Μπορείς να προδιαγράψεις το action για ένα intent με τη setAction() ή με ένα Intent constructor.setAction() Intent Αν ορίσεις τις δικές σου actions, θα πρέπει να συμπεριλάβεις το app's package name σαν προίμιο. Για παράδειγμα: static final String ACTION_TIMETRAVEL = "com.example.action.TIMETRAVEL";
76
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 76 Φτιάχνοντας ένα implicit intent Data Uniform Resource Identifier (URI) είναι ένα string που χρησιμοποιείται για να ταυτοποιήσει μία πηγή. Στο implicit intent είναι απαραίτητο το URI (ένα Uri object) για να αναφέρει τον τύπο των δεδομένων που θα χειριστεί το action. Ο τύπος των δεδομένων σε γενκές γραμμές καθορίζεται από το intent's action.Uri Για παράδειγμα, αν το action είναι ACTION_EDIT, τα δεδομένα θα πρέπει να περιέχουν το URI του κειμένου προς επεξεργασία. Όταν δημιουργούμε το intent, είναι σημαντικό να προδιαγράψουμε τον τύπο των δεδομένων μαζί με το URI. Για παράδειγμα, μία activity που μπορεί να δείχνει εικόνες λογικά δεν είναι υποχρεωτικό να παίζει audio file παρόλο που τα URI formats είναι παρόμοια. Category Ένα string που περιέχει επιπρόσθετη πληροφορία για το είδος του component που θα χειριστεί το intent. Extras Ζευγάρια με τιμές που μεταφέρουν επιπρόσθετη πληροφορία για την ολοκλήρωση του action. Όπως είδαμε βάζουμε extra data με putExtra() methods Flags (θα τα δούμε στη συνέχεια)
77
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 77 Κοινά intents ALARM public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM).putExtra(AlarmClock.EXTRA_MESSAGE, message).putExtra(AlarmClock.EXTRA_HOUR, hour).putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } FILTER
78
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 78 Κοινά intents Camera: Καταγραφή video ή εικόνας και επιστροφή του. static final int REQUEST_IMAGE_CAPTURE = 1; static final Uri mLocationForPhotos; public void capturePhoto(String targetFilename) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(mLocationForPhotos, targetFilename)); if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bitmap thumbnail = data.getParcelable("data"); …. } } FILTER
79
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 79 Broadcast intents Broadcast intents είναι τα intents που στέλνονται ευρέως καλώντας sendBroadcast() sendStickyBroadcast(): Παραμένει διαθέσιμο ακόμα και όταν ολοκληρωθεί η λήψη του (π.χ. Battery level status) sendOrderedBroadcast() : για την επιστροφή αποτελεσμάτων Π.χ. Intent intent = new Intent(); intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); intent.setAction("com.example.Broadcast"); intent.putExtra("MyData", 1000); sendBroadcast(intent);
80
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 80 Broadcast receivers Mία εφαρμογή ακουεί για συγκεκριμένα broadcast intents καταχωρώντας ένα broadcast receiver. Οι Broadcast receivers υλοποιούνται επεκτείνοντας την BroadcastReceiver class κάνοντας overriding την OnReceive μέθοδο. Η καταχώριση του broadcast receiver γίνεται είτε στον κώδικα της activity για παράδειγμα είτε στο manifest file. Μέρος της καταχώρισης είναι η δημιουργία των κατάλληλων intent filters.
81
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 81 Broadcast receivers code package com.example.broadcastdetector; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } @Override public void onReceive(Context context, Intent intent) { // Implement code here to be performed when // broadcast is detected }
82
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 82 Broadcast receivers Manifest file καταχώριση <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" com.example.broadcastdetector.broadcastdetector " android:versionCode="1" android:versionName="1.0" > <application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" >
83
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 83 Broadcast receivers Καταχώριση στον κώδικα IntentFilter filter = new IntentFilter("com.example.Broadcast"); MyReceiver receiver = new MyReceiver(); registerReceiver(receiver, filter); Αν ο receiver ολοκλήρωσε το έργο unregisterReceiver(receiver);
84
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 84 Menus Στοιχείο του user interface Εδώ θα ασχοληθούμε με Overflow menus H θέση του εξαρτάται από την έκδοση του Android To menu δηλώνονται σε ένα XML αρχείο το οποίο γίνεται inflated κατά απαίτηση.
85
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 85 Menus <item android:id="@+id/menu_red" android:orderInCategory="1" app:showAsAction="never" android:title="@string/red_string"/> <item android:id="@+id/menu_green" android:orderInCategory="2" app:showAsAction="never" android:title="@string/green_string"/> Σειρά εμφάνισης Έλεγχος συνθηκών εμφάνισης του item
86
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 86 Menus Εν γένει, το menu XML αρχείο δημιουργείται από το Android studio όταν μία νέα εφαρμογή δημιουργείται (app - > res -> menu project folder. Ένα overflow menu δημιουργείται με overriding της onCreateOptionsMenu() μεθόδου της activity @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_menu_example, menu); return true; }
87
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 87 SQLite Είναι μία ενσωματωμένη, σχεσιακή βάση δεδομένων. Δεν απαιτεί τη λειτουργία ενός database server – όλες οι λειτουργίες λαμβάνουν χώρα εντός της εφαρμογής – κλήση σε συναρτήσεις Βασίζεται στη χρήση SQL για την πρόσβαση στα δεδομένα Η SQLite είναι προεγκατεστημένη στο Android – περιλαμβάνει ένα διαλογικό περιβάλλον για την κλήση SQL εντολών (adb shell).
88
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 88 Δοκιμή της SQLite σε AVD adb –e shell (Το e αναφέρεται σε emulator) root@android:/ # /data/data/ /databases/.db ( H βάση καταχωρείται εκεί όπου εκτελείται η εφαρμογή) Π.χ. /data/data/com.example.MyDBApp/databases/mydatabase.db Μόλις έχει δημιουργηθεί μία τοποθεσία για τα αρχεία της βάσης εκτελείται η sqlite: root@android:/data/data/databases # sqlite3./mydatabase.db sqlite3./mydatabase.db SQLite version 3.7.4 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> Στο sqlite> prompt, εντολές μπορούν να εισαχθούν για την εκτέλεση λειτουργιών όπως η δημιουργία πινάκων, εισαγωγή στοιχείων και ανάκτηση στοιχείων. Π.χ. create table contacts (_id integer primary key autoincrement, name text, address text, phone text);
89
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 89 Δοκιμή της SQLite σε AVD - ΙΙ Επιπλέον παραδείγματα Α. Ε π ίδειξη π ινάκων sqlite>.tables contacts Β. Εισαγωγή εγγραφών sqlite> insert into contacts (name, address, phone) values ("David Smith", "123 Main Street, California", "123-555-2323"); sqlite> insert into contacts (name, address, phone) values ("Mark Parks", "10 Upping Street, Idaho", "444-444-1212"); Γ. Ανάκτηση όλων των δεδομένων sqlite> select * from contacts; 1|David Smith|123 Main Street, California|123-555-2323 2|Mark Parks|10 Upping Street, Idaho|444-444-1212 Δ. Ανάκτηση δεδομένων με ε π ι π λέον κριτήρια sqlite> select * from contacts where name="Mark Parks"; 2|Mark Parks|10 Upping Street, Idaho|444-444-1212 Ε. Για την έξοδο α π ό το π εριβάλλον διαλογικής ε π ικοινωνίας sqlite3 sqlite>.exit
90
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 90 Android SQLite Java Classes Cursor Μία κλάση π ου π αρέχεται για την π ρόσβαση στα α π οτελέσματα μίας ερώτησης. Για π αράδειγμα, μία SQL SELECT λειτουργία π ου εκτελείται σε μία βάση δεδομένων θα π αρέχει κατά π άσα π ιθανότητα π ολλα π λές σειρές π ολύ π ληρούν το κριτήριο. Ένα Cursor instance μ π ορεί να χρησιμο π οιηθεί για τη μετάβαση στα α π οτελέσματα π ου μ π ορούν να ανακτηθούν με τη χρήση μίας π οικιλίας μεθόδων. close() – Κλείνει τον Cursor. getCount() – ε π ιστρέφει τον αριθμό των σειρών του συνόλου των α π οτελεσμάτων. moveToFirst() – Μετακίνηση στην π ρώτη σειρά. moveToLast() – Μετακίνηση στην τελευταία. moveToNext() – Μετακίνηση στην ε π όμενη. move() – Μετακίνηση κατά ένα καθορισμένο offset α π ό το τρέχον σημείο. get () – ε π ιστρέφει την τιμή του συγκεκριμένου τύ π ου π ου π εριέχεται στο συγκεκριμένο column index της σειράς στην τρέχουσα θέση του cursor (π. χ. getString(), getInt(), getShort(), getFloat() and getDouble()).
91
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 91 Android SQLite Java Classes SQLiteDatabase Αυτή η κλάση π αρέχει την π ρωτεύουσα διε π αφή μεταξύ του κώδικα της εφαρμογής και τις υ π οκείμενες SQLite databases συμ π εριλαμβάνοντας τη δυνατότητα δημιουργίας, διαγραφής και γενικών SQL λειτουργιών σε βάσεις δεδομένων. insert() – εισάγει μια νέα σειρά στη βάση. delete() – Διαγράφει σειρές α π ό τη βάση. query() – ε π ιχειρεί μία συγκεκριμένη ερώτηση και ε π ιστρέφει α π οτελέσματα π ου ταιριάζουν μέσω του Cursor object. execSQL() – Εκτελεί μία α π λή SQL δήλωση π ου δεν ε π ιστρέφει α π οτελέσματα. rawQuery() – Εκτελεί μία ερώτηση δήλωσης (SQL query statement) και ε π ιστρέφει τα α π οτελέσματα π ου ταιριάζουν στη μορφή ενός Cursor object.
92
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 92 Android SQLite Java Classes SQLiteOpenHelper Μία βοηθητική κλάση που σχεδιάστηκε ώστε να κάνει πιο εύκολη τη δημιουργία και την ενημέρωση βάσεων δεδομένων. Αυτή η κλάση πρέπει να γίνει subclassed μέσα στον κώδικα της εφαρμογής αναζητώντας πρόβαση στη βάση δεδομένων και τις παρακάτω callback methods που υλοποιούνται μέσα στην υποκλάση: onCreate() – Καλείται κατά την πρώτη δημιουργία της βάσης. onUpgrade() – Καλείται στην περίπτωση που ο κώδικας της εφαρμογής περιέχει μία πιο πρόσφατη αναφορά εκδοχής. Τυπικά χρησιμοποιείται όταν μία εφαρμογή ενημερώνεται στη συσκευή και απαιτεί το σχήμα της βάσης να ενημερωθεί για να χειρίζεται την αποθήκευση επιπρόσθετων δεδομένων. Αξιοσημείωτες μέθοδοι της κλάσης είναι getWritableDatabase() – Ανοίγει μία βάση για ανάγνωση και εγγραφή. Επιστρέφει μία αναφορά στη βάση στη μορφή ενός SQLiteDatabase object. getReadableDatabase() – Ανοίγει μία βάση για ανάγνωση μόνο. close() – Κλείνει τη βάση. ContentValues ContentValues is a convenience class that allows key/value pairs to be declared consisting of table column identifiers and the values to be stored in each column. This class is of particular use when inserting or updating entries in a database table.
93
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 93 Εφαρμογή - π αράδειγμα Απλή εφαρμογή εισαγωγής, αναζήτησης και διαγραφής στοιχείων από μία βάση. Κατά την αναζήτηση, μας επιστρέφει μόνο το πρώτο στοιχείο που πληροί τις προϋποθέσεις Ο πίνακας παρακάτω είναι το υπόδειγμα της βάσης ColumnData Type productid Integer / Primary Key/ Auto Increment productnameText productquantityInteger
94
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 94 Layout
95
Δίκτυα Κινητών Επικοινωνιών και Εφαρμογές – Android 95 Classes Main activityDatabase Handler Class (subclass of SQLiteOpenHelper ) Database Product class
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.