Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Développement d’applications mobiles sous JAVA Micro Edition J2ME Tébourbi Riadh [email protected] http://www.slideshare.net/ter216/coursJ2ME Cours J2ME, Tébourbi Riadh, SUP'COM 1 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. 1. JavaCard : pour le développement sur des cartes à puces 2. EmbeddedJava : systèmes embarqués 3. 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 2 3 Plateformes Java Java 2 Platform Java2 Standard Edition (J2SE) Applications : Standards desktop & Workstation Cours J2ME, Tébourbi Riadh, SUP'COM Java2 Enterprise Edition (J2EE) Serveurs, Applications Entreprise Java2 Micro Edition (J2ME) Petites mémoires Périphériques à Constraintes 3 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 4 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 5 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 6 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 7 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 8 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) Profil Configuration MIDP 1.0 CLDC MIDP 2.0 CLDC PDA CLDC Sambian, PalmOS Mobile Media API (MMAPI) 1.1 CLDC Permet la lecture de clips audio et vidéo Wireless Messaging API (WMA) 1.1 CLDC Permet l'envoi et la réception de SMS Java APIs for Bluetooth CLDC Foundation Profile CDC Personal Profile CDC Personal Basis Profile CDC RMI optional Profile CDC JDBC optional Profile CDC J2ME Web Services Specification CDC Web Services Mobile 3D Graphics API for J2ME CDC 3D Game CDC Pour les jeux Cours J2ME, Tébourbi Riadh, SUP'COM Package javax.microedition.* Remote Method Invocation 9 Exemples Avant de pouvoir développer sur un mobile il faut connaître sa configuration et ses profils qu’il peut supporter: Manufacturer Wireless Technology Model Frequency (MHz) Software Screen Alcatel One Touch 735i E-GSM, GSM 900, 1800 MIDP 2.0, WMA 1.0, CLDC 1.0 128x128/12 bits Motorola A388c GSM/GPRS 900, 1800, 1900 MIDP 1.0, CLDC 1.0 240x320/16 bits Motorola A760 MIDP 2.0, CLDC 1.0 320x240/16 bits Motorola T720i GSM/GPRS 1900 MIDP 1.0, CLDC 1.0 120x160/12 bits Nokia 3100 GSM/GPRS 900, 1800, 1900 MIDP 1.0, WMA 1.0, CLDC 1.0 128x128/12 bits Nokia 3200 GSM/GPRS/EDGE 900, 1800, 1900 MIDP 1.0, WMA 1.0, CLDC 1.0 128x128/12 bits Nokia 5140 GSM 900, 1800, 1900 CLDC 1.1, MIDP 2.0 128x128/12 bits Nokia 9500 GSM, GSM/GPRS 850, 900, 1800, 1900 JTWI 1.0, M3DAPI 1.0, CLDC 1.1, MIDP 2.0, MMAPI 1.1, LAPI 1.0, WMA 1.1 640x200/16 bits Nokia 7610 GSM 850, 900, 1800, 1900 MIDP 1.0, MIDP 2.0, CLDC 1.0 176x208/16 bits Samsung SGH-S100 GSM/GPRS 900, 1800, 1900 MIDP 1.0, CLDC 1.0 128x160/16 bits Siemens C55 GSM/GPRS 900, 1800 MIDP 1.0, CLDC 1.0 101x64/1 bit Siemens S6V GSM/GPRS 900, 1800, 1900 JTWI 1.0, M3DAPI 1.0, CLDC 1.1, MIDP 2.0, MMAPI 1.1, LAPI 1.0, JABWT 1.0, WMA 1.1 132x176/16 bits Sony Ericsson P908 GSM/GPRS 900, 1800, 1900 MIDP 2.0, PersonalJava 1.1.1, JABWT 1.0, CLDC 1.0, WMA 1.1 208x320/16 bits Cours J2ME, Tébourbi Riadh, SUP'COM 10 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 11 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 12 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 13 Structure de l’API Displayable Low level API (jeux) Screen Canvas Alert ChoiceGroup Cours J2ME, Tébourbi Riadh, SUP'COM DateField High level API (GUI) Form ListBox TextBox Item Gauge ImageItem StringItem TextField 14 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 15 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 16 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 17 Un premier Exemple HelloSupcomMIDlet.java Cours J2ME, Tébourbi Riadh, SUP'COM 1/2 18 2/2 Cours J2ME, Tébourbi Riadh, SUP'COM 19 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 20 Un deuxième Exemple SimpleListe1.java Cours J2ME, Tébourbi Riadh, SUP'COM 1/2 21 2/2 Cours J2ME, Tébourbi Riadh, SUP'COM 22 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 23 Action après choix dans une liste: troisième Exemple: SimpleListe4.java Cours J2ME, Tébourbi Riadh, SUP'COM 1/2 24 2/2 Cours J2ME, Tébourbi Riadh, SUP'COM 25 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 26 Diagramme des Items • 1 Form peut avoir plusieurs Items (components) Cours J2ME, Tébourbi Riadh, SUP'COM 27 Example 4 (1/2) Form1.java import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Form1 extends MIDlet implements ItemStateListener { 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 28 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 29 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 30 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 31 Exemple 5 (1/2) HelloSupcomMIDletfin.java Cours J2ME, Tébourbi Riadh, SUP'COM 32 Exemple 5 (2/2) Cours J2ME, Tébourbi Riadh, SUP'COM 33 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 34 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 35 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 36 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 37 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 38 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 39 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 40 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 41 Multimédia •Mobile Media API (MMIA) •Son,MIDI, Vidéo, streaming… •En remplacement de JMF (trop gros 650k, awt) •Compact: 150K (MIDI, MPEG1, MP3,…) MIME Type Cours J2ME, Tébourbi Riadh, SUP'COM Description audio/midi MIDI files audio/sp-midi Scalable Polyphony MIDI audio/x-tone-seq MIDP 2.0 tone sequence audio/x-wav WAV PCM sampled audio image/gif GIF 89a (animated GIF) video/mpeg MPEG video video/vnd.sun.rgb565 Video capture 42 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 43 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 44 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"); Type Media Exemple syntaxe Capture audio "capture://audio" : capture audio sur périph défaut. "capture://devmic0?encoding=pcm" capture audio sur devmic0 avec encodage PCM. Capture vidéo "capture://video" : capture video à partir du périphérique de capture par défaut "capture://devcam0?encoding=rgb888&width=100&height=50" : capture d’une camera, rgb888 mode encodage, avec “width” “height” (taille) spécifiques Radio "capture://radio?f=105.1&st=stereo " : tuner à la fréquence 105.1 FM mode stéréo. Streaming vidéo/audio/texte d’une source externe "rtp://host:port/type" : type = audio, vidéo ou texte Jouer des tonalités/ MIDI "device://tone" :player pou jouer des tonalités "device://midi" :ou MIDI Cours J2ME, Tébourbi Riadh, SUP'COM 45 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 Passage d’un état à un autre: Cours J2ME, Tébourbi Riadh, SUP'COM •realize() •prefetch() •start() •stop() •deallocate() •close() 46 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 47 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 48 Exemple 6 (2/2) Cours J2ME, Tébourbi Riadh, SUP'COM 49 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 50 Snapshot (capture d’une image) Vidéo lue capturer une image Méthode getSnaphot sur un objet VideoControl byte[] getSnapshot(java.lang.String imageType) Exemple: VideoControl vc; byte[] snapshot; ImageItem imi; snapshot = vc.getSnapshot("encoding=jpeg"); Image im = Image.createImage(snapshot, 0, snapshot.length); On obtient un objet Image qu’on peut afficher à l’aide d’un ImageItem (voir exemple 5) Cours J2ME, Tébourbi Riadh, SUP'COM 51 Application EN TP: MIDlet qui lit une vidéo depuis un URL dans une liste Fonctions Play, Pause et Stop (utilisation d'un thread pour play) Fonction Snapshot (produire une image à partir de la vidéo) (un autre thread) Fonction contrôle volume (utilisation de Gauge) Fonction partage URL avec un ami par SMS VideoPlayer2.java VideoPlayer3.java Cours J2ME, Tébourbi Riadh, SUP'COM 52 Déploiement Une Midlet java peut être déployée sur un périphérique mobile: 1) Directement par liaison USB, Série, Blutooth.. entre un PC et le Mobile • Utilisation d’un logiciel de téléchargement (Oxygène phone manager, NOKIA phone manager,..) 2) OTA: Over The Air: Téléchargement à partir d’un serveur. • Utilisation d’un URL = adresse de la Midlet (Acces à travers le réseau), exemple: http//nokia.com Dans les deux cas : il faut créer un package d’installation .jar (archive) {.class , images, fichiers etc..} et .jad (description)) •Sur le mobile: le « Application Manager » gère l’installation, mise à jour, désinstallation et exécution des applications java (un mini SE) Cours J2ME, Tébourbi Riadh, SUP'COM 53 Exemple hello1.jad MIDlet-1: HelloSupcomMIDletfin, , HelloSupcomMIDletfin MIDlet-Jar-Size: 66756 MIDlet-Jar-URL: http://localhost:8080/midp/hello1.jar MIDlet-Name: hello1 MIDlet-Vendor: Tebourbi Riadh MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP-2.0 (En locale copier hello1.jar et hello1.jad sur le mobile (par liaison USB, Blutooth etc..) et exécuter hello1. ) Cours J2ME, Tébourbi Riadh, SUP'COM 54 Exemple OTA(1) Sur le SERVEUR URL: http://ip_serveur/midp/hello1.html •Copier les fichiers .jar et .jad dans le répertoire des applications WEB •Écrire hello1.html qui contient un lien vers hello1.jad •Exemple de serveur: Tomcat Hello1.html <html> <head> <title>hello1</title> </head> <body> <a href="http://localhost:8080/midp/hello1.jad">hello1.jad</a> </body> </html> Cours J2ME, Tébourbi Riadh, SUP'COM 55 Exemple OTA(2) Sur le Mobile 1 5 Cours J2ME, Tébourbi Riadh, SUP'COM 2 6 3 4 7 8 56 Outils de développement Quelques outils: J2ME Wireless Toolkit 2.0.1 Sun ONE Studio Mobile Edition 5 CodeWarrior Wireless Studio 7.0 Nokia Developer’s Suite Beta J2ME RIM BlackBerry JDE 3.2 Motorola LWT1.0 Cours J2ME, Tébourbi Riadh, SUP'COM 57 Sun ONE Studio Mobile Edition Cours J2ME, Tébourbi Riadh, SUP'COM 58 BlackBerry Java Development Environment Cours J2ME, Tébourbi Riadh, SUP'COM 59 Nokia Developer’s Suite & CodeWarrior Cours J2ME, Tébourbi Riadh, SUP'COM 60 J2ME Wireless Toolkit Cours J2ME, Tébourbi Riadh, SUP'COM 61 Installation j2me_wireless_toolkit-2_2-windows.exe. Installation dans c:/wtk22 Applications Midlets Midlet hello1 .jar, .jad Les .class Ressources de l’application: exemple: supcom_rgb.png Codes sources, exemple: HelloSupcomMIDletfin.java Cours J2ME, Tébourbi Riadh, SUP'COM 62 Création d’une Midlet(1) « DémarrerprogrammesJ2ME Wireless Toolkit 2.2KToolbar » NewProject: hello « Settings » Nom Nom classe (fichier .java) Cours J2ME, Tébourbi Riadh, SUP'COM 63 Création d’une Midlet(1) Nous allons tester la Midlet « HelloSupcomMIDlet » (exemple 1) Le répertoire C:\WTK22\apps\hello\src doit contenir le fichier HelloSupcomMIDlet.java Ecrire le fichier HelloSupcomMIDlet.java (à l’aide d’un éditeur de texte, ou KAWA). Le copier dans le répertoire C:\WTK22\apps\hello\src Compiler: « ProjectBuild » Exécuter: « ProjectRun »: exécution sur l’émulateur JAR: « Projectpackagecreate package »: création du .jar Cours J2ME, Tébourbi Riadh, SUP'COM 64 Création d’une deuxième Midlet Nous allons rajouter au projet hello une deuxième midlet: HelloSupcomMIDletbis Ecrire le fichier HelloSupcomMIDletbis.java (à l’aide d’un éditeur de texte, ou KAWA). Le copier dans le répertoire C:\WTK22\apps\hello\src Dans « Settings » « Midlets » « Add » entrer le nom de la midlet et la nom de la classe (HelloSupcomMIDletbis) « OK » Build + RUN Exécution avec choix Midlet à exécuter Cours J2ME, Tébourbi Riadh, SUP'COM 65 A VOUS DE JOUER Cours J2ME, Tébourbi Riadh, SUP'COM 66