1 / 66

Développement d’applications mobiles sous JAVA Micro Edition J2ME

Développement d’applications mobiles sous JAVA Micro Edition J2ME. Tébourbi Riadh riadh.tebourbi@supcom.rnu.tn. http://www.slideshare.net/ter216/coursJ2ME. Présentation de J2ME.

talasi
Download Presentation

Développement d’applications mobiles sous JAVA Micro Edition J2ME

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Développement d’applications mobiles sous JAVA Micro Edition J2ME TébourbiRiadh riadh.tebourbi@supcom.rnu.tn http://www.slideshare.net/ter216/coursJ2ME Cours J2ME, Tébourbi Riadh, SUP'COM

  2. Présentation de J2ME • Historiquement, Sun a proposé plusieurs plate-formes pour le développement d'applications sur des machines possédant des ressources réduites, typiquement celles ne pouvant exécuter une JVM répondant aux spécifications complètes de la plate-forme J2SE. • JavaCard : pour le développement sur des cartes à puces • EmbeddedJava : systèmes embarqués • PersonnalJava : pour le développement sur des machines possédant au moins 2mo de mémoire • En 1999, Sun propose de mieux structurer ces différentes plate-formes sous l'appellation J2ME (Java 2 Micro Edition) (Seule le plate-forme JavaCard n'est pas incluse dans J2ME et reste à part.) pour périphériques mobiles et embarqués. • Par rapport à J2SE, J2ME utilise des machines virtuelles différentes. Certaines classes de base de l'API sont communes avec cependant de nombreuses omissions dans l'API J2ME. Cours J2ME, Tébourbi Riadh, SUP'COM

  3. 3 Plateformes Java Java 2 Platform Java2 Standard Edition (J2SE) Java2 Enterprise Edition (J2EE) Java2 Micro Edition (J2ME) Applications : Standards desktop & Workstation Serveurs, Applications Entreprise Petites mémoires Périphériques à Constraintes Cours J2ME, Tébourbi Riadh, SUP'COM

  4. Java 2 Micro Edition • Plateforme JAVA pour des petits périphériques (mobiles et embarqués). • Un sous ensemble de J2SE • Périphériques cible: • Téléphones Mobiles, Smart Phones • PDAs (y compris les PocketPC) • TV, VCR, Lecteurs CD Cours J2ME, Tébourbi Riadh, SUP'COM

  5. Exemple de systèmes mobiles et de systèmes embarqués _ SmartCard/Carte à Puce _ Cellular Phone/Téléphone mobile _ PalmPC, PocketPC/Assistant Personnel _ eBook, Cartable Electronique _ Appareil photo, … _ Set Top Box/Decodeur TV Numérique _ Game Console/Console de Jeu _ Electronic Consuming/Electronique _ Terminal de paiement, Guichet, Parcmètre _ Home Portal/Portail maison _ Car/Voiture _ Wearable computer (Augmented Reality) _ Prothèse active _ Satellite ... Cours J2ME, Tébourbi Riadh, SUP'COM

  6. Contraintes matérielles des mobiles • Encombrement et poids faibles (pour les nomades) • Affichage limité : de 100*60 en NB à 640*240 en 65565 couleurs • Faible mémoire (car grande consommation): primaire(RAM) et secondaire (FlashRAM, EEPROM) • Autonomie (?) (pour les nomades) • Clavier et pointage rudimentaire: tablette sensible, écran tactile, PAD, entrée de texte • Communication (?): Série (IrDA, station d’accueil USB ou RS232), Réseau LAN, Wireless LAN, Cellulaire…) • Résistance aux chocs Cours J2ME, Tébourbi Riadh, SUP'COM

  7. Configurations et Profils du J2ME • L'ensemble des appareils sur lequel peut s'exécuter une application écrite avec J2ME est tellement vaste et disparate que J2ME est composé de plusieurs parties : les configurations (CDC, CLDC) et les profiles. J2ME propose donc une architecture modulaire. • Chaque configuration peut être utilisée avec un ensemble de packages optionnels qui permet d'utiliser des technologies particulières (Bluetooth, services web, lecteur de codes barre, etc ...). Ces packages sont le plus souvent dépendant du matériel. • L'inconvénient de ce principe est qu'il déroge à la devise de Java "Write Once, Run Anywhere“ (partiellement vrai pour des applications développées pour un profile praticulier). Il ne faut cependant pas oublier que les types de machines cibles de J2ME sont tellement différents (du téléphone mobile au set top box), qu'il est sûrement impossible de trouver un dénominateur commun.  nombreuses évolutions en cours de la plate-forme. Cours J2ME, Tébourbi Riadh, SUP'COM

  8. Les configurations • Définissent les caractéristiques de bases d'un environnement d'exécution pour un certain type de machine possédant un ensemble de caractéristiques et de ressources similaires. Elles se composent d'une machine virtuelle et d'un ensemble d'API de base. • Deux configurations sont actuellement définies : • CLDC (Connected Limited Device Configuration): • concerne des appareils possédant des ressources faibles (moins de 512 Kb de RAM, faible vitesse du processeur, connexion réseau limitée et intermittente) et une interface utilisateur réduite (par exemple un téléphone mobile ou un PDA "bas de gamme"). Elle s'utilise sur une machine virtuelle KVM (Kuaui VM de SUN) (=V avec des limites) • CDC (Connected Device Configuration) : • concerne des appareils possédant des ressources plus importantes (au moins 2Mb de RAM, un processeur 32 bits, une meilleure connexion au réseau), par exemple un Set Top box ou certains PDA "haut de gamme". Elle s'utilise sur une machine virtuelle CVM (CVM=JVM (SUN) mais plus compact) Cours J2ME, Tébourbi Riadh, SUP'COM

  9. Les profiles Se composent d'un ensemble d'API particulières à un type de machines ou à une fonctionnalité spécifique. Ils permettent l'utilisation de fonctionnalités précises et doivent être associés à une configuration. Ils permettent donc d'assurer une certaine modularité à la plate-forme J2ME. (profile = ensemble d’APi minimum pour des “devices” similaires) Cours J2ME, Tébourbi Riadh, SUP'COM

  10. Exemples Avant de pouvoir développer sur un mobile il faut connaître sa configuration et ses profils qu’il peut supporter: Cours J2ME, Tébourbi Riadh, SUP'COM

  11. Les VM KVM (SUN) pour CLDS CVM (SUN) pour CDC Monty (SUN): Nouvelle VM pour CLDC (meilleures performances) CDC Hot Spot (SUN) : Anciennement CVM pour CDC (performance améliorée). Très portable (ARM, Power PC, MIPS, SPARC sur Linux, Solaris..). MicrochaiVM (HP) : Support KVM (processeur 16 ou 32 bits, PalmOS (64 k), Linux, PocketPC/SH3 /Strong ARM J9VM (IBM) : machine virtuelle pour l’embarqué. OS: PalmOS, HardHatLinux, WinCE. μp: X86, ARM, Strong ARM, MIPS, PowerPC.. Cours J2ME, Tébourbi Riadh, SUP'COM

  12. Profile MIDP(Mobile Information Device Profile) MIDP est un profile standard défini pour un ensemble de machines embarquées possédant des ressources et une interface graphique limitée. http://java.sun.com/products/midp/ : • 128KB of non-volatile memory for the MIDP implementation • 32KB of volatile memory for the runtime heap • 8KB of non-volatile memory for persistent data • A screen of at least 96 × 54 pixels • Some capacity for input, either by keypad, keyboard, or touch screen • Two-way network connection, possibly intermittent Cours J2ME, Tébourbi Riadh, SUP'COM

  13. Applications MIDP • Toute application MIDP doit dériver d’une classe spéciale: MIDlet • La classe MIDlet définie et contrôle le cycle de vie d’une application. • Se trouve dans le Package: javax.microedition.midlet. • Développement (javac), Preverify (KVM), Packaging (.jar), Description/Déploiement (.jad) Cours J2ME, Tébourbi Riadh, SUP'COM

  14. Structure de l’API Displayable Low level API (jeux) Screen Canvas High level API (GUI) Alert Form ListBox TextBox Item ChoiceGroup DateField Gauge ImageItem StringItem TextField Cours J2ME, Tébourbi Riadh, SUP'COM

  15. Programmation d’une MIDlet • Une application MIDP doit être une sous-classe de la classe MIDlet : public class MaMidlet extends MIDlet {…} • C’est l’équivalent MIDP d’une applet, où le lancement et l’arrêt sont sous le contrôle de l’environnement d’exécution • Quand une MIDlet est lancée l’environnement appelle la méthode MIDlet.startApp() Cours J2ME, Tébourbi Riadh, SUP'COM

  16. Architechture d’un programme MIDlet (1) public class MaMidlet extends MIDlet { public MaMidlet() { //Le constructeur } public void startApp() { // ca commence ici au lancement de MaMidlet (après le constructeur) } public void pauseApp() { // L’application est en mode “pause” (pas d’affichage) } public void destroyApp(boolean unconditional) { // Quand on quitte l’application, Nettoyage si nécessaire } } Cours J2ME, Tébourbi Riadh, SUP'COM

  17. Architechture d’un programme MIDlet(2) • Import packages nécessaires : • import javax.microedition.midlet.*; • import javax.microedition.lcdui.*; • Tout MIDP applications dérive « extend » de la classe MIDlet Cours J2ME, Tébourbi Riadh, SUP'COM

  18. Un premier Exemple 1/2 HelloSupcomMIDlet.java Cours J2ME, Tébourbi Riadh, SUP'COM

  19. 2/2 Cours J2ME, Tébourbi Riadh, SUP'COM

  20.  Afficher un texte qui défile: utilisation de la classe Ticker: HelloSupcomMIDletbis.java …..Pour la Suite voir HelloSupcomMIDlet Cours J2ME, Tébourbi Riadh, SUP'COM

  21. Un deuxième Exemple 1/2 SimpleListe1.java Cours J2ME, Tébourbi Riadh, SUP'COM

  22. 2/2 Cours J2ME, Tébourbi Riadh, SUP'COM

  23. Remarque sur le constructeur de la classe List: new List(String title, int listType, …) list = new List("Sample list", List.IMPLICIT, …); (SimpleListe1.java) list = new List("Sample list", List.EXCLUSIVE, …); (SimpleListe2.java) list = new List("Sample list", List.MULTIPLE, …); (SimpleListe3.java) Cours J2ME, Tébourbi Riadh, SUP'COM

  24. Action après choix dans une liste: troisième Exemple: SimpleListe4.java 1/2 Cours J2ME, Tébourbi Riadh, SUP'COM

  25. 2/2 Cours J2ME, Tébourbi Riadh, SUP'COM

  26. Forms et Items • Form (class) est le seul "container" dans MIDP • Form contient des objets Item (class) (doc API: A superclass for components that can be added to a Form) • Les éléments sont ajoutés en utilisant Form.append() • form.append(item); • form.append("string"); • Quand un Item change d’état (suite à une action sur celui-ci), il génère l’événement ItemStateChanged • Capté par un ItemStateListener définit sur la Form • Le changement d’état appelle la méthode ItemStateListener Cours J2ME, Tébourbi Riadh, SUP'COM

  27. Diagramme des Items • 1 Form peut avoir plusieurs Items (components) Cours J2ME, Tébourbi Riadh, SUP'COM

  28. Example 4 (1/2)Form1.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Form1 extends MIDlet implementsItemStateListener { protected Display display; protected Form form; public Form1() { display = Display.getDisplay(this); form = new Form("Info entry form"); form.append(new TextField("Name", "", 10, TextField.ANY)); form.append(new Gauge("Age (0-100)", true, 10, 2)); form.append(new ChoiceGroup("Job", Choice.EXCLUSIVE, new String[] {“active", "student"}, null)); form.setItemStateListener(this); } Cours J2ME, Tébourbi Riadh, SUP'COM

  29. Example 4 (2/2) public void itemStateChanged(Item item) { // if an item changes – it gets sent here! System.out.println("State changed on item " + item.toString()); } public void startApp() { display.setCurrent(form); } public void pauseApp() { } public void destroyApp(boolean unconditional) { display = null; form = null; } } Cours J2ME, Tébourbi Riadh, SUP'COM

  30. Image et ImageItem • Classes pour manipuler des images • Image: classe pour créer un objet image et contient des attributs tels que Hauteur Largeur de l’image. • ImageItem: sert pour afficher l’image sur une Form. Elle définit comment l’image va être afficher à l’écran (à gauche, centrée, taille, etc..) • MIDP offre deux types d’images: • immutable: ne peut pas être modifiée après création (une image lue d’un fichier image par exemple) • mutable : une image créée et stockée en mémoire par l’utilisateur. Cours J2ME, Tébourbi Riadh, SUP'COM

  31. Affichage d’une image Constructeurs: Image createImage(String name) ImageItem(String label, Image img, int layout, String altText) Affichage sur une Form: Form fmMain = new Form("Images"); ... // Create an image Image img = Image.createImage("/supcom.png"); // Append to a form fmMain.append(new ImageItem(null, img, ImageItem.LAYOUT_CENTER, null)); Cours J2ME, Tébourbi Riadh, SUP'COM

  32. Exemple 5 (1/2)HelloSupcomMIDletfin.java Cours J2ME, Tébourbi Riadh, SUP'COM

  33. Exemple 5 (2/2) Cours J2ME, Tébourbi Riadh, SUP'COM

  34. Les Threads • Utilisés pour faire du multitâche: • Pendant la lecture d’une vidéo, l’interface graphique d’une application est fonctionnelle • Lors d’une animation ont peut écouter la musique. • Thread = unité d'exécution faisant partie d'un programme. Cette unité fonctionne de façon autonome et parallèlement à d'autres Threads. chaque unité se voit attribuer des intervalles de temps au cours desquels elles ont le droit d'utiliser le processeur pour accomplir leurs traitements • Un programme (ou partie d’un programme) java peut être mis sous un Thread. • Le principal avantage des Threads est de pouvoir répartir différents traitements d'un même programme en plusieurs unités distinctes pour permettre leur exécution "simultanée". • La classe java.lang.Thread et l'interface java.lang.Runnable sont les bases pour le développement des Threads en java. Par exemple, pour exécuter des Midlets dans un thread, il faut que celles ci implémentent l'interface Runnable. Cours J2ME, Tébourbi Riadh, SUP'COM

  35. Les Threads Création d’un Thread dans une Midlet 1) public class MaMidlet extends MIDlet implements CommandListener, Runnable {….} • 2) public Thread(Runnable target) • //Allocates a new Thread object with a specific target object whose run method is called. • //Créer un objet Thread pour un autre objet “target” (une Midlet par exemple) et c’est la //methode run() de “target” qui sera exécutée. Thread t = new Thread(this) t.start(); apple de la méthode surchargée run(); 3) //implementation de la méthode run() de la Midlet: public void run() { …..//faire un traitement long } Cours J2ME, Tébourbi Riadh, SUP'COM

  36. Les Threads Création d’un Thread pour une méthode Une méthode d’une Midlet peut être mise sous un Thread indépendant. Elle sera exécuter alors en parallèle avec la Midlet. private void doSomethingBig() { new Thread() { public void run() { …….//Faire qq chose de long } }.start(); } Cours J2ME, Tébourbi Riadh, SUP'COM

  37. MIDP 2.0 • Quoi de neuf ? (disponible été 2003) • • UI • •Multimédia :Mobile Media API (MMAPI) • •Amélioration des formulaire • •Images RGB • • Game API • javax.microedition.lcdui.game • GameCanvas, LayerManager, Layer, TiledLayer, Sprit Cours J2ME, Tébourbi Riadh, SUP'COM

  38. MIDP 2.0 • • Sécurité • • HTTPS • • PKI (Certificats) • • JAR signé • La signature et la clé publique sont ajoutés au JAD • • Permissions • Nouvelles entrées du JAD : MIDIet-Permissions, MIDIet-Permissions-Op • • Lancement Push de MIDLet sur des demandes entrantes • de connexions réseaux • • L'entrée MIDlet-Push-<n> du JAD précise: • l’URL local de connection URL • la classe de la MIDLet • l’adresse IP de la machine autorisée à lancer un push • • Exemple : MIDIet-Push-1: socket://:76, exemple.PushLet. 192.161.60 Cours J2ME, Tébourbi Riadh, SUP'COM

  39. Messaging • Wireless Messaging API (WMA) pour J2ME • Messageries pour « pager » et téléphone mobile • • WMA 1.1 (JSR 120) permet l’envoie et la réception de SMS (Short Message Service) • ou de CBS (Cell Broadcast Service) • • WMA 2.0 (JSR 205) prend en compte l’envoies MMS Cours J2ME, Tébourbi Riadh, SUP'COM

  40. Wireless Messaging API (WMA 2.0) package, javax.wireless.messaging Message: classe de base pour définir un message. C’est une superclasse pour des types de messages BinaryMessage (fichier wav par exemple), MultipartMessage (message en plusieurs parties) et textMessage (message texte). MessageConnection: fournie les fonctionnalités de base pour créer, envoyer et recevoir les messages. Cours J2ME, Tébourbi Riadh, SUP'COM

  41. Wireless Messaging API (WMA 2.0) MessageListener: Interface pour définir un “listener” et permet d’implémenter des notifications asynchrones des messages reçus MessagePart: permet de définir une partie a ajouter à un message ayant plusieurs parties (MultipartMessage).  smsExemple.java Cours J2ME, Tébourbi Riadh, SUP'COM

  42. Multimédia • Mobile Media API (MMIA) • Son,MIDI, Vidéo, streaming… • En remplacement de JMF (trop gros 650k, awt) • Compact: 150K (MIDI, MPEG1, MP3,…) Cours J2ME, Tébourbi Riadh, SUP'COM

  43. Mobile Media API (MMIA)Introduction • Spécificités: • Support pour “Génération de tonalité”, “Playback”, et “enregistrement/capture multimédia”: l’API accepte tout contenu audio et vidéo. • Tien compte des contraintes de mémoire sur des plateformes CLDC • Extensible: Nouvelles fonctionnalités peuvent être rajoutées; d’autres formats de contenu audio, vidéo peuvent être supportés. Cours J2ME, Tébourbi Riadh, SUP'COM

  44. Gestion/Traitement du contenu Deux parties: • Gestion du protocole (Protocol Handling): Lire les données d’une source, exemple: fichier, serveur(réseau), streaming. • Gestion du contenu(Content Handling): une fois lu, le contenu est décodé et restitué via une sortie du périphérique (haut parleur pour le son, écran pour la vidéo)  Trois classes: • Player: Lit les données d’une source, les traites et les restitue. • Manager: Pour créer des players, jouer des tonalités, contient les protocoles et les types de contenus que le mobile supporte. • DataSource: Définit comment des données d’une source (fichier, http, rtp) sont lues. On peut créer un nouveau DataSource (pour un nouveau format par exemple) Cours J2ME, Tébourbi Riadh, SUP'COM

  45. Manager C’est la classe centrale pour creéer des “players” et offre trois methodes pour indiquer la source de données: createPlayer(DataSource source) createPlayer(InputStream stream, String type) createPlayer(String locator) Player p = Manager.createPlayer ("http://nokia.com/chanson.mp3"); Player p = Manager.createPlayer("http://movies.com/film.mpg"); Player p = Manager.createPlayer("capture://video"); Cours J2ME, Tébourbi Riadh, SUP'COM

  46. Player • Créé avec Manager • Permet de restituer un contenu multi-media • Possède des états: UNREALIZED, REALIZED, PREFETCHED, STARTED, et CLOSED UNREALIZED: état initial, juste après création REALIZED: initialise les infos sur les medias (type, périphériques de captures, etc). PREFETCHED: établis la connexions avec la média et la charge, établit les connections réseau pour le streaming. STARTED: la lecture a commencé (mode lecture) CLOSED: arrêt de lecture, arrêt du lecteur • realize() • prefetch() • start() • stop() • deallocate() • close() Passage d’un état à un autre: Cours J2ME, Tébourbi Riadh, SUP'COM

  47. Player(2) • On associe à un lecteur un contrôle (control) : une fonctionnalité média spécifique. • Examples: • VideoControl: obtient et contrôle la fenêtre vidéo • MIDIControl, ToneControl: accès aux propriétés MIDI/Tonalités du périphérique. • VolumeControl: contrôle du volume • Usage: Player p; Form frm; vc = (VideoControl)p.getControl("VideoControl"); volc = (VolumeControl)p.getControl("VolumeControl"); frm.append((Item)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null)); //Ajout de la fenêtre vidéo sur une forme en tant que Item. volc.setLevel(50); //Volume à 50 (entre 0 et 100) Cours J2ME, Tébourbi Riadh, SUP'COM

  48. Exemple 1 (1/2)VideoPlayer.java • Lecture d’un fichier vidéo stocké sur un serveur (exmple apache Tomcat). • Url: http://localhost/midp/shark.mpg Cours J2ME, Tébourbi Riadh, SUP'COM

  49. Exemple 6 (2/2) Cours J2ME, Tébourbi Riadh, SUP'COM

  50. Exemple 7 (1/2)VideoPlayer1.java Lecture d’un fichier vidéo à partir de l’archive jar. Utilisation de Manager. createPlayer(InputStream stream, String type) L’InputStream est obtenu à partir de l’objet application obtenu par getClass() ….. ….. Cours J2ME, Tébourbi Riadh, SUP'COM

More Related