Article complet: Utiliser les services sous Android

Dimension: px
Commencer à balayer dès la page:

Download "Article complet: Utiliser les services sous Android"

Transcription

1 Page 1 of 12 Forums Tutoriels Magazine FAQs Blogs Projets Chat Newsletter Études Emploi Club Contacts Accueil Conception Java.NET Dév. Web EDI Langages SGBD Office Solutions d'entreprise Applications Systèmes INDEX DES BLOGS REGLES ENREGISTREZ-VOUS IDENTIFIEZ-VOUS OUVREZ VOTRE BLOG Blogs des développeurs» Android - Le blog d'un développeur Article complet: Utiliser les services sous Android 26/02/ :54:06, Catégories: Récapitulatif Java, Android, Android, 6754 mots, Nicolas Druet [Android][Java] Utiliser les services sous Android A l'instar des Activities, des Intents, les services font partie des briques essentielles d'android. Ils ne disposent pas d'interface utilisateur mais fonctionnent en arrière plan pour une période de temps indéfinie. L'exemple le plus courant est le lecteur de musique, qui vous permet d'écouter vos mp3 sans bloquer la navigation sur internet ou consultre la liste des vos contacts. Un service peut également rapatrier des données sur internet tels que des flux RSS. Dans ce long article nous aborderons : Les services (threads, cycle de vie...) Services Locaux (LocalService) Déclaration du service Implémentation des listeners Implémentation d'un binder Services Distants (RemoteService) Déclaration du service Mise en place des Callbacks Démarrer le service au boot du téléphone Exemple : Connexion au service MP3 [Suite:] > Les services (threads, cycle de vie...) Les services ont pour but de réaliser des tâches de fond sans aucune interaction avec l'utilisateur pour une durée indéfinie. Il existe deux type de services : les services locaux (ou LocalService) qui s'exécutent dans le même processus que votre application Les services distants (ou RemoteService) qui s'exécutent dans un processus différent de celui de application Les services s'exécutent dans le Thread principal du processus parent. Ils doivent être déclarés dans le fichier AndroidManifest.xml: <service android:name=".subpackagename.servicename"/> Ils doivent étendre la classe Service dont vous devrez surcharger les méthodes suivantes en fonction de vos besoins : void oncreate(); // initialisation des ressources void onstart(intent intent); // SDK<2.0 la tâche de fond démarre void onstartcommand(intent intent, int flags, int startid); // SDK>2.0 la tâche de fond démarre void ondestroy(); // libération des ressources IBinder onbind(intent intent); // connexion client distant boolean onunbind(intent intent); // déconnexion d'un client void onrebind(intent intent) Google a publié un post sur la méthode onstartcommand() apparue avec le SDK 2.0 : La méthode onstart() est dépréciée mais doit être redéfinie pour une compatibilité avec les SDK antérieurs (si nécessaire).

2 Page 2 of 12 Quant au cycle de vie d'un service, Google l'illustre de la manière suivante : Pour interagir (demarrer/arrêter...) avec un service, deux possibilités s'offrent à nous : Soit on appelle la méthode startservice() qui invoque la méthode oncreate() puis onstart() service.startservice() -> oncreate() - > onstartcommand() [service running] L'appel de la méthode stopservice() invoque la méthode ondestroy() Soit on appelle la méthode bindservice() qui appelle uniquement la méthode oncreate() activity.bindservice() ->oncreate() [service created] Il est possible de voir la liste des services exécutés en allant dans Menu > Settings > Applications > Running Services > du téléphone: > Services locaux (LocalService) >> Déclaration du service Un service Local n'est accessible que par les Activity de l'application. Pour l'exemple, notre service initialise un Timer et une tâche qui sera exécutée toutes les minutes. Nous allons créer une classe héritant de Service et surcharger les méthodes oncreate(), onstart() et ondestroy(). public class BackgroundService extends Service { private Timer timer ;

3 Page 3 of 12 protected void oncreate() { super.oncreate(); timer = new Timer(); Log.d(this.getClass().getName(), "oncreate"); public int onstartcommand(intent intent, int flags, int startid) { Log.d(this.getClass().getName(), "onstart"); timer.scheduleatfixedrate(new TimerTask() { public void run() { // Executer de votre tâche, 0, 60000); return START_NOT_STICKY; public void ondestroy() { Log.d(this.getClass().getName(), "ondestroy"); this.timer.cancel(); Nous déclarons le service dans le fichier AndroidManifest.xml à l'intérieur de la balise <application> : <service android:name=".backgroundservice" /> Pour le démarrer, nous faisons appel à la méthode startservice(intent) de l'activity prenant en paramêtre un Intent. Ce dernier peut être initialisé de deux manières : Soit en lui passant explicitement le context de l'application et la class du service. Intent intent = new Intent(this,BackgroundService.class); startservice(intent); Soit en déclarant une action dans le fichier AndroidManifest.xml... <service android:enabled="true" android:name=".backgroundservice"> <intent-filter> <action android:name=".backgroundservice.action" /> </intent-filter> </service>... que nous passons au constructeur de l'intent Intent intent = new Intent(".BackgroundService.ACTION"); startservice(intent); Il est possible de passer des objets complets serialisables en paramètre avec les méthodes intent.putextra(...). Les objets pourront être récupérer dans la méthode onstart(intent intent, int startid) du service avec intent.getextras().get(string key). Le fonctionnement est similaire à une table de Hash. Pour arrêter notre service : Intent intent = new Intent(this,BackgroundService.class); stopservice(intent); >> Implémentation des listeners Dans un premier temps, nous allons implémenter un système de listeners très simple. L'interface IBackgroundServiceListener implémentée par notre Activity pour écouter les mises à jour du service est la suivante : public interface IBackgroundServiceListener { public void datachanged(object o); Nous créons l'interface IBackgroundService : public interface IBackgroundService { public void addlistener(ibackgroundservicelistener listener); public void removelistener(ibackgroundservicelistener listener); Nous implémentons l'interface dans le service : private List<IBackgroundServiceListener> listeners = null; // Ajout d'un listener public void addlistener(ibackgroundservicelistener listener) { if(listeners == null){ listeners = new ArrayList<IGoogleWeatherListener>(); listeners.add(listener); // Suppression d'un listener public void removelistener(ibackgroundservicelistener listener) { if(listeners!= null){ listeners.remove(listener); // Notification des listeners private void firedatachanged(object data){ if(listeners!= null){ for(ibackgroundservicelistener listener: listeners){

4 Page 4 of 12 listener.datachanged(data); Pour accéder au service depuis l'activity nous rajoutons une variable static IBackgroundService service que nous initialiserons dans la méthode oncreate() : public class BackgroundService extends Service implements IBackgroundService { private static IBackgroundService service; public void oncreate() {... service = this; public static IBackgroundService getservice() { return service; L'emploi d'une variable static n'est pas la meilleure solution. Nous verrons plus tard comment nous en passer. Mais à ce stade, il n'est pas possible d'accéder aux méthodes du service et d'appeler un setter. Nous poursuivons en définissant notre listener dans notre Activity: Intent intent = new // Lancement du service Intent(this,BackgroundService.class); startservice(intent); // Ajout de l'activity à la liste des listeners du service BackgroundService.getService().addListener(new IBackgroundServiceListener() { public void datachanged(object o) { // mise à jour de l'interface graphique ); Au moment voulu, dans la méthode run() du Timer nous ferons appel à la méthode privée firedatachanged(data) pour notifier les listeners (dans notre cas, l'activity) de la mise à jour des données. Attention! Si nous nous contentons d'implémenter la méthode datachanged(), l'exception suivante sera levée au runtime : android.view.viewroot$calledfromwrongthreadexception: Only the original thread that created a view hierarchy can touch its views. En effet, la méthode du listener datachanged() est appelée par le Timer, et donc exécutée dans le Thread de celui-ci. L'exception nous indique que toute mise à jour de l'interface utilisateur ne peut se faire que par le Thread responsable de la création des View, Button, TextView... Nous utilisons donc la méthode runonuithread de la classe Activity pour poster des instructions dans l'uithread : // Ajout de l'activity à la liste des listeners du service BackgroundService.getService().addListener(new IBackgroundServiceListener() { public void datachanged(final Object o) { MyActivity.this.runOnUiThread(new Runnable() { public void run() { // Mise à jour de l'ui ); ); Il nous reste à mettre à jour la méthode ondestroy() du service pour vider la liste des listeners : public void ondestroy() { this.listeners.clear(); this.timer.cancel(); Log.d(this.getClass().getName(), "ondestroy"); A ce stade, nous avons vu comment déclarer notre service et y accéder, définir une tâche de fond, et mettre à jour notre interface utilisateur. Le défaut de la solution proposée est l'utilisation d'une variable static pour accéder au service depuis l'activity. Malheureusement, la méthode startservice(intent) n'offre pas d'accès direct aux méthodes du services. Pour se faire, nous allons avoir recours au binding. >> Implémentation d'un binder Comme avec un RemoteService, nous allons nous connecter au service et récupérer un Binder. A travers cet objet nous accéderons aux méthodes public du service via l'interface IBackgroundService que nous avons définie plus haut. L'avantage de cette solution est d'unifier l'utilisation des LocalService et RemoteService mais surtout de récupérer l'instance du service. Nous redéfinissons la méthode onbind(), modifions l'implémentation du listener et déportons notre tâche de fond dans la méthode _onstart() : public class BackgroundService extends Service implements IBackgroundService { private Timer timer ; private BackgroundServiceBinder binder ; private List<IBackgroundServiceListener> listeners = null; public void oncreate() { timer = new Timer();

5 Page 5 of 12 binder = new BackgroundServiceBinder(this); _onstart(); public IBinder onbind(intent intent) { return binder; public void _onstart(){ timer.scheduleatfixedrate(new TimerTask() { public void run() { if(listeners!= null){ firedatachanged(new Object());, 0, 60000); public int onstartcommand(intent intent, int flags, int startid) { _onstart(); return START_NOT_STICKY; // Ajout d'un listener public void addlistener(ibackgroundservicelistener listener) { if(listeners == null){ listeners = new ArrayList<IGoogleWeatherListener>(); listeners.add(listener); // Suppression d'un listener public void removelistener(ibackgroundservicelistener listener) { if(listeners!= null){ listeners.remove(listener); // Notification des listeners private void firedatachanged(object data){ if(listeners!= null){ for(ibackgroundservicelistener listener: listeners){ listener.datachanged(data); public void ondestroy() { this.listeners.clear(); this.timer.cancel(); Nous définissons le binder qui nous permettra de récupérer l'instance de notre service : public class BackgroundServiceBinder extends Binder{ private IBackgroundService service = null; public BackgroundServiceBinder(IBackgroundService service) { super(); this.service = service; ; public IBackgroundService getservice(){ return service; L'avantage de l'interface IBackgroundService est de masquer les méthodes oncreate(), onbind()... et de ne proposer uniquement addlistener(), removelistener() et pourquoi pas d'autres méthodes métiers. Il nous reste à nous connecter au service, accéder aux méthodes exposées par l'interface et s'ajouter comme listener pour mettre à jour l'interface utilisateur : Intent intent = new Intent(this,BackgroundService.class); final IBackgroundServiceListener listener = new IBackgroundServiceListener() { public void datachanged(final Object data) { MyActivity.this.runOnUiThread(new Runnable() { public void run() { // Mise à jour de l'ui ); ; ServiceConnection connection = new ServiceConnection() { public void onserviceconnected(componentname name, IBinder service) { Log.i("BackgroundService", "Connected!"); IBackgroundService service = ((BackgroundServiceBinder)service).getService(); service.addlistener(listener); public void onservicedisconnected(componentname name) { Log.i("BackgroundService", "Disconnected!");

6 Page 6 of 12 ; bindservice(intent,connection, Context.BIND_AUTO_CREATE); La connexion au service se fait via la méthode bindservice (Intent service, ServiceConnection conn, int flags) de la classe Context dont hérite Activity. L'argument flags peut prendre soit 0 soit Context.BIND_AUTO_CREATE pour forcer le service à démarrer, s'il ne l'est pas, au moment de la connexion. La partie sur les LocalService est terminée. Je ne suis pas personnellement convaincu de leur intéret. Les classes Service, ServiceConnection, IBinder... sont relativement contraignantes, complexifient le code et n'offrent pas vraiment d'aide à la réalisation de services. Mais si un jour votre LocalService doit se transformer en RemoteService alors vous serez prets. > Services distants (RemoteService) >> Déclaration du service Contrairement aux LocalService qui s'exécutent dans le processus de l'application et plus particulièrement dans le thread principal, les RemoteService s'exécutent dans un processus totalement différent de celui de votre application. Afin que deux processus différents puissent communiquer et s'échanger des données, Google a implémenté son IDL appelé AIDL (Android Interface Definition Language) pour décrire les méthodes publiques et les données échangées. Cette description se fait dans un fichier.aidl qui devra être connu des deux processus! Pourront être échangées entre deux processus, seulement les types primitifs java (int, boolean, etc), les String, List, Map et CharSequence. Pour des objects personnalisés, vous devrez implémenter l'interface Parcelable. Un RemoteService peut être sollicité par plusieurs applications différentes. C'est pourquoi je préfère le déporter dans un nouveau projet Android sous Eclipse. Je conseille également la réalisation d'une petite interface graphique avec deux boutons pour le démarrer et l'arrêter. Si vous ne souhaitez pas créer un projet particulier, il faudra ajouter android:process=":remote" à la déclaration de votre service (<service>) dans le fichier AndroidManifest.xml. Après avoir créer un projet BackgroundService (package de l'application com.android23.backgroundservice), nous créons notre service com.android23.backgroundservice.service.backgroundservice le plus simple qui soit, avec un Timer et un objet Data: public class BackgroundService extends Service { private Timer timer ; private BackgroundServiceBinder binder ; private Data data; public void oncreate() { binder = new BackgroundServiceBinder(this); timer = new Timer(); _onstart(); public void _onstart(){ timer.scheduleatfixedrate(new TimerTask() { public void run() { data = new Data(18, Data.Weather.ENSOLEILLE);, 0, 60000); public void ondestroy() { super.ondestroy(); this.binder = null; this.timer.cancel(); public IBinder onbind(intent intent) { return binder; public Data getdata() { return data; Pour chaque RemoteService il est nécessaire de déclarer un fichier.aidl que nous plaçons dans le même package (com.android23.backgroundservice.service). Voici le contenu de notre fichier IRemoteBackgroundService.aidl : package com.android23.backgroundservice.service; import com.android23.backgroundservice.bo.data; interface IRemoteBackgroundService { int getpid(); // Renvoie le PID du processus du service Data getdata(); // Renvoie notre objet mis à jour //void updatedata(in Data data); Il n'y pas de règle concernant le nom du fichier. Ce fichier sert d'interface entre le client et le service. Nous y déclarons seulement les méthodes public. La syntaxe ressemble fortement au Java bien que cela n'en soit pas. Les mots clefs 'in', 'out', 'inout' sont ajoutés aux paramètres des méthodes. '//' permet d'ajouter des commentaires. Enfin on peut spécifier 'oneway' devant interface. Nous créons dans le package com.android23.backgroundservice.bo, notre objet java Data implémentant l'interface Parcelable : public class Data implements Parcelable { public static enum Weather {NUAGEUX,PLUVIEUX,ENSOLEILLE,BROUILLARD private int temperature;

7 Page 7 of 12 private Weather today; public static final Parcelable.Creator<Data> CREATOR = new Parcelable.Creator<Data>() { public Data createfromparcel(parcel in) { return new Data(in); ; public Data[] newarray(int size) { return new Data[size]; public Data(int temperature, Weather today) { super(); this.temperature = temperature; this.today = today; public int gettemperature() { return temperature; public Weather gettoday() { return today; private Data(Parcel in) { readfromparcel(in); public void readfromparcel(parcel in) { temperature = in.readint(); today = (Weather)in.readSerializable(); public int describecontents() { return 0; public void writetoparcel(parcel arg0, int arg1) { arg0.writeint(temperature); arg0.writeserializable(today); Notre objet contient le temps et la température, deux types java simples. Le code est calqué sur l'exemple que vous trouverez sur L'interface Parcelable nous oblige à définir la méthode writetoparcel() dans laquelle nous ajoutons à l'objet Parcel tous les attributs de notre objet Data. Un Parcel peut être vue comme l'unité de communication entre deux processus. Attention, l'ordre dans lequel nous ajoutons les attributs à une importance. C'est ordre doit être respecté dans la méthode readfromparcel(). L'attribut static CREATOR est obligatoire. Il implémente l'interface Parcelable.Creator. L'implémentation de cette interface nous force a écrire la méthode readfromparcel(). Pour que notre objet Data puisse voyager d'un processus à l'autre, il nous reste à déclarer son fichier Data.aidl : package com.android23.backgroundservice.bo; parcelable Data; Le mot clef parcelable spécifie que notre objet Data implémente bien le protocole Google pour les communication IPC. Les erreurs contenues dans les fichiers.aidl devraient disparaitre. Eclipse génère alors l'interface Java IRemoteBackgroundService dans le répertoire source "gen" du projet : Il nous reste ensuite à déclarer notre BackgroundServiceBinder qui permettra au client d'accéder aux méthodes déclarées dans le fichier aidl. Notre binder hérite de IRemoteBackgroundService.Stub généré par Eclipse : public class BackgroundServiceBinder extends IRemoteBackgroundService.Stub{

8 Page 8 of 12 private BackgroundService service = null; public BackgroundServiceBinder(BackgroundService service) { super(); this.service = service; public Data getdata() throws RemoteException { return service.getdata(); ; public int getpid() throws RemoteException { return Process.myPid(); N'oublions pas de déclarer notre service dans le fichier AndroidManifest.xml : <application android:icon="@drawable/icon" android:label="@string/app_name"> <service android:exported="true" android:name=".service.backgroundservice" /> </application> Il est possible d'ajouter une permission : <permission android:name="com.android23.backgroundservice.backgroundservice_permission" /> <application android:icon="@drawable/icon" android:label="backgroundservice"> <service android:exported="true" android:enabled="true" android:name=".service.backgroundservice" android:permission="com.android23.backgroundservice.backgroundservice_permission"/> </application> Les clients devront déclarer cette permission dans leur fichier manifest pour se connecter au service. Sans quoi une SecurityException sera levée à l'appel des méthodes startservice ou bindservice. Pour plus d'informations concernant les permissions, jetez un coup d'oeil à la documentation Google: Revenons à notre projet Eclipse principal. Pour réaliser notre appel distant au service, nous devons y copier/coller les fichier.aidl Data.aidl, et IRemoteBackgroundService.aidl dans le même package que le projet BackgroundService, ainsi que votre objet java Data! Eclipse créera automatiquement les interfaces d'accès. Pour nous connecter au service, rien de bien compliqué : Intent intent = new Intent(); intent.setclassname("com.android23.backgroundservice", "com.android23.backgroundservice.service.backgroundservice"); ServiceConnection remoteconnection = new ServiceConnection() { public void onservicedisconnected(componentname name) { ; public void onserviceconnected(componentname name, IBinder service) { IRemoteBackgroundService service = IRemoteBackgroundService.Stub.asInterface(service); try { service.getpid(); service.getdata(); catch (RemoteException e) { // TODO Auto-generated catch block bindservice(intent, remoteconnection, Context.BIND_AUTO_CREATE); Nous passons au constructeur de l'intent le package principal de notre projet BackgroundService puis la classe du service. IRemoteBackgroundService.Stub.asInterface() nous permet de récupérer notre service. A noter également que chaque appel de méthode peut lever une RemoteException. Pour nous déconnecter au service, nous faisons appel à la méthode unbindservice(serviceconnection) qui prend en paramêtre l'object ServiceConnection que nous avons créé : unbindservice(remoteconnection); Il est indispensable d'ajouter la permission dans le fichier AndroidManifest.xml, au même niveau que la balise <application> sans quoi notre Activity ne se connectera jamais : <uses-permission android:name="com.android23.backgroundservice.backgroundservice_permission"></usespermission> Il n'est pas possible de débugger à la fois le service et notre application. Pour tester, notre service il sera nécessaire de développer dans notre projet BackgroundService une Activity avec 2 boutons : un pour démarrer le service, et l'autre pour l'arrêter. Pour tester notre application, nous déployons le service en premier puis nous lançons notre application en mode debug. >> Mise en place d'un syteme de Callback/Listeners Comme pour les LocalService, les RemoteService peuvent également notifier leurs clients grâce une liste RemoteCallbackList. Pour cela nous allons apporter quelques modifications. Pour commencer, retournons dans le projet BackgroundService, et modifions le fichier IRemoteBackgroundService.aidl en supprimant la méthode getdata() et en rajoutant les méthodes registercallback et unregistercallback qui permettrons aux clients de s'enregistrer auprès du service : package com.android23.backgroundservice.service; import com.android23.backgroundservice.service.iremotebackgroundservicecallback;

9 Page 9 of 12 interface IRemoteBackgroundService { int getpid(); void registercallback(iremotebackgroundservicecallback cb); void unregistercallback(iremotebackgroundservicecallback cb); A travers cette interface, les clients pourront s'enregistrer. Une fois enregistrés il leur faudra implémenter l'interface IRemoteBackgroundServiceCallback que nous déclarons dans le fichier IRemoteBackgroundServiceCallback.aidl : package com.android23.backgroundservice.service; import com.android23.backgroundservice.bo.data; interface IRemoteBackgroundServiceCallback { void datachanged(in Data data); Nous déclarons dans notre service, la liste des clients à l'écoute : final RemoteCallbackList<IRemoteBackgroundServiceCallback> callbacks = new RemoteCallbackList<IRemoteBackgroundServiceCallback>(); public RemoteCallbackList<IRemoteBackgroundServiceCallback> getcallbacks() { return callbacks; Nous mettons à jour la méthode _onstart() afin de créer un nouvel objet Data toutes les minutes et notifier les clients : public void _onstart() { Log.i(getClass().getSimpleName(), "_onstart()"); timer.scheduleatfixedrate(new TimerTask() { public void run() { data = new Data(++counter, Data.Weather.BROUILLARD); // Broadcast to all clients the new value. final int N = callbacks.beginbroadcast(); for (int i = 0; i < N; i++) { try { callbacks.getbroadcastitem(i).datachanged(data); catch (RemoteException e) { callbacks.finishbroadcast();, 0,60000); callbacks.beginbroadcast() et callbacks.finishbroadcast(); encadre le début et la fin de la notification des clients. callbacks.getbroadcastitem(i) vous permet d'appeler les méthodes de l'intarface IRemoteBackgroundServiceCallback et prévenir les clients. Elle ne peut être appelée qu'après beginbroadcast() Nous désactivons la liste des callbacks dans la méthode ondestroy() : public void ondestroy() { super.ondestroy(); this.binder = null; this.callbacks.kill(); // Désactive tous les éléments de la liste this.timer.cancel(); N'oublions pas de mettre à jour notre Binder implémentant l'interface IRemoteBackgroundService.Stub : public class BackgroundServiceBinder extends IRemoteBackgroundService.Stub{ private BackgroundService service = null; public BackgroundServiceBinder(BackgroundService service) { super(); this.service = service; public int getpid() throws RemoteException { return Process.myPid(); public void registercallback(iremotebackgroundservicecallback cb) throws RemoteException { if(cb!= null){ service.getcallbacks().register(cb); ; public void unregistercallback(iremotebackgroundservicecallback cb) throws RemoteException { if(cb!= null){ service.getcallbacks().unregister(cb); Retournons maintenant du côté de notre application principale pour y copier les fichiers IRemoteBackgroundService.aidl et IRemoteBackgroundServiceCallback.aidl dans le package com.android23.backgroundservice.service.

10 Page 10 of 12 Puis mettons à jour la manière dont nous nous connectons au service en déclarant un IRemoteBackgroundServiceCallback et en l'inscrivant auprès du service dans la méthode onserviceconnected() : Intent intent = new Intent(); intent.setclassname("com.android23.backgroundservice", "com.android23.backgroundservice.service.backgroundservice"); final IRemoteBackgroundServiceCallback callback = new IRemoteBackgroundServiceCallback.Stub() { public void datachanged(data data) throws RemoteException { Log.d( getclass().getsimplename(), "Temperature : " + data.gettemperature()); Log.d( getclass().getsimplename(), "Temps : " + data.gettoday().tostring()); ; ServiceConnection remoteconnection = new ServiceConnection() { public void onservicedisconnected(componentname name) { Log.d( getclass().getsimplename(), "onserviceconnected()" ); ; public void onserviceconnected(componentname name, IBinder service) { remotebackgroundservice = IRemoteBackgroundService.Stub.asInterface(service); try { remotebackgroundservice.getpid(); remotebackgroundservice.registercallback(callback); catch (RemoteException e) { bindservice(intent, remoteconnection, Context.BIND_AUTO_CREATE); Pour tester, nous déployons le service et puis nous lançons en mode debug notre application. >> Démarrer le service au boot du téléphone Dans le projet BackgroundService, nous rajoutons un BroadcastReceiver : public class BackgroundServiceReceiver extends BroadcastReceiver{ public void onreceive(context context, Intent intent) { Intent serviceintent = new Intent(); serviceintent.setclassname("com.android23.backgroundservice", "com.android23.backgroundservice.service.backgroundservice"); context.startservice(serviceintent); Nous le rajoutons dans le fichier AndroidManifest.xml : <permission android:name="com.android23.backgroundservice.backgroundservice_permission" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <service android:exported="true" android:name=".service.backgroundservice" android:permission="com.android23.backgroundservice.backgroundservice_permission" /> <receiver android:name=".service.backgroundservicereceiver"> <intent-filter> <action android:name="android.intent.action.boot_completed" /> <category android:name="android.intent.category.home" /> </intent-filter> </receiver> </application> <uses-permission android:name="com.android23.backgroundservice.backgroundservice_permission"/> Nous avons également précisé que notre service demande la permission BACKGROUNDSERVICE_PERMISSION pour pouvoir démarrer tout seul. Déployons le service sur l'émulateur en faisant un clic droit sur le projet : Run As > Android Application. Une fois déployé, re-démarrons l'émulateur en cliquant sur le bouton dans la barre d'outil d'eclipse puis sur le bouton start dans la fenêtre qui apparait. Une fois l'émulateur lancé, il suffit d'aller dans Menu > Settings > Applications > Running Services > pour constater que notre BackgroundService est bien en route. >> Exemple : Connexion au service MP3 Le lecteur MP3 d'android est lui aussi un RemoteService. Il est donc très simple de s'y connecter pour récupérer la chanson en cours, l'artiste... Pour l'exemple n'oubliez pas de lancer la lecture d'un fichier mp3. Profitons du fait qu'android soit open-source pour nous rendre sur Google Code et récupérer le fichier IMediaPlaybackService.aidl. Une fois le fichier récupéré, nous créons le package "com.android.music" dans lequel nous insérons le fichier.aidl. Eclipse génère alors automatiquement l'interface IMediaPlaybackService. Le service ne renvoyant que des types primitifs, seul ce fichier suffit au client. Nous nous connectons au lecteur mp3 comme nous nous connections à notre BackgroundService : Intent intent = new Intent(); intent.setclassname("com.android.music", "com.android.music.mediaplaybackservice"); ServiceConnection conn = new ServiceConnection() { public void onservicedisconnected(componentname componentname) { public void onserviceconnected(componentname componentname, IBinder ibinder) {

11 Page 11 of 12 IMediaPlaybackService service = IMediaPlaybackService.Stub.asInterface(ibinder); try { Log.i("ServiceConnection", "Playing track: " + service.gettrackname()); Log.i("ServiceConnection", "By artist: " + service.getartistname()); catch (Exception e) { ; this.bindservice(intent, conn, 0); Malheureusement, si Google modifie l'interface.aidl de son lecteur MP3 il faudra mettre à jour le fichier IMediaPlaybackService.aidl dans notre projet. > Conclusion Le post est relativement long mais regroupe tout ce que j'ai pu apprendre en parcourant le net. Je vais réfléchir à le publier au format PDF dans la rubrique tutorial. L'intérêt des LocalService reste flou à mes yeux. J'ai la fâcheuse impression de gagner plus en complexité qu'en productivité. A contrario, les RemoteService ont une véritable valeur ajoutée. Ainsi on peut imaginer un service météo commun à toutes nos applications et nos widgets. Les possibilités sont nombreuses dès lors que l'os gère le multi-taches Si vous souhaitez que certains points soient approfondis, ou corrigés, n'hésitez pas à m'en faire part. > Ressources Commentaires: Commentaire de: vincebodi [Membre] Merci pour ce tutorial. Cependant, je ne suis toujours pas sûr d'avoir bien compris le principe du service. Une contradiction dans le premier paragraphe me désarme complétement dans le choix de mon implémentation d'une tâche de fond dans mon appli. La phrase : "Les services s'exécutent dans le Thread principal du processus parent." est pour moi très contradictoire avec la phrase qui la précède : "Les services distants (ou RemoteService) qui s'exécutent dans un processus différent de celui de application" Du coup, si je considère la première phrase, ma tâche de fond sera interrompue lors de la destruction de l'activité qui l'a lancé (ce que je ne souhaite pas). Si je considère la deuxième phrase, un RemoteService me permet d'exécuter ma tâche de fond dans un processus indépendant de l'application. Seulement, son processus parent est le processus de mon application. Voilà la source de ma grande détresse. Help ;-) 20:44 Commentaire de: Nicolas Druet [Membre] "Les services s'exécutent dans le Thread principal du processus parent" C'est pourquoi on crée un thread dans le localservice. Ainsi avoir un vrai tâche de fond. Mais qui sera détruite quand l'application sera fermée. "Les services distants (ou RemoteService) qui s'exécutent dans un processus différent de celui de application" Tout a fait. Mais en aucun cas son processus parent est le processus de l'application. Sinon ca n'aurait pas grand intérêt. Le RemoteService est une autre application Android sans IHM ;) 22:32 Commentaire de: Inrokuptible [Membre] Merci pour ce riche tutoriel. Mon activité doit être amenée à invoquer régulièrement des méthodes distantes. Dois-je pour ça appeler à chaque fois la méthode bindservice()? 17:40 Commentaire de: Nicolas Druet [Membre] Il suffit de faire un bind une fois pour que l'application soit "connectée" au service. 18:00 Commentaire de: Inrokuptible [Membre] re Est ce que les objets contenus dans l'objet qui sera échangé entre les processus devront eux aussi être déclaré dans des AIDL différents et implémenter l'interface Parcelable? Par exemple dans ta classe Data si Weather n'était pas de type primitif je l'aurai déclaré dans un AIDL et lui faire implémenter parcelable?

12 Page 12 of 12 14:15 Commentaire de: Inrokuptible [Membre] re Est ce que les objets contenus dans l'objet qui sera échangé entre les processus devront eux aussi être déclaré dans des AIDL différents et implémenter l'interface Parcelable? Par exemple dans ta classe Data si Weather n'était pas de type primitif je l'aurai déclaré dans un AIDL et lui faire implémenter parcelable? 14:15 Commentaire de: jekho [Membre] Bonjour, J'ai testé ce tutoriel mais lors du test sur l'émulateur android, j'ai un warning : 'unable to start service intent : "nomdemonpackage" : not found ' alors que le nom du package est bien celui que j'ai... je ne comprends pas. D'ailleurs, il y a un point sur le tutoriel qui est ambigüe : public void onserviceconnected(componentname name, IBinder service) { IRemoteBackgroundService service = IRemoteBackgroundService.Stub.asInterface(service); try { service.getpid(); service.getdata(); catch (RemoteException e) { // TODO Auto-generated catch block le 'service' du type IRemoteBackgroundService doit être différent du 'service' type IBinder non? 15:11 Commentaire de: jekho [Membre] désolé pour le double post, j'ai trouvé la solution : pour appeler le service par un objet Intent, mettre directement le nom de la classe du service plutôt que d'utiliser la méthode 'setclassename()', cela marche beaucoup. Super tuto sinon. 15:37 Commentaire de: James_Carr [Membre] A propos des binder pour les services locaux. jai implémenté un service local comme decrit dans le tuto. Jai créé deux activité : La premiere se connecte à l'activité comme dans le tuto. De cette activité, je passe à la seconde activité. j'aiconnecté la 2eme activité au même service, mais dans cette nouvelle activité, je n'arrive pas à recuperer l'instance du service. jai un NullPointerException. Normallement, plusieurs activités devraient pouvoir se connecter au même service grace au binding. Pouvez vous m'aider à resoudre ce pb? merci 14:45 Commentaire de: capslock [Membre] J'aime bien lire un bon article avec le code source complet à coté. J'ai beau regarder, mais je ne vois de lien pour le code de la demo... 17:39 Vous devez être identifié pour poster un commentaire. Responsable bénévole de la rubrique Blogs : - Contacter par Vos questions techniques : forum d'entraide Blogs - Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones Nous contacter - Hébergement - Participez - Copyright Legal informations.

Tutorial pour une application simple

Tutorial pour une application simple ANDROID & ECLIPSE Tutorial pour une application simple 1. Introduction Android est un système d'exploitation pour téléphone portable de nouvelle génération développé par Google. Celui-ci met à disposition

Plus en détail

Outils, langage et approche Android Une introduction. Nicolas Stouls nicolas.stouls@insa lyon.fr

Outils, langage et approche Android Une introduction. Nicolas Stouls nicolas.stouls@insa lyon.fr Outils, langage et approche Android Une introduction Nicolas Stouls nicolas.stouls@insa lyon.fr Webographie La bible contenant «tout» : http://developer.android.com/index.html Les supports cette intervention

Plus en détail

TP SIN Programmation sur androïde Support : eclipse

TP SIN Programmation sur androïde Support : eclipse TP SIN Programmation sur androïde Support : eclipse Support : Smartphone sur androïde Pré requis (l élève doit savoir): Savoir utiliser un ordinateur Savoir utiliser un Smartphone Programme Objectif terminale

Plus en détail

Remote Method Invocation Les classes implémentant Serializable

Remote Method Invocation Les classes implémentant Serializable Parallélisme Architecture Eric Goubault Commissariat à l Energie Atomique Saclay Classe qui implémente la méthode distante (serveur): - dont les méthodes renvoient un objet serializable - ou plus généralement

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Développement sous Android

Développement sous Android Développement sous Android Chapitres traités Les fournisseurs de contenu (Content Provider) Pour cette dernière étude de l'environnement Android, nous allons en profiter pour découvrir plein de fonctionnalités

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Calcul Parallèle. Cours 5 - JAVA RMI

Calcul Parallèle. Cours 5 - JAVA RMI Calcul Parallèle Cours 5 - JAVA RMI Eric Goubault Commissariat à l Energie Atomique & Chaire Ecole Polytechnique/Thalès Saclay Le 28 février 2012 Eric Goubault 1 28 février 2012 Remote Method Invocation

Plus en détail

TP2 : Client d une BDD SqlServer

TP2 : Client d une BDD SqlServer TP2 : Client d une BDD SqlServer Objectifs : utiliser la barre de menu, utiliser les préférences d application (settings) ou (options), gérer la persistance des données, utiliser la bibliothèque jtds:jdbc

Plus en détail

TP au menu «UI ANDROID»

TP au menu «UI ANDROID» TP au menu «UI ANDROID» Pré-requis & Installation ( du couvert) soit installer en natif sur vos postes (!!! ATTENTION!!! FromScratch 1,1 Go à télécharger ) JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html

Plus en détail

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe

Plus en détail

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples

Plus en détail

Java 7 Les fondamentaux du langage Java

Java 7 Les fondamentaux du langage Java 184 Java 7 Les fondamentaux du langage Java 1.1 Les bibliothèques graphiques Le langage Java propose deux bibliothèques dédiées à la conception d'interfaces graphiques. La bibliothèque AWT et la bibliothèque

Plus en détail

Débuter avec OOo Base

Débuter avec OOo Base Open Office.org Cyril Beaussier Débuter avec OOo Base Version 1.0.7 Novembre 2005 COPYRIGHT ET DROIT DE REPRODUCTION Ce support est libre de droit pour une utilisation dans un cadre privé ou non commercial.

Plus en détail

Trier les ventes (sales order) avec Vtiger CRM

Trier les ventes (sales order) avec Vtiger CRM Trier les ventes (sales order) avec Vtiger CRM Dans l'activité d'une entreprise, on peut avoir besoin d'un outil pour trier les ventes, ce afin de réaliser un certain nombre de statistiques sur ces ventes,

Plus en détail

1.3 Gestion d'une application

1.3 Gestion d'une application 1.3 Gestion d'une application 1. Un premier projet... Il est temps maintenant d'écrire la véritable première application Android avec l'inévitable affichage du mot bonjour, ce qui évidemment pour un développement

Plus en détail

Les fondamentaux du développement d applications Java

Les fondamentaux du développement d applications Java Android 5 Les fondamentaux du développement d applications Java Nazim BENBOURAHLA Table des matières 1 Les éléments à télécharger sont disponibles à l'adresse suivante : http://www.editions-eni.fr Saisissez

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Création d'un questionnaire (sondage)

Création d'un questionnaire (sondage) Création d'un questionnaire (sondage) Le but de ce petit tuto est d'avoir les séquences pas à pas pour la création d'un questionnaire de façon à ne pas devoir rechercher la manière de procéder si l'outil

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

Android 4 Les fondamentaux du développement d'applications Java

Android 4 Les fondamentaux du développement d'applications Java La plateforme Android 1. Présentation 13 2. Historique 14 3. Google Play 15 3.1 Création d'un compte développeur 16 3.2 Publication d'une application 16 3.3 Suivi et mise à jour d'une application 18 Environnement

Plus en détail

Programmation Par Objets

Programmation Par Objets Programmation Par Objets Structures de données package java.util B. Carré Polytech Lille 1 Tableaux et structures de données Tableaux «Objets» taille fixe type des éléments : primitif (homogène) ou objets

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

Création d un service web avec NetBeans 5.5 et SJAS 9

Création d un service web avec NetBeans 5.5 et SJAS 9 Sommaire Création d un service web avec NetBeans 5.5 et SJAS 9 1. Présentation... 2 2. Création d un service web avec NetBeans... 2 2.1. Création d une application Web... 2 2.2. Création du service web...

Plus en détail

TD/TP 1 Introduction au SDK d Android

TD/TP 1 Introduction au SDK d Android TD/TP 1 Introduction au SDK d Android Romain Raveaux 1 Introduction Android est un système d'exploitation pour téléphone portable de nouvelle génération développé par Google. Celui-ci met à disposition

Plus en détail

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse IFT287 Exploitation de base de données relationnelles et orientées objet Laboratoire Mon premier programme Java en Eclipse Comment faire? Nous allons utiliser l environnement de travail proposé par Eclipse

Plus en détail

Programmation Objet Java Correction

Programmation Objet Java Correction INSA - 4 AE 2007 2008 Durée : 1H00 Contrôle Programmation Objet Java Correction Consignes Tous les documents sont autorisés, mais ils seront peu utiles. Indiquez vos nom et prénom sur chaque feuille. Le

Plus en détail

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp Serveur d'application Client HTML/JS Apache Thrift Bootcamp Pré-requis La liste ci-dessous de logiciels doit être installée et opérationnelle sur la machine des participants : Compilateur thrift http://thrift.apache.org/

Plus en détail

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90. Analyste et développeur pendant plus de 10 ans, Thierry GROUSSARD s est ensuite orienté vers la formation et plus particulièrement dans le domaine du développement. Sa connaissance approfondie des besoins

Plus en détail

Séquence de découverte de SparkAngels Logiciel d entraide numérique

Séquence de découverte de SparkAngels Logiciel d entraide numérique Contributeurs : GUILLEZ Frédéric BANDINI Gérard DENIGOT Michaël FOLCH Janine PERILLAUD Stéphanie PLATEL Carl REANT Franck I. Matériel et préparation Pré requis matériel et logiciel : Ordinateur avec connexion

Plus en détail

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et

Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et Licence 3 CDA 2010/2011 Client FTP Java Maxence Jaouan Sommaire Introduction... 3 Le but du projet... 3 Les moyens utilisés... 3 Informations sur le client FTP... 4 Pourquoi une version Linux et Windows?...

Plus en détail

Le stockage local de données en HTML5

Le stockage local de données en HTML5 Le stockage local HTML5, pourquoi faire? Dans une optique de réduction des couts de maintenance, de déploiement, beaucoup d'entreprises ont fait le choix de migrer leurs applicatifs (comptables, commerciales,

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T> Page 1 sur 5 TP3 Lectures préalables : l Java_II l tutorial Interfaces Thèmes du TP : l la classe Object l Vector l Stack Une pile d'objects Les éléments de la classe Pile sont maintenant des instances

Plus en détail

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting IUT Bordeaux 1 2005-2006 Département Informatique Licence Professionnelle ~ SI TD Objets distribués n 3 : Windows XP et Visual Studio.NET Introduction à.net Remoting Partie 1 : l'analyseur de performances

Plus en détail

Assistance à distance sous Windows

Assistance à distance sous Windows Bureau à distance Assistance à distance sous Windows Le bureau à distance est la meilleure solution pour prendre le contrôle à distance de son PC à la maison depuis son PC au bureau, ou inversement. Mais

Plus en détail

Projet Android (LI260) Cours 2

Projet Android (LI260) Cours 2 Projet Android (LI260) Cours 2 Nicolas Baskiotis Université Pierre et Marie Curie (UPMC) Laboratoire d Informatique de Paris 6 (LIP6) S2-2013/2014 Plan Les ressources Debug Communication entre activités

Plus en détail

Synchro et Threads Java TM

Synchro et Threads Java TM Synchro et Threads Java TM NICOD JEAN-MARC Master 2 Informatique Université de Franche-Comté UFR des Sciences et Techniques septembre 2008 NICOD JEAN-MARC Synchro et Threads avec Java TM 1 / 32 Sommaire

Plus en détail

Le service de création de site Internet : Mode d emploi. La Création de Site Internet

Le service de création de site Internet : Mode d emploi. La Création de Site Internet Le service de création de site Internet : Mode d emploi Sommaire 1) Comment se connecter à votre interface client? 2) Comment démarrer la création de votre site Internet? 3) Comment gérer les pages de

Plus en détail

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 )

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 ) TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 ) Voici un petit document concernant d'un espace crypté sur une clef usb en utilisant le logiciel TRUECRYPT. Ce dernier est gratuit et disponible

Plus en détail

Créer un sondage en ligne

Créer un sondage en ligne Créer un sondage en ligne Par Clément JOATHON Dernière mise à jour : 02/04/2015 Que cela soit pour récolter l'avis des membres d'une association ou encore les idées de vos visiteurs, il est toujours intéressant

Plus en détail

Chapitre 10. Les interfaces Comparable et Comparator 1

Chapitre 10. Les interfaces Comparable et Comparator 1 Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],

Plus en détail

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8 SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8 INTRODUCTION Bonjour à tous; Aujourd hui je publie une nouvelle version de l adaptation de la Sync Framework Toolkit,

Plus en détail

Installation et prise en main

Installation et prise en main TP1 Installation et prise en main Android est le système d'exploitation pour smartphones, tablettes et autres appareils développé par Google. Pour permettre aux utilisateurs d'installer des applications

Plus en détail

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation Cycle Ingénierie 2e année SIGL Dernière mise à jour : 19/10/2006 Christophe Porteneuve Threads Principes Cycle de vie Création java.lang.thread

Plus en détail

Un ordonnanceur stupide

Un ordonnanceur stupide Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire

Plus en détail

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5

SHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N

Plus en détail

La base de données XML exist. A. Belaïd

La base de données XML exist. A. Belaïd La base de données XML exist Introduction Qu est-ce-que exist? C est une base de donnée native, entièrement écrite en Java XML n est pas une base de données en soi Bien qu il possède quelques caractéristiques

Plus en détail

Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com

Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com Contenu I.Validation (ou inscription) de son adresse chez Google...2 II.Utilisation des fonctionnalités du blog...5 1.Accès

Plus en détail

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer Programmation des applications mobiles avec Android 1 Inspiré du cours de Olivier Le Goaer 2 OS mobile : outils de développement D après le cours de Olivier Le Goaer 3 Plateforme de développement MobileApp

Plus en détail

TalkToMe : votre première appli App Inventor Ce tutoriel vous aidera à construire une appli parlante qui peut sauvegarder des phrases sur demande.

TalkToMe : votre première appli App Inventor Ce tutoriel vous aidera à construire une appli parlante qui peut sauvegarder des phrases sur demande. TalkToMe : votre première appli App Inventor Ce tutoriel vous aidera à construire une appli parlante qui peut sauvegarder des phrases sur demande. Connectez-vous sur App Inventor avec le nom d'utilisateur

Plus en détail

Programmation par les Objets en Java

Programmation par les Objets en Java Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée

Plus en détail

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java Info0604 Programmation multi-threadée Cours 5 Programmation multi-threadée en Java Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 18 février 2015 Plan

Plus en détail

ANIMER UNE COMMUNAUTÉ CONSTRUCTION21

ANIMER UNE COMMUNAUTÉ CONSTRUCTION21 ANIMER UNE COMMUNAUTÉ CONSTRUCTION21 Les communautés en ligne sont des espaces d échange, de veille et de partage documentaire. En créant une communauté sur un sujet précis, vous vous posez en expert de

Plus en détail

Votre premier projet Android

Votre premier projet Android 3 Votre premier projet Android Maintenant que le SDK Android est installé, il est temps de créer votre premier projet. La bonne nouvelle est qu il n exige aucune ligne de code les outils Android créent

Plus en détail

Programmation par composants (1/3) Programmation par composants (2/3)

Programmation par composants (1/3) Programmation par composants (2/3) Programmation par composants (1/3) La programmation par composant vise le développement de logiciel par aggrégation de briques logicielles existantes est indépendante de la POO La programmation par composant

Plus en détail

Education Delivery Intelligent Tool

Education Delivery Intelligent Tool Education Delivery Intelligent Tool Projet AMO2 Maxence RAOUX Joachim SEGALA RICM 4 Avril 2012 Sommaire I. Presentation du projet... 2 1. Contexte... 2 2. Demande... 2 3. Spécifications... 2 II. Guide

Plus en détail

Warren PAULUS. Android SDK et Android x86

Warren PAULUS. Android SDK et Android x86 Android SDK et Android x86 2010/2011 Voici un petit tutoriel pour installer Android de façon à ce qu il soit compatible avec NetBeans et Eclipse, ainsi que l utilisation d Android x86. Ce tutoriel a été

Plus en détail

Projet serveur OwnCloud

Projet serveur OwnCloud Projet serveur OwnCloud 1. Présentation 1. Environnement vsphere 2. Environnement Linux Ubuntu 3. Owncloud 5.0 2. Plan de travail 1. Matériel 2. Schéma physique 3. Installation ESXi sur serveur lame 4.

Plus en détail

Navigation dans Windows

Navigation dans Windows Cours 03 Navigation dans Windows Comme je le disais en introduction, notre souris se révèle plus maligne qu'elle n'en a l'air. À tel point qu'il faut apprendre à la dompter (mais c'est très simple, ce

Plus en détail

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007 NFP 121 Java et les Threads Présentation : Thierry Escalarasse Mai 2007 Plan du cour Présentation de la notion de Threads La classe Thread L interface Runnable Les états d un thread La Synchronisation

Plus en détail

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi? Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi? par X. HINAULT www.mon-club-elec.fr Tous droits réservés 2013. Document gratuit. Ce support

Plus en détail

Cours 1: Java et les objets

Cours 1: Java et les objets Ressources Les interface homme-machine et le langage Java DUT première année Henri Garreta, Faculté des Sciences (Luminy) Cyril Pain-Barre & Sébastien Nedjar, IUT d Aix-Marseille (Aix) Cours 1: infodoc.iut.univ-aix.fr/~ihm/

Plus en détail

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr

Initiation à JAVA et à la programmation objet. raphael.bolze@ens-lyon.fr Initiation à JAVA et à la programmation objet raphael.bolze@ens-lyon.fr O b j e c t i f s Découvrir un langage de programmation objet. Découvrir l'environnement java Découvrir les concepts de la programmation

Plus en détail

Applet pour visualiser les variables «automate» notifiées

Applet pour visualiser les variables «automate» notifiées Applet pour visualiser les variables «automate» notifiées Sommaire 1. Introduction...2 2. Lecture de variables «automate» notifiées...2 2.1. IHM servant au test :...2 2.2. Codage de l'applet :...2 3. Codage

Plus en détail

Une introduction à la technologie EJB (2/3)

Une introduction à la technologie EJB (2/3) Une introduction à la technologie EJB (2/3) 1 Les singletons des EJB 3.1 1.1 Synchronisation gérée manuellement Depuis la version 3.1, des EJB Statless à instance unique sont maintenant disponibles : ce

Plus en détail

1. Base de données SQLite

1. Base de données SQLite Dans ce TP, nous allons voir comment créer et utiliser une base de données SQL locale pour stocker les informations. La semaine prochaine, ça sera avec un WebService. On repart de l application AvosAvis

Plus en détail

Android et le Cloud Computing

Android et le Cloud Computing Android et le Cloud Computing 1 Plan de l'exposé Rappels sur Android et le cloud Présentation de GCM Notions fondamentales de GCM Construire un projet GCM Ecrire un client GCM (récepteur GCM) Ecrire un

Plus en détail

Compte-rendu de projet de Système de gestion de base de données

Compte-rendu de projet de Système de gestion de base de données Compte-rendu de projet de Système de gestion de base de données Création et utilisation d'un index de jointure LAMBERT VELLER Sylvain M1 STIC Université de Bourgogne 2010-2011 Reponsable : Mr Thierry Grison

Plus en détail

Threads. Threads. USTL http://www.lifl.fr/ routier 1

Threads. Threads. USTL http://www.lifl.fr/ routier 1 Threads USTL http://www.lifl.fr/ routier 1 Rappels - Définitions un Process est un programme qui tourne et dispose de ses propres ressources mémoire. OS multi-tâche plusieurs process en concurrence un

Plus en détail

TD/TP PAC - Programmation n 3

TD/TP PAC - Programmation n 3 Université Paris Sud Licence d informatique/iup-miage2 - Année 2004-2005 auteur : Frédéric Vernier semaine : 11-16 octobre 2004 conditions : sur machine avec les outils standards java web: http://vernier.frederic.free.fr/indexpac.html

Plus en détail

Java RMI. Arnaud Labourel Courriel: arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 8 mars 2011

Java RMI. Arnaud Labourel Courriel: arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 8 mars 2011 Java RMI Arnaud Labourel Courriel: arnaud.labourel@lif.univ-mrs.fr Université de Provence 8 mars 2011 Arnaud Labourel (Université de Provence) Java RMI 8 mars 2011 1 / 58 Web services Services par le réseau

Plus en détail

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée forax at univ-mlv dot fr - ParisJUG Java.next() - Mars 2012 What Else? Lambda == Inner class? Java a des lambdas depuis la version 1.1 Exemple utilisant

Plus en détail

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1 Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....

Plus en détail

INITIATION AU LANGAGE JAVA

INITIATION AU LANGAGE JAVA INITIATION AU LANGAGE JAVA I. Présentation 1.1 Historique : Au début des années 90, Sun travaillait sur un projet visant à concevoir des logiciels simples et performants exécutés dans des PDA (Personnal

Plus en détail

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1. Plateforme PAYZEN Intégration du module de paiement pour la plateforme Magento version 1.3.x.x Paiement en plusieurs fois Version 1.4a Guide d intégration du module de paiement Multiple Magento 1/24 SUIVI,

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Contrôler un ordinateur à distance avec Google Chrome

Contrôler un ordinateur à distance avec Google Chrome Contrôler un ordinateur à distance avec Google Chrome Lorsque l on a un minimum de connaissances en informatique, on nous demande souvent de résoudre des problèmes sur des PC à l autre bout de la France!

Plus en détail

Tutorial et Guide TeamViewer

Tutorial et Guide TeamViewer Tutorial et Guide TeamViewer TeamViewer est un programme qui permet de partager son bureau ou prendre la main d'un bureau à distance via internet partout dans le monde, et d'ainsi avoir l'opportunité de

Plus en détail

Développement Logiciel

Développement Logiciel Développement Logiciel Éxamen session 1-2012-2013 (Vendedi 25 mai, 9h-11h) Seuls les documents liés directement au cours sont autorisés (comme dit sur le site) : sujets de TD, notes de cours, notes personnelles

Plus en détail

Maîtriser le menu contextuel dans un OfficeBean

Maîtriser le menu contextuel dans un OfficeBean Maîtriser le menu contextuel dans un OfficeBean Diffusé Par Le Projet Documentation d'openoffice.org Version 1.0 Aurélie Schröder Université de Genève Division informatique AurelieSch@netcourrier.com Table

Plus en détail

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés) Introduction à la POO 1. Histoire de la POO 9 2. Historique du 12 La conception orientée objet 1. Approche procédurale et décomposition fonctionnelle 13 2. La transition vers l'approche objet 14 3. Les

Plus en détail

Dis papa, c est quoi un bus logiciel réparti?

Dis papa, c est quoi un bus logiciel réparti? Dis papa, c est quoi un bus logiciel réparti? Raphael.Marvie@lifl.fr LIFL IRCICA Equipe GOAL Octobre 2006 10. Des sockets aux bus logiciels répartis 1 0. Une application répartie 2 Objectif Découvrir la

Plus en détail

italc supervision de salle

italc supervision de salle italc italc supervision de salle 01 Présentation générale : italc est un logiciel de supervision de salles d'ordinateurs. Il fonctionne en mode poste «maitre» et postes «élèves». Avec votre serveur AbulEdu,

Plus en détail

EXTENSION WORDPRESS. Contact Form 7. Proposé par :

EXTENSION WORDPRESS. Contact Form 7. Proposé par : Contact Form 7 Proposé par : Sommaire Sommaire... 2 Présentation... 3 I. Le Tutoriel... 3 1) Espace de travail... 3 2) Téléchargez les extensions nécessaires... 3 3) Configuration du Formulaire... 7 1)

Plus en détail

http://www.jdl68160.com/informatique/yawcam.htm

http://www.jdl68160.com/informatique/yawcam.htm Date de publication: le 11/05/2013 Date de modification le : 19/05/2013-20:45 Edition de la version PDF le 20/05/2013 Yawcam est un petit logiciel gratuit, mais très complet, permettant de diffuser/d'enregistrer

Plus en détail

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7 Sommaire 1-Introduction 2 1-1- BPM (Business Process Management)..2 1-2 J-Boss JBPM 2 2-Installation de JBPM 3 2-1 Architecture de JOBSS JBPM 3 2-2 Installation du moteur JBoss JBPM et le serveur d application

Plus en détail

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/2011. 1.1 Présentation. 1.2 Ressources

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/2011. 1.1 Présentation. 1.2 Ressources Master Maths Finances 2010/2011 Data Mining janvier 2011 RapidMiner 1 Introduction 1.1 Présentation RapidMiner est un logiciel open source et gratuit dédié au data mining. Il contient de nombreux outils

Plus en détail

Introduction à JDBC. Accès aux bases de données en Java

Introduction à JDBC. Accès aux bases de données en Java Introduction à JDBC Accès aux bases de données en Java Eric Cariou Université de Pau et des Pays de l'adour Département Informatique Eric.Cariou@univ-pau.fr 1 Introduction JDBC : Java Data Base Connectivity

Plus en détail

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture API04 Contribution Apache Hadoop: Présentation et application dans le domaine des Data Warehouses Introduction Cette publication a pour but de présenter le framework Java libre Apache Hadoop, permettant

Plus en détail

Administration du site (Back Office)

Administration du site (Back Office) Administration du site (Back Office) A quoi sert une interface d'administration? Une interface d'administration est une composante essentielle de l'infrastructure d'un site internet. Il s'agit d'une interface

Plus en détail

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry. : Java Agent DEvelopment framework Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.fr Introduction à la plateforme JADE 1) Modèle d agent 2) Services 3) Norme FIPA

Plus en détail

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance Auteur : François CHAUSSON Date : 8 février 2008 Référence : utiliser le Bureau a distance.doc Préambule Voici quelques

Plus en détail

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code Généralités javadoc Université de Nice - Sophia Antipolis Richard Grin Version 1.4.1 8/2/11 javadoc produit de la documentation en partant de commentaires particuliers insérés dans le code source des classes

Plus en détail

Tutoriel pour la création d'un Google Sites

Tutoriel pour la création d'un Google Sites Créer un site web gratuitement avec Google Sites Le site des tutoriels Google Sites, pour créer gratuitement un site Google, trucs et astuces, best practice et info technique pour Google Sites, Gmail,

Plus en détail

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12 GTK+ GLADE Page 1 sur 12 SOMMAIRE INTRO 3 Présentation de GTK+ 3 Présentation de GLADE 3 GTK+ 4 Installation 4 Les Widgets 4 Le système de hiérarchie 5 Les signaux 6 GLADE 7 Installation 7 L interface

Plus en détail