Download SUN ONE – Mobile Development

Document related concepts
no text concepts found
Transcript
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émarrerprogrammesJ2ME Wireless Toolkit 2.2KToolbar »
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: « ProjectBuild »
Exécuter: « ProjectRun »: exécution sur l’émulateur
JAR: « Projectpackagecreate 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