Upload
talasi
View
37
Download
2
Embed Size (px)
DESCRIPTION
Développement d’applications mobiles sous JAVA Micro Edition J2ME. Tébourbi Riadh [email protected]. http://www.slideshare.net/ter216/coursJ2ME. Présentation de J2ME. - PowerPoint PPT Presentation
Citation preview
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 11
Développement d’applications Développement d’applications mobiles sous mobiles sous
JAVA Micro Edition J2MEJAVA Micro Edition J2ME
Tébourbi RiadhTébourbi [email protected]@supcom.rnu.tn
http://www.slideshare.net/ter216/coursJ2ME
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 22
Présentation de J2ME 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és3. 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'COMCours J2ME, Tébourbi Riadh, SUP'COM 33
3 Plateformes Java3 Plateformes Java
Java2 Standard Edition
(J2SE)
Java2 Enterprise Edition
(J2EE)
Java2 Micro Edition
(J2ME)
Java 2 Platform
Applications : Standards desktop &Workstation
Serveurs, Applications Entreprise
Petites mémoires Périphériques à Constraintes
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 44
Java 2 Micro EditionJava 2 Micro Edition
Plateforme JAVA pour des petits Plateforme JAVA pour des petits périphériques (périphériques (mobiles et embarqués)..
Un sous ensemble de J2SEUn sous ensemble de J2SE Périphériques cible:Périphériques cible:
Téléphones Mobiles, Smart PhonesTéléphones Mobiles, Smart Phones PDAs (y compris les PocketPC)PDAs (y compris les PocketPC) TV, VCR, Lecteurs CDTV, VCR, Lecteurs CD
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 55
Exemple de systèmes mobiles et Exemple de systèmes mobiles et de systèmes embarqués 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'COMCours J2ME, Tébourbi Riadh, SUP'COM 66
Contraintes matérielles des Contraintes matérielles des mobiles 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 Cours J2ME, Tébourbi Riadh, SUP'COM 77
Configurations et Profils du J2MEConfigurations 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 Cours J2ME, Tébourbi Riadh, SUP'COM 88
Les configurations 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 Cours J2ME, Tébourbi Riadh, SUP'COM 99
Les profiles 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 Package javax.microedition.*
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 Remote Method Invocation
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'COMCours J2ME, Tébourbi Riadh, SUP'COM 1010
ExemplesExemples
Manufacturer ModelWireless
TechnologyFrequency
(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
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 Cours J2ME, Tébourbi Riadh, SUP'COM 1111
Les VMLes VMKVM (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 Cours J2ME, Tébourbi Riadh, SUP'COM 1212
Profile MIDPProfile MIDP(Mobile Information Device (Mobile Information Device
Profile)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.
•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
http://java.sun.com/products/midp/ :
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1313
Applications MIDPApplications MIDP
Toute application MIDP doit dériver d’une classe Toute application MIDP doit dériver d’une classe spéciale: MIDletspéciale: MIDlet
La classe MIDlet définie et contrôle le cycle de vie La classe MIDlet définie et contrôle le cycle de vie d’une application.d’une application.
Se trouve dans le Package: javax.microedition.midlet. Se trouve dans le Package: javax.microedition.midlet.
Développement (javac), Preverify (KVM), Packaging Développement (javac), Preverify (KVM), Packaging (.jar), Description/Déploiement (.jad)(.jar), Description/Déploiement (.jad)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1414
Structure de l’APIStructure de l’API
ScreenCanvas
Form TextBoxListBox ItemAlert
ChoiceGroup DateField Gauge ImageItem StringItem TextField
Displayable
Low level API (jeux)
High level API (GUI)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1515
Programmation d’une MIDletProgrammation d’une MIDlet
Une application MIDP doit être une sous-classe Une application MIDP doit être une sous-classe de la classe MIDlet :de la classe MIDlet :
public class MaMidlet extends MIDlet {…}public class MaMidlet extends MIDlet {…}
C’est l’équivalent MIDP d’une applet, où le C’est l’équivalent MIDP d’une applet, où le lancement et l’arrêt sont sous le contrôle de lancement et l’arrêt sont sous le contrôle de l’environnement d’exécutionl’environnement d’exécution
Quand une MIDlet est lancée l’environnement Quand une MIDlet est lancée l’environnement appelle la méthode MIDlet.startApp() appelle la méthode MIDlet.startApp()
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1616
Architechture d’un programme Architechture d’un programme MIDlet (1)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'COMCours J2ME, Tébourbi Riadh, SUP'COM 1717
Architechture d’un programme Architechture d’un programme MIDlet(2)MIDlet(2)
Import packages nécessaires :Import packages nécessaires : import javax.microedition.midlet.*;import javax.microedition.midlet.*; import javax.microedition.lcdui.*;import javax.microedition.lcdui.*;
Tout MIDP applications dérive « extend » Tout MIDP applications dérive « extend » de la classe MIDletde la classe MIDlet
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1818
1/2Un premier ExempleHelloSupcomMIDlet.java
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1919
2/2
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2020
Afficher un texte qui défile: utilisation de la classe Ticker: HelloSupcomMIDletbis.java
…..Pour la Suite voir HelloSupcomMIDlet
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2121
Un deuxième Exemple 1/2SimpleListe1.java
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2222
2/2
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2323
list = new List("Sample list", List.IMPLICITList.IMPLICIT, …);
Remarque sur le constructeur de la classe List: new List(String title, int listTypeint listType, …)
list = new List("Sample list", List.EXCLUSIVEList.EXCLUSIVE, …);
list = new List("Sample list", List.MULTIPLEList.MULTIPLE, …);
(SimpleListe1.java)
(SimpleListe2.java)
(SimpleListe3.java)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2424
Action après choix dans une liste: troisième Exemple: SimpleListe4.java 1/2
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2525
2/2
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2626
Forms et ItemsForms et Items
Form (class) est le seul "container" dans MIDP Form (class) est le seul "container" dans MIDP Form contient des objets Item (class) (doc API: Form contient des objets Item (class) (doc API: A A
superclass for components that can be added to a Formsuperclass for components that can be added to a Form)) Les éléments sont ajoutés en utilisant Form.append()Les éléments sont ajoutés en utilisant Form.append()
form.append(item);form.append(item); form.append("string"); form.append("string");
Quand un Item change d’état (suite à une action sur Quand un Item change d’état (suite à une action sur celui-ci), il génère l’événement ItemStateChangedcelui-ci), il génère l’événement ItemStateChanged Capté par un ItemStateListener définit sur la Form Capté par un ItemStateListener définit sur la Form Le changement d’état appelle la méthode ItemStateListenerLe changement d’état appelle la méthode ItemStateListener
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2727
Diagramme des ItemsDiagramme des Items
• 1 Form peut avoir plusieurs Items (components)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2828
Example 4 (1/2)Example 4 (1/2)Form1.javaForm1.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'COMCours J2ME, Tébourbi Riadh, SUP'COM 2929
Example 4 (2/2)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'COMCours J2ME, Tébourbi Riadh, SUP'COM 3030
Image et ImageItemImage 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'COMCours J2ME, Tébourbi Riadh, SUP'COM 3131
Affichage d’une imageAffichage d’une image
ImageItem(String label, Image img, int layout, String altText)
Constructeurs:Constructeurs:
Image createImage(String name)
Form fmMain = new Form("Images");...// Create an imageImage img = Image.createImage("/supcom.png");// Append to a formfmMain.append(new ImageItem(null, img, ImageItem.LAYOUT_CENTER, null));
Affichage sur une Form:Affichage sur une Form:
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 3232
Exemple 5 (1/2)Exemple 5 (1/2)HelloSupcomMIDletfin.javaHelloSupcomMIDletfin.java
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 3333
Exemple 5 (2/2)Exemple 5 (2/2)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 3434
Les ThreadsLes 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'COMCours J2ME, Tébourbi Riadh, SUP'COM 3535
Les ThreadsLes Threads
1) public class MaMidlet extends MIDlet implements CommandListener, Runnable{….}
Création d’un Thread dans une Midlet
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'COMCours J2ME, Tébourbi Riadh, SUP'COM 3636
Les ThreadsLes ThreadsCré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'COMCours J2ME, Tébourbi Riadh, SUP'COM 3737
MIDP 2.0MIDP 2.0
Quoi de neuf ? (disponible été 2003)
• UI•Multimédia :Mobile Media API (MMAPI)•Amélioration des formulaire•Images RGB
• Game APIjavax.microedition.lcdui.gameGameCanvas, LayerManager, Layer,
TiledLayer, Sprit
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 3838
MIDP 2.0MIDP 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 URLla classe de la MIDLetl’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'COMCours J2ME, Tébourbi Riadh, SUP'COM 3939
MessagingMessaging
• 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
Wireless Messaging API (WMA Wireless Messaging API (WMA 2.0)2.0)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 4040
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.
package, javax.wireless.messaging
Wireless Messaging API (WMA Wireless Messaging API (WMA 2.0)2.0)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 4141
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'COMCours J2ME, Tébourbi Riadh, SUP'COM 4242
MultimédiaMultimé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 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
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 4343
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'COMCours J2ME, Tébourbi Riadh, SUP'COM 4444
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'COMCours J2ME, Tébourbi Riadh, SUP'COM 4545
ManagerManager 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)createPlayer(String locator)
Player p = Manager.createPlayer("capture://video");
Player p = Manager.createPlayer ("http://nokia.com/chanson.mp3");
Player p = Manager.createPlayer("http://movies.com/film.mpg");
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'COMCours J2ME, Tébourbi Riadh, SUP'COM 4646
PlayerPlayer•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'COMCours J2ME, Tébourbi Riadh, SUP'COM 4747
Player(2)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
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)
•Usage:
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 4848
Exemple 1 (1/2)Exemple 1 (1/2)VideoPlayer.javaVideoPlayer.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'COMCours J2ME, Tébourbi Riadh, SUP'COM 4949
Exemple 6 (2/2)Exemple 6 (2/2)
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5050
Exemple 7 (1/2)Exemple 7 (1/2)VideoPlayer1.javaVideoPlayer1.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'COMCours J2ME, Tébourbi Riadh, SUP'COM 5151
Snapshot (capture d’une Snapshot (capture d’une image)image)
Vidéo lue capturer une image
byte[] getSnapshot(java.lang.String imageType)
Méthode getSnaphot sur un objet VideoControl
snapshot = vc.getSnapshot("encoding=jpeg");
VideoControl vc;byte[] snapshot;ImageItem imi;
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)
Exemple:
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5252
ApplicationApplicationEN 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.javaVideoPlayer2.java
VideoPlayer3.javaVideoPlayer3.java
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5353
DéploiementDéploiementUne 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
•Sur le mobile: le « Application ManagerApplication Manager » gère l’installation, mise à jour, désinstallation et exécution des applications java (un mini SE)
Dans les deux cas : il faut créer un package d’installation .jar (archive) {.class , images, fichiers etc..} et .jad (description))
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5454
ExempleExemple
MIDlet-1: HelloSupcomMIDletfin, , HelloSupcomMIDletfinMIDlet-Jar-Size: 66756MIDlet-Jar-URL: http://localhost:8080/midp/hello1.jarMIDlet-Name: hello1MIDlet-Vendor: Tebourbi RiadhMIDlet-Version: 1.0MicroEdition-Configuration: CLDC-1.0MicroEdition-Profile: MIDP-2.0
hello1.jad
(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'COMCours J2ME, Tébourbi Riadh, SUP'COM 5555
Exemple OTA(1)Exemple OTA(1)Sur le SERVEUR
URL: http://ip_serveur/midp/hello1.html
<html><head><title>hello1</title></head><body><a href="http://localhost:8080/midp/hello1.jad">hello1.jad</a></body></html>
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
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5656
Exemple OTA(2)Exemple OTA(2)Sur le Mobile
1 2 3 4
5 6 7 8
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5757
Outils de développementOutils de développement
Quelques outils:Quelques outils: J2ME Wireless Toolkit 2.0.1J2ME Wireless Toolkit 2.0.1 Sun ONE Studio Mobile Edition 5Sun ONE Studio Mobile Edition 5 CodeWarrior Wireless Studio 7.0CodeWarrior Wireless Studio 7.0 Nokia Developer’s Suite Beta J2MENokia Developer’s Suite Beta J2ME RIM BlackBerry JDE 3.2RIM BlackBerry JDE 3.2 Motorola LWT1.0Motorola LWT1.0
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5858
Sun ONE Studio Mobile EditionSun ONE Studio Mobile Edition
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5959
BlackBerry Java Development BlackBerry Java Development EnvironmentEnvironment
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6060
Nokia Developer’s Suite & Nokia Developer’s Suite & CodeWarriorCodeWarrior
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6161
J2ME Wireless ToolkitJ2ME Wireless Toolkit
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6262
InstallationInstallationj2me_wireless_toolkit-2_2-windows.exe. Installation dans c:/wtk22
Applications Midlets
.jar, .jad
Midlet hello1
Les .class
Ressources de l’application: exemple: supcom_rgb.png
Codes sources, exemple: HelloSupcomMIDletfin.java
Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6363
Création d’une Midlet(1)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'COMCours J2ME, Tébourbi Riadh, SUP'COM 6464
Création d’une Midlet(1)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'COMCours J2ME, Tébourbi Riadh, SUP'COM 6565
Création d’une deuxième Création d’une deuxième MidletMidlet
Nous allons rajouter au projet hello une deuxième midlet: HelloSupcomMIDletbisEcrire 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'COMCours J2ME, Tébourbi Riadh, SUP'COM 6666
A VOUS DE JOUERA VOUS DE JOUER