PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID) WIESLAW ZIELONKA

Documents pareils
Android UIThread, Thread, Handler et AsyncTask

Créer des applications Android

Projet de programmation (IK3) : TP n 1 Correction

Les fondamentaux du développement d applications Java

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Programmer en JAVA. par Tama

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

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

Programmation Android L3 informatique

Projet Android (LI260) Cours 2

Développement Logiciel

SOMMAIRE

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

RMI le langage Java XII-1 JMF

Synchro et Threads Java TM

Corrigé des exercices sur les références

Intégration d'un système d'audio-vidéo conférence sur un robot de téléprésence

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

Environnements de développement (intégrés)

TP SIN Programmation sur androïde Support : eclipse

Programme Compte bancaire (code)

Programmation Par Objets

Auto-évaluation Programmation en Java

INITIATION AU LANGAGE JAVA

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

Remote Method Invocation (RMI)

Warren PAULUS. Android SDK et Android x86

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Android et le Cloud Computing

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

Un ordonnanceur stupide

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Package Java.util Classe générique

DÉVELOPPEMENT ANDROID

Threads. Threads. USTL routier 1

Héritage presque multiple en Java (1/2)

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Surveiller sa maison via son Smartphone sous Android

Chapitre 10. Les interfaces Comparable et Comparator 1

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

TP au menu «UI ANDROID»

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

21 mars Simulations et Méthodes de Monte Carlo. DADI Charles-Abner. Objectifs et intérêt de ce T.E.R. Générer l'aléatoire.

F. Barthélemy. 17 mai 2005

Introduction : les processus. Introduction : les threads. Plan

Java Licence Professionnelle CISII,

TD/TP PAC - Programmation n 3

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

as Architecture des Systèmes d Information

Education Delivery Intelligent Tool

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

TP1 : Initiation à Java et Eclipse

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

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Introduction au langage Java

Une introduction à la technologie EJB (2/3)

TD/TP PAC - Programmation n 3

Développement sous Android

Module Architecture des systèmes mobiles : Android première partie Didier FERMENT - UPJV

Premiers Pas en Programmation Objet : les Classes et les Objets

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

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

Une introduction à Java

Bases de données et fournisseurs de contenu

LOG4430 : Architecture logicielle et conception avancée

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

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Remote Method Invocation Les classes implémentant Serializable

Création d objet imbriqué sous PowerShell.

Alfstore workflow framework Spécification technique

Paginer les données côté serveur, mettre en cache côté client

PROGRAMMATION PAR OBJETS

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

Remote Method Invocation en Java (RMI)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmation Internet en Java

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Introduction ANDROID

Programmation avec des objets : Cours 7. Menu du jour

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

Java 1.5 : principales nouveautés

Applet pour visualiser les variables «automate» notifiées

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

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

Architecture Orientée Service, JSON et API REST

TD2 Programmation concurrentielle

Programmation Objet Java Correction

Programmation Orientée Objet Java

Problèmes liés à la concurrence

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Transcription:

PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID) WIESLAW ZIELONKA WWW.IRIF.UNIV-PARIS-DIDEROT.FR/~ZIELONKA

Charger une image depuis internet et afficher dans ImageView public Bitmap loadimagefrominternet(string adr) { URL url = null; InputStream inputstream = null; try { url = new URL(adr); } catch (MalformedURLException e) { return null; try { final HttpURLConnection http = (HttpURLConnection) url.openconnection(); if (http.getresponsecode() == HttpURLConnection.HTTP_OK) { inputstream = http.getinputstream(); } catch (IOException e) { return null; return BitmapFactory.decodeStream(inputStream); }

Connexion internet La connexion HTTP donne InputStream. Donc les méthodes de traitement de fichiers s'appliquent. Si InputStream ouvert sur une image alors Bitmap BitmapFactory.decodeStream(InputStream) retourne un Bitmap. Pour afficher Bitmap dans ImageView: ImageView.setImageBitmap(Bitmap)

Les problèmes 1. C'est une mauvaise idée d'effectuer une longue opération dans le thread UI bloquage d'interface graphique. 2. De toute façon android ne permet pas de faire de connexion internet dans le thread principal. 3. Et enfin, pour une une connexion internet il faut une permission

Permission pour une connexion internet <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="fr.irif.zielonka.loadimageinternet"> <uses-permission android:name="android.permission.internet"/> <application > <activity android:name=".imagefrominternetactivity"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> Ajouter la permission dans le fichier Manifest.

La connexion internet dans un autre thread protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_image_from_internet); final ImageView imageview = (ImageView) findviewbyid(r.id.image_view); String s = getresources().getstring(r.string.animal); new Thread(new Runnable() { @Override public void run() { Bitmap bitmap = loadimagefrominternet(s); imageview.setimagebitmap(bitmap); } }).start(); Non! Il ne faut jamais manipuler l'interface graphique depuis un autre thread que le thread principal.

Faire une opération sur l'interface graphique depuis un autre thread Android offre trois méthodes pour accéder au thread principal depuis un autre thread: Activity.runOnUiThread(Runnable) View.post(Runnable) view.postdelayed(runnable, long)

Faire une opration sur l'interface graphique depuis un autre thread protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_image_from_internet); final ImageView imageview = (ImageView) findviewbyid(r.id.image_view); String s = getresources().getstring(r.string.animal); new Thread(new Runnable() {//nouveau thread @Override public void run() { Bitmap bitmap = loadimagefrominternet(s); runonuithread(new Runnable() { @Override public void run() { imageview.setimagebitmap(bitmap); } }); } }).start();

Handlers Chaque thread possède un MessageQueue. On crée un Handler dans un thread A. En utilisant ce handler un autre thread peut envoyer vers le thread A des messages (avec de données) et des Runable (pour exécuter par A).

Handlers thread A thread B MessageQueue de A Handler Message Runnable

Méthodes de Handler post(runnable) postattime(runnable, long) postdelayed(runnable, long) sendemptymessage(int) sendmessage(message) sendmessageattime(message, long) sendmessagedelayed(message, long) Les Messages et Runnables sont mis sur la file MessageQueue du thread A. Les Runnables sont exécutés par le thread A. Les messages sont transmis à la méthode handlemessage(message) de Handler. Donc pour traiter les massages il faut implementer cette méthode dans Handler.

Création de Handler Le Handler pour le thread A doit être créé par le thread A lui même.

Même exemple avec un Handler protected void oncreate(bundle savedinstancestate) { animals = getresources().getstringarray(r.array.animals); final CustomAdapter adapter = new CustomAdapter(this); listview.setadapter(adapter); handler = new Handler(); new Thread(new Runnable() { @Override public void run() { for (String s : animals) { final Bitmap bitmap = loadimagefrominternet(s); handler.post(new Runnable() { @Override public void run() { adapter.add(bitmap); }); }).start();

AsyncTask AsyncTask permet d'automatiser l'exécution de tâche en arrière plan (c'est-à-dire dans un thread différent du thread principal). Faire implémenter une classe dérivée de AsyncTask classe paramétrée. AsyncTask<Params, Progress, Result> Params le type de l'entrée Progress- le type pour mesurer l'avancement de la tâche Result le type de résultat

AsyncTask protected Result doinbackground(params params) méthode exécutée en background par un autre thread. Vous devez implementez cette méthode.les threads de ackground sont créés par AsyncTask, vous ne devez pas créer de thread vous même. Vous pouvez implémenter: protected void onpreexecute() protected void onpostexecute(result result) les méthodes exécutées dans le thread UI avant et après doinbackground()

AsyncTask protected final void publishprogres(progres progres) Vous pouvez appeler cette méthode dans doinbackground() pour signaler le progrès de l'exécution de la tâche. protected void onprogresupdate(progress ) est appelée par UI thread suite à l'appel de publishprogres() execute(params params) exécuter la tâche avec les paramètres params

AsyncTask animals = getresources().getstringarray(r.array.animals); final CustomAdapter adapter = new CustomAdapter(this); listview.setadapter(adapter); class Task extends AsyncTask<String[], Integer, ArrayList<Bitmap>> { @Override protected ArrayList<Bitmap> doinbackground(string[]... strings) { ArrayList<Bitmap> al = new ArrayList<>(); for (String s : strings[0]) { al.add(loadimagefrominternet(s)); return al; @Override protected void onpostexecute(arraylist<bitmap> bitmaps) { super.onpostexecute(bitmaps); adapter.add(bitmaps); new Task().execute(animals);

CustomAdapter static class CustomAdapter extends BaseAdapter { Context context; ArrayList<Bitmap> images; public CustomAdapter(Context context) { this.context = context; images = new ArrayList<>(); public void add(arraylist<bitmap> bitmap) { images.addall(bitmap); notifydatasetchanged();/* pour que la liste affiche de nouveau element */ @Override public View getview(int i, View view, ViewGroup viewgroup) { if (view == null) { LayoutInflater minflater = (LayoutInflater) context.getsystemservice(activity.layout_inflater_service); view = minflater.inflate(r.layout.list_item, viewgroup, false); ((ImageView) view).setimagebitmap(images.get(i)); return view;

CustomAdapter } @Override public int getcount() { return images.size(); @Override public Object getitem(int i) { return images.get(i); @Override public long getitemid(int i) { return (long) i;