Android_Introduction 1 Android: Introduction, présentation Notes de cours jean-michel Douin, douin au cnam point fr version : 24 septembre 2015.

Slides:



Advertisements
Présentations similaires
Active Directory Windows 2003 Server
Advertisements

Module 5 : Implémentation de l'impression
CRÉER UNE APPLICATION INTERNET RELIEE A UNE BASE DE DONNEES
Etude de Cas Une compagnie d'assurance automobile propose à ses clients quatre familles de tarifs identifiables par une couleur, du moins au plus onéreux.
Android les Services, Receiver et processus
Android View, onClick, Activity, Modèle Vue Contrôleur
Android UIThread, Thread, Handler et AsyncTask
L’architecture .net et ASP.net
Exposé de Système - Informatique et Réseau
1 Les technologies XML Cours 1 : Les Web Services et Architectures Orientées Services Fé vrier Version 1.0 -
Projet Webase. I. La définition du projet 1. Lexistant : Webase 4 2. Cahier des charges 3. La répartition des données 4. Le modèle de données 5. Le choix.
Design Pattern MVC En PHP5.
TP 3-4 BD21.
Introduction aux Session Beans
Développement Mobile : Android
Active Directory Windows 2003 Server
Développement Mobile : Android
ManageEngine ADSelfService Plus
Etude des Technologies du Web services
XML-Family Web Services Description Language W.S.D.L.
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
JAVASERVER FACES Un framework Java pour le développement Web.
Serveurs Partagés Oracle
Applications Chapitre B17 et C18
Cours N°6 Application sur les listview et les Broadcast Receivers Rami AMRI FST 2011/2012.
Développement Rapide dApplications Web avec.NET « Mon premier site »
Services fournis par le SI et technologies associées
Programmation concurrente
Architecture dun site de vente au détail1 Modèle d'un site simple de vente Lexemple du livre Ruby on Rails Partie II Java Adventure Builder Demo Réalisé.
Module 8 : Maintenance des logiciels à l'aide des services SUS
Module 3 : Création d'un domaine Windows 2000
Android View, onClick, Activity, Modèle Vue Contrôleur
Android: Introduction, présentation
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Projet de Master première année 2007 / 2008
Réunion de collaboration du 9-10 Juillet 2008 J.L. Béney 1 Logiciel At  Client-Serveur Tcp/ip de la station autonome  Influence de l'architecture matérielle.
1 Architecture orientée service SOA Architecture orientée service SOA (Service Oriented Architecture)
Exploration de la programmation android Formation Assurer par: Club FreeWays Réalisé par: BOUHJJA Lamia.
Receiver, CGM et + 1 Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction Notes de cours jean-michel Douin, douin au cnam point fr.
Android UIThread, Thread, Handler et AsyncTask
Créer des packages.
Le contenu est basé aux transparents du 7 ème édition de «Software Engineering» de Ian Sommerville«Software Engineering» de Ian Sommerville B.Shishedjiev.
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Mastère Professionnel Systèmes de Communication et Réseaux
Les sockets.
Service_Receiver 1 Android les Services, Receiver et processus Notes de cours jean-michel Douin, douin au cnam point fr version : 27 Mai 2014.
FTP : File Transfer Protocol (protocole de transfert de fichier ) est un protocole de communication destiné à l'échange informatique de fichiers sur.
Module 3 : Création d'un domaine Windows 2000
jean-michel Douin, douin au cnam point fr
 Formulaires HTML : traiter les entrées utilisateur
Supervision à distance d’une ligne de conditionnement temps réel 16/12/20101INSA de LYON - H4201.
Cours MIAGE « Architectures Orientées Services »Henry Boccon-GibodCours MIAGE « Architectures Orientées Services »Henry Boccon-Gibod 1 Architectures Orientées.
Android: Introduction, présentation
EPREUVE E6 : PARCOURS DE PROFESSIONNALISATION
Architecture Client/Serveur
Programmation mobile: Android
GTCB Kahila Boulbaba BTS IRIS Session Sommaire Description du projet Présentation Moyen mis en œuvre Interaction entre les éléments Répartition.
LOGICIEL PL7 MICRO PROGRAMMATION MISE AU POINT Consignes?
Création d’applications distribuées.NET Ziriad Saibi Relation technique éditeurs de logiciels Microsoft France.
Semaine 05 - Android - Partie 02 Le TweetListActivity.
9 février 2010 Enrique Ruiz Mateos Architecte avant-vente Microsoft
Vous présente en quelques réalisations un réel savoir-faire, le fruit de longues années d’expériences, aujourd’hui à votre service. Toutes les fonctionnalités.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
1Boulogne Informatic Club PRESENTATION DE WINDOWS 10.
ListActivity_Wifi 1 Android: ListActivity et connexions en Wifi. Le nécessaire pour la réalisation d’un premier TP Notes de cours jean-michel Douin, douin.
Visual Information Solutions IDL 7.0 Pour une utilisation optimale d’IDL.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Introduction O.Legrand G. Seront. Open Handset Alliance Project Regroupement d'entreprises : –de télécommunications, –de constructeurs d’appareils mobiles,
Les applications O.Legrand G. Seront. Les applications Chaque application a son Linux.
Transcription de la présentation:

Android_Introduction 1 Android: Introduction, présentation Notes de cours jean-michel Douin, douin au cnam point fr version : 24 septembre 2015

Android_Introduction 2 Sommaire Intergiciel (middleware) –Les éléments de base Android OS comme intergiciel –Applications et évènements gérés par le middleware –Approche déclarative –Composants, classes de base Activity, BroadcastReceiver, Service, ContentProvider, Intent. –Patrons de conception utilisés Publish/subscribe Chaîne de responsabilités Fabrique méthode MVC, Modèle Vue Contrôleur Façade Procuration Médiateur Stratégie …

Android_Introduction 3 Bibliographie utilisée… à compléter Mobile Middleware, Architecture, Patterns and Practice, Sasu Tarkoma,ed. Wiley 2009 [Sheng-De Wang] Le point de départ de ce support Auteur: Prof. Sheng-De Wang intw cs.pu.edu.tw/a1.ppt [Sch06]Le site de douglas Schmidt ce site [Kra06] La présentation de S. Krakowiak faite à l ’école d ’été ICAR [VKZ05] le site de Uwe Zdun : ce livre : ce support informations générales MjUxY/Mobile_Middleware_Course_Principles_and_Patterns_Sasu_Tarkoma_powerpoint_ppt_presentation

Android_Introduction 4 Première partie : Introduction Intergiciel, fonctionnalités attendues Android –Un premier aperçu en quelques diapositives Le vocable Architecture logicielle Le simulateur, les API Une démonstration

Android_Introduction 5 Tendances, historique [Sch06] RTP DNS HTTP UDPTCP IP TELNET EthernetATMFDDI Fibre Channel FTP INTERNETWORKING ARCH TFTP 20 th Century Win2KLinuxLynxOS Solaris VxWorks Middleware Services Middleware Applications MIDDLEWARE ARCH 21 st Century

Android_Introduction 6 Fonctions attendues de l ’intergiciel de [Kra06] Proposer une API de haut Niveau –Masquer l ’hétérogénéité –Rendre la répartition invisible –Faciliter la programmation répartie  Fonctions orientées: Réseau « fixe », internet, web, SOA (Service Oriented Architecture)

Android_Introduction 7 Intergiciel et mobile Sécurité –Confidentialité, intégrité, contrôle des informations par l’utilisateur Mobile comme « Baie d’accueil » des applications –Installation, au sein d’un « sandbox » Liste des applications, annuaire, –Éligibilité, sélection de la « bonne » application, –Découverte au « run time » d’un service Déploiement, mise à jour, maintenance –Substitution d’une application par une autre Communication –Réseaux communications synchrones, asynchrones, interruptions de services Notifications inhérentes: sms, push … Persistance –Embarquée Consommation –Batterie

Android_Introduction 8 Android Sécurité –Linux, processus … Mobile comme « Baie d’accueil » des applications –Un processus une application une DVM (Dalvik Virtual Machine) (Vue logique), « sandbox » inhérent Déploiement, mise à jour, maintenance –Prise en charge par l’intergiciel Communication –Interne, externe -> intergiciel, sms, push … Persistance –-> intergiciel, SQLLite

Android_Introduction 9 Android les grandes lignes Composants Android Outils de Développement Architecture Logicielle Développement –en java avec quelques directives et configurations en syntaxe XML Un exemple, une démonstration –Un exemple en quelques lignes de java et d’XML

Android_Introduction 10 Composants Android Linux –Processus / DVM / Application Framework de déploiement d’applications –De nombreuses librairies, Navigateur intégré, WebKit ( webkit utilisé par safari, Google Chrome…) SQLite En natif, pilotes –Dépendant du matériel GSM Bluetooth, EDGE, 3G, WiFi Caméra, GPS, boussole et accéléromètre Température, …

Android_Introduction 11 Outils de développement SDK Android –En ligne de commandes –Plug-in sous eclipse –Émulateur –Débogueur –Traces fines d’exécution –Tests unitaires –Outils de mise au point Mesure de mémoire et performance

Android_Introduction 12 Framework ou baie d’accueil des applications Source :

Android_Introduction 13 Architecture et API

Android_Introduction 14 Développement –En java, configurations en syntaxe XML Une configuration de l’application –AndroidManifest.xml Une déclaration de ressources en XML –comme l’IHM ou des String »res/layout/hello_web_view.xml »res/values/strings.xml

Android_Introduction 15 Développement 1/2 Fichier de configuration, AndroitManifest.xml <manifest xmlns:android=" package="test.biblio" android:versionCode="1" android:versionName="1.0"> <activity android:name=".Demo"

Android_Introduction 16 Premier exemple support Sheng Wang package com.android.webviews; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebView; import android.webkit.WebViewClient; public class HelloWebView extends Activity { /** Called when the activity is first created. */ WebView public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl(" }

Android_Introduction 17 Démonstration Puis Les composants essentiels

Android_Introduction 18 Vocabulaire Les Essentiels –Activity Une activité est associée à une IHM –BroadcastReceiver Réception d’un message transmis par un émetteur via Android –Service Une tache de fond sans IHM –ContentProvider La persistance des données –Intent Les notifications –IntentFilter Les filtres des notifications candidates

Android_Introduction 19 Introduction … Classes Activity –Associée à une interface utilisateur Cycle de vie (démarrée, en pause, arrêtée, détruite…) –Peut démarrer d’autres activités, peut émettre des évènements(intentions, intent) Une configuration de type XML, permissions, librairies, BroadcastReceiver –Réception des évènements systèmes ou d’une autre application –Émission et réception d’intentions (intent) Service –Pas d’interface, un service à rendre, en tâche de fond –Intention de servir, langage commun aux clients et au service ContentProvider –Données rendues persistantes ( pour d’autres applications) –Un fichier, base SQLite Intent –Notifications, IntentFilter –Critères de sélection, éligibilité, mécanisme de résolution

Android_Introduction 20 Activity, Service, ContentProvider, BroadcastReceiver Source :

Android_Introduction 21 Application Une application peut être constituée de plusieurs écrans, A chaque écran lui correspond une activité, Une activité hérite et redéfinit certaines méthodes –onCreate, -> …, onPause, -> …, onStop, ->…onDestroy, -> … Android se charge des appels de ces méthodes –Un état de l’activité est donc induit par l’exécution de ces méthodes -> Inversion de contrôle –(cf. M.Fowler) –Android impose un cycle de vie, un état de l’activité

Android_Introduction 22 Architecture, vocabulaire Source : Application –Activity –Service –ContentProvider –BroadcastReceiver

Android_Introduction 23 public class android.app.Activity package android.app; public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState){ protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); … etc … } induit un cycle de vie imposé par le « framework »

Android_Introduction 24 Inversion de Contrôle… Rappel public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); …..} Android, middleware onCreate(..) onStart(); Activités activité_1 Activité 2Activité 3 …activité_1 = new Activité_1(); activité_1.onCreate(); activité_1.onStart(); ….

Android_Introduction 25 Le cycle de vie d’une activité Séquencement des appels imposé par le système

Android_Introduction 26 Activité son état Attention une application dans l’état Paused ou Stopped peut être supprimé par Android

Android_Introduction 27 En diagramme de séquences

Android_Introduction 28 Un exemple: une très petite IHM Une « IHM » Un bouton, un écouteur, un clic et l’heure est affichée ! 1.En approche traditionnelle Tout est codé en Java IHM comprise 2.En approche déclarative Usage : –d’XML pour la configuration, –de java pour l’utilisation

Android_Introduction 29 Activity Un Click et l’heure est actualisée import android.app.Activity; import android.os.Bundle; import static android.view.View.OnClickListener ; import android.widget.Button; import java.util.Date; public class Now extends Activity implements OnClickListener { private Button public void onCreate(Bundle bundle) { super.onCreate(bundle); buttonNow = new Button(this); // <- un bouton buttonNow.setOnClickListener(this);// <- un écouteur auprès de cette vue setContentView(buttonNow); // <- le bouton devient la vue, (l’écran) } public void onClick(View view) { // <- à chaque click buttonNow.setText(new Date().toString()); } Est-ce une vue apparentée swing Et ici un MVC à lui tout seul … ? discussion

Android_Introduction 30 Activity-bis Un Click et l’heure est actualisée Approche « déclarative », –res/layout/activity_now.xml –Balise XML <Button attribut android:onClick –Le fichier res/layout/activity_now.xml < Button xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Now" android:onClick="onClickButtonNow" /> onClickButtonNow: le nom de la méthode déclenchée à chaque clic –public void onClickButtonNow(View v){ …..}

Android_Introduction 31 L’activity devient (version déclarative) public class NowActivity extends Activity { private Button buttonNow; protected void onCreate(Bundle bundle) { super.onCreate(bundle); // Vue issue du fichier XML, le fichier R.java est généré automatiquement // R.java représente un accès en java aux ressources décrite en XML setContentView(R.layout.activity_now); // Button, identifié par un Id, est issu du fichier XML buttonNow = (Button)findViewById(R.id.buttonNowId); } // l’attribut XML onClick a ce nom de méthode comme valeur public void onClickButtonNow(View view) { buttonNow.setText(new Date().toString()); }

Android_Introduction 32 Discussion MVC ? Démonstration Discussion MVC ? –Modèle ? –Vue ? –Contrôleur ?

Android_Introduction 33 MVC discussion suite

Android_Introduction 34 Retour sur les API Android: un ensemble d’API –Activity ManagerActivity Manager –View System listes, boutons,… navigateur (WebView)View –

Android_Introduction 35 View System Un usage du patron composite

Android_Introduction 36 View (Component), ViewGroup (Composite) Source: [Sheng-De Wang] C’est bien un composite

Android_Introduction 37 Détaillé: Composite Source: [Sheng-De Wang] Exemple précédent setContentView(buttonNow);

Android_Introduction 38 Une calculette: Layout, View, Button… Description de cette interface en XML –Fichier res/layout/main.xml LinearLayout TextView EditText TableRow Button ProgressBar

Android_Introduction 39 Interface, IHM : Approche déclarative./res/ Chaque composant possède un id (android:id=

Android_Introduction 40 Architecture: la calculette, un classique Le Modèle –La calculette munie de ses opérations (+,-,/,*,…) Les sources du modèle sont ici – –La calculette hérite de la classe java.util.Observable La Vue –L’IHM affichage, zone de saisie, boutons … Le Contrôleur –Le comportement de l’IHM

Android_Introduction 41 Calculette Modèle MVC nouvelle discussion « XML » IHM L’activity Android est une vue du Modèle Calculette (implements Observer) L’activity Android est le contrôleur de l’IHM décrite en XML ( extends Activity) CalcActivity Contrôleur Listeners extends android.app.Activity implements java.util.Observer enter, add, sub, … update(.. Classes déjà écrites Android extends java.util.Observable implements CalculetteI

Android_Introduction 42 Résumé: Application, Activity … –Un processus linux contient une application, –Une application, peut contenir une ou plusieurs activités, –Une activité se trouve dans un certain état, cf. cycle de vie –Une activité possède sa vue (View)

Android_Introduction 43 Démonstration Le tp calculette …

Android_Introduction 44 Communication inter applications Intent, comme notification –Souscription/Publication –Appeler, déclencher une autre activité Avec éventuellement des paramètres et des résultats attendus –L’intergiciel/ Android sélectionne la « bonne application » Selon les critères exigés par le souscripteur Critères précisés lors de la publication –Nécessaire adéquation à l’exécution services fournis / services requis

Android_Introduction 45 Head First Android O’Reilly id%20book%20android&hl=fr&pg=PA82#v=onepage&q=head%20first%20android%20book%20 android&f=false

Android_Introduction 46 Patron Publish-Subscribe/Intent & Context Source: rappelhttp://roboticswikibook.org

Android_Introduction 47 Sous Android Mediator, classe Context – Subscriber, classe BroadcastReceiver – X,Y les thèmes, classe Intent – IntentFilter –

Android_Introduction 48 3 Exemples 1.Un publisher s’adresse à l’intergiciel –Une activité souhaite téléphoner … À la recherche d’une application prédéfinie 2.Un subscriber de SMS entrants –Une activité souhaite filtrer le contenu des SMS entrants… Installation d’un Receiver 3.Un publisher et un subscriber Une activité souhaite publier un résultat à l’intention d’autres activités Le publisher d’adresse à l’intergiciel qui sélectionne les abonnés

Android_Introduction 49 Publisher: Un mobile à l’Intention de téléphoner Intent Démarrer une activité prédéfinie : téléphoner, légitime… public class TelephonerActivity extends Activity protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.activity_now); } public void onClick(View view) { Intent intent = new Intent(); intent.setAction("android.intent.action.DIAL"); this.startActivity(intent); } android.app.Activity extends ….. extends android.content.Context

Android_Introduction 50 Publisher : Téléphoner Le souscripteur a dû déjà souscrire … Discussions Intent intent = new Intent(); intent.setAction("android.intent.action.DIAL"); –À la recherche de la bonne application effectuée par Android Ici un nom ("android.intent.action.DIAL"); Plusieurs élus possibles Composant logiciels, Maintenance … Le patron chaîne de responsabilités est utilisé

Android_Introduction 51 Subcriber : Recevoir un SMS, le souscripteur –Le souscripteur hérite de android.content.BroadcastReceiver Et implémente ce qu’il faut faire lors de la notification public class ReceiverSMS extends BroadcastReceiver{ // à chaque SMS reçu public void onReceive(Context ctxt, Intent intent) { // } // à chaque SMS reçu ? Adéquation intention (Intent) ReceiverSMS par un filtre (IntentFilter) Réalisation : tout en java ou directives XML …

Android_Introduction 52 Subcriber : Recevoir un SMS, le souscripteur –Tout java: un receveur/souscripteur au sein d’une activité public class SMSActivity extends Activity { private static class ReceiverSMS extends BroadcastReceiver{ // à chaque SMS reçu public void onReceive(Context ctxt, Intent intent) { // … }} protected void onCreate(Bundle bundle) { super.onCreate(bundle); final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; IntentFilter filter = new IntentFilter(SMS_RECEIVED); registerReceiver(new ReceiverSMS(), filter); setContentView(R.layout.activity_now); }

Android_Introduction 53 Subcriber : Le receveur en déclaratif public class ReceveurDeSMS extends BroadcastReceiver{ // à chaque SMS reçu public void onReceive(Context ctxt, Intent intent) { // } Chaîne de responsabilités

Android_Introduction 54 Publisher/subscriber Application: –Une liste d’item : le modèle, du java standard, portable –ListView + ListActivity : la Vue –Un Receiver : le Contrôleur

Android_Introduction 55 La vue Une liste d’item … –Ajout et suppression

Android_Introduction 56 La liste d’items Items : le modèle MainActivity : la vue ItemsController : le contrôleur Items extends Observable MainActivity extends ListActivity implements Observer ItemsControler extends BroadcastReceiver MainActivity extends ListActivity implements Observer ItemsController extends BroadcastReceiver

Android_Introduction 57 La classe Items : le modèle J2SE portable

Android_Introduction 58 ItemsControler Le contrôleur

Android_Introduction 59 La Vue 1/2

Android_Introduction 60 La Vue 2/2

Android_Introduction 61 MVC, discussions MVC respecté Couplage faible conservé Items extends Observable MainActivity extends ListActivity implements Observer MainActivity extends ListActivity implements Observer ItemsControler extends BroadcastReceiver AnotherActivity extends Activity implements Observer web, cloud

Android_Introduction 62 Publish/Subscribe Plusieurs Receveurs/souscripteurs, l’un deux peut arrêter la propagation, une priorité peut être affecté à chaque receveur La liste des souscripteurs serait-elle : une Chaîne de responsabilités avec priorités ?

Android_Introduction 63 Patron publish/subscribe « Over the air » Google Cloud Messaging Android 2.2 Message <= 4ko Trafic illimité –Nécessite une inscription auprès de Google Avec de préférence un compte gmail dédié

Android_Introduction 64 Publish/Subscribe « Over the air » 1) Souscription

Android_Introduction 65 Publish/Subscribe « Over the air » 2) Publication

Android_Introduction 66 Publish/Subscribe « Over the air » 3) Notification

Android_Introduction 67 Publish/Subscribe « Over the air » 3) Notification Suite et fin

Android_Introduction 68 Les services: Sommaire –Services Cycle de vie –création, démarrage et arrêt Service local Service « global », AIDL (Android Interface Description Language)

Android_Introduction 69 Sommaire : Architectures présentées Service local, une activité, un service –Échange de données Envoi des paramètres depuis l’activité par une intention Réception des résultats –Simplifié, variable globales, ici le compteur (même machine) –Usage des classes Messenger et Handler Un processus Une DVM Une activité Un service compteur

Android_Introduction 70 Sommaire : Architectures présentées Un service global, une activité –Échange de données Envoi depuis l’activité par une intention Réception des résultats –Messenger et handler –ServiceConnection, accès via un mandataire AIDL Un processus Une DVM Une activité Un service compteur Un processus Une DVM

Android_Introduction 71 Bibliographie utilisée Services.pdfhttp://grail.cba.csuohio.edu/~matos/notes/cis-493/lecture-notes/Android-Chapter22- Services.pdf

Android_Introduction 72 Service En tâche de fond –Pas d’IHM J’écoute un fichier audio mp3, pendant que je navigue sur le web, Dès que je m’empare du mobile, une sonnerie retentit, Les coordonnées GPS sont envoyées régulièrement, Dès que je m’approche d’une zone dangereuse mon mobile s’éteint, … Toujours disponibles –Locaux Service personnel, inaccessible pour les autres applications –Service, Intent, IntentService »En accès restreint –« Distants » Accessible aux autres applications –Langage commun AIDL –Recherche du service, IBinder, Connection

Android_Introduction 73 Services : cycle de vie, deux styles Quelque soit l’architecture choisie Usage de startService Usage de bindService

Android_Introduction 74 Un Service Local, au sein d’une activity Une horloge –Un compteur est incrémenté chaque seconde …tic…tic…tic…tic…tic…tic Le fichier Manifest.xml mentionne le service (TimeService) <manifest xmlns:android=" package="service.local" android:versionCode="1" android:versionName="1.0">

Android_Introduction 75 Un résumé et la suite Un service local –Hérite de Service StartService ou Une autre écriture est possible avec bindService –L’exemples présenté utilise la même DVM Accès « simplifié » aux services rendus –Accès par une méthode de classe, Et maintenant : un service global

Android_Introduction 76 Discussion, même DVM ou non Ici le service partage le même processus que l’activité Attention Si nous choisissons, un processus dédié au service –<service android:name="TimeService" android:process= ":timeService"> – –Cela ne fonctionne plus, démonstration … –explication … cf. schéma page suivante

Android_Introduction 77 Schéma : processus et DVM Un seul processus Activity + service Tout va bien en apparence Deux processus, deux DVM Exception !!!! (Le code pour la lecture de count est le même) ActivityTimeService Activity TimeService count 5 count nullcount 5 L’accès par des variables de classes: peu satisfaisant

Android_Introduction 78 IPC et communication En conséquence pour un service global un IPC est nécessaire –IPC comme Inter Process Communication –Plusieurs façons de faire Messenger + Handler broadcastReceiver AIDL

Android_Introduction 79 Communication entre processus Solutions –Messenger + Handler Message inter process Autorise une communication asynchrone Un message est envoyé au client, celui-ci est prévenu à l’aide d’un Handler –Un receveur ou plusieurs receveurs Un ou des receveurs et le bon filtre sont enregistrés Le service envoie un « intent » et son filtre, –A destination des receveurs agréés, filtrés –Le service devient global Nécessité d’utiliser AIDL –in, out, inout, et certains types pris en compte, –implements Parcelable pour du sur mesure

Android_Introduction 80 Service global : création, démarrage et arrêt En tache de fond Toujours disponible Services globaux –« Distants » Rmi en plus simple … même machine … Accessible à tous –Attribut android:exported="true", balise service

Android_Introduction 81 Un Service à disposition de tous Service distant, –Découverte du service par une intention … –Sérialisation/désérialisation lors du passage de paramètre Implicite si types primitifs, List et Map, Explicite par l’implémentation de Parcelable Android, middleware Applications activité_1 Activité 2service Services

Android_Introduction 82 Un simple service global Un service accessible par toute application –Avec quelques contraintes Un langage commun AIDL –AIDL, Android Interface Description Language –Types primitifs de java –String, CharSequence, List (ArrayList coté serveur), Map (HashMap) Indication du type de passage de paramètre in, out, inout Sérialisation/désérialisation –Autres classes, elles devront : implements Parcelable Analogue à Serializable, mais rien n’est implicite

Android_Introduction 83 Le manifest, installation du service Pour tous, et ici dans un processus séparé <manifest xmlns:android=" package="seja.android" android:versionCode="1" android:versionName="1.0"> <activity android:name=".ServiceSMSReceivedActivity" <service android:name=".SMSService" android:exported="true" android:process="seja.android.SMSService" />

Android_Introduction 84 Un autre client depuis une autre application Recopie du fichier.aidl, (langage commun) –Noms de paquetage identiques Même séquence qu’un client du même contexte –Recherche du service –Connexion au service

Android_Introduction 85 ContentProvider Sauvegarde et restitution de données –Données accessibles à toutes applications ContentProvider –Persistance –Le patron DAO/CRUD Data Access Object Create Retrieve Update et Delete

Android_Introduction 86 Mes Contacts, un client le ContentProvider prédéfini : phone

Android_Introduction 87 ContentProvider ContentProvider, comme les contacts, accès –ContentResolver resolver = getContentResolver(); Identification du bon « Contentprovider » grâce à son URI –Uri uri = android.provider.Contacts.Phones.CONTENT_URI; –String s = uri.toString(); –// assert s.equals( " content://contacts/phone " ); –Appel de resolver.query Pour une interrogation –Parcours à l’aide d’un « Cursor »

Android_Introduction 88 Cursor comme ResultSet

Android_Introduction 89 Conclusion Ce n’est qu’une introduction … –Approche par les patrons s’impose pour la partie Service et ContentProvider …