You are on page 1of 64

Développement dƞapplications

mobiles sous
JAVA Micro Edition J2ME

Attariuas Hicham
ENSAT

c
]ré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.

—
a ]lateformes Java
Java 2 ]latform

Java2 Java2 Java2


Standard Edition Enterprise Edition Micro Edition
(J2SE) (J2EE) (J2ME)

Applications : Serveurs, ]etites mémoires


Standards desktop & Applications ]ériphériques à Constraintes
Workstation Entreprise

a
Java 2 Micro Edition

º ]lateforme JAVA pour des petits périphériques


(mobiles et embarqués)..
º Un sous ensemble de J2SE
º ]ériphériques cible:
º Téléphones Mobiles, Smart ]hones
º ]DAs (y compris les ]ocket]C)
º TV, VCR, Lecteurs CD

Œ
Exemple de systèmes mobiles et de
systèmes embarqués
_ SmartCard/Carte à ]uce
_ Cellular ]hone/Téléphone mobile
_ ]alm]C, ]ocket]C/Assistant ]ersonnel
_ eBook, Cartable Electronique
_ Appareil photo, Ʀ
_ Set Top Box/Decodeur TV Numérique
_ Game Console/Console de Jeu
_ Electronic Consuming/Electronique
_ Terminal de paiement, Guichet, ]arcmètre
_ Home ]ortal/]ortail maison
_ Car/Voiture
_ Wearable computer (Augmented Reality)
_ ]rothèse active
_ Satellite ...


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,


EE]ROM)

ƥAutonomie (?) (pour les nomades)

ƥClavier et pointage rudimentaire: tablette sensible, écran tactile, ]AD, entrée de texte

ƥCommunication (?): Série (IrDA, station dƞaccueil USB ou RS2a2), Réseau LAN,
Wireless LAN, CellulaireƦ)

ƥRésistance aux chocs

·
Configurations et ]rofils 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.

X
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'A]I 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 ]DA "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 a2 bits, une meilleure connexion au réseau), par exemple un Set
Top box ou certains ]DA "haut de gamme". Elle s'utilise sur une machine virtuelle CVM
(CVM=JVM (SUN) mais plus compact)

ù
Les profiles
j  
   
           
     
          
      
            !"#$ %
   &   '  (  )

Profil Configuration

á  CLDC ]    


    
á  CLDC
 CLDC j
 ] 
j
á
 á   áá  CLDC ]
       
u  á   uá CLDC ]
    j j

2      CLDC

     CDC


     CDC
       CDC
á       CDC è
     
2      CDC
2á u
!  " ! "  "  CDC uj  
á
 #$ "  2á CDC a
$%  CDC ]  

x
Exemples
Avant de pouvoir développer sur un mobile il faut connaître sa configuration et ses profils
quƞil peut supporter:
Wireless Frequency
Manufacturer Model Software Screen
Technology (MHz)
`  
  Xa  x cù — `c  c—ùc—ùc—
c
    `aùù  x cù cx c c —Œ a— c·

    `X·  — c a— —Œ c·

    X—   cx c c c— c· c—

  ac   x cù cx c `c  c—ùc—ùc—


c
  a—    x cù cx c `c  c—ùc—ùc—
c

  cŒ   x cù cx cc— c—ùc—ùc—


  x   ù x cù cx c a` c  ·Œ — c·
cc— 
` cc`c 
`cc

  X·c   ù x cù cx c —  cX·— ùc·
c

  c   x cù cx c c c—ùc· c·

   x cù c c c c·Œc

 ·  x cù cx c a` c  ca—cX·c·


cc— 
` cc`c 
`!c `cc

 "   x ù  x cù cx —   # — ùa— c·
ccc`!c 
c `cc

c
Les VM
 " (SUN) pour CLDS
* " (SUN) pour CDC

" (SUN): Nouvelle VM pour CLDC (meilleures performances)


*+*,j (SUN) : Anciennement CVM pour CDC (performance améliorée).
Très portable (ARM, ]ower ]C, MI]S, S]ARC sur Linux,
Solaris..).

" " (H]) : Support KVM (processeur 16 ou a2 bits, ]almOS (64 k), Linux,
]ocket]C/SHa /Strong ARM

- " (IBM) : machine virtuelle pour lƞembarqué. OS: ]almOS, HardHatLinux, WinCE. ß?:
X86, ARM, Strong ARM, MI]S, ]ower]C..

cc
]rofile MID]
(Mobile Information Device ]rofile)
MID] 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 MID] implementation


ƥa2KB 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


Applications MID]
º Toute application MID] 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 ]ackage: javax.microedition.midlet.


javax.microedition.midlet.

º Développement (javac
(javac),
), ]reverify (KVM), ]ackaging (.jar),
Description/Déploiement (.jad
(.jad))

ca
Structure de lƞA]I

Displayable
Low level A]I (jeux)

Canvas Screen High level A]I (GUI)

Alert Form ListBox TextBox Item

ChoiceGroup DateField Gauge ImageItem StringItem TextField


]rogrammation dƞune MIDlet
º Une application MID] doit être une sous
sous--classe de la
classe MIDlet :
?  ""
 ""  .   "+  /01

º Cƞest lƞéquivalent MID] dƞune applet, où le lancement


et lƞarrêt sont sous le contrôle de lƞenvironnement
dƞexécution

º ®    "+
"+     &   
   "+
"+ $)
$)

c
Architechture dƞun programme MIDlet
(1)
  ""  .  "+ /

 "" $)/
223      
1
  $)/
22       "" $   )
1

    $)/


223&    '  ($ & )
1

   $     ) /


22®     & 45   
1
1


Architechture dƞun programme
MIDlet(2)

º Import packages nécessaires :


º 6.  78
6. 78
º 6.
6.   78
  78

º Tout MID] applications dérive « extend » de


la classe MIDlet

cX
9  #. 
HelloSupcomMIDlet.java c2!


!2!

cx
â Afficher un texte qui défile: utilisation de la classe Ticker: HelloSupcomMIDletbis.java

0  j  , j ?




—
9 . #.  c2!
SimpleListe1.java

—c
!2!

——
Remarque sur le constructeur de la classe List: new 3(String title,  : , Ʀ)

list = new List("Sample list", List.IM]LICIT,


List.IM]LICIT Ʀ);

(SimpleListe1.java)

list = new List("Sample list", List.EXCLUSIVE,


List.EXCLUSIVE Ʀ);

(SimpleListe2.java)

list = new List("Sample list", List.MULTI]LE,


List.MULTI]LE Ʀ);

(SimpleListea.java)

—a
Action après choix dans une liste:  #.  ;j 3 <6 c2!

—Œ
!2!

—
Forms et Items

º Form (class) est le seul "container" dans MID]


º Form contient des objets Item (class) (doc A]I: A su?erclass for
com?onents that can be added to a Form)
º Les éléments sont ajoutés en utilisant Form.a??end()
Form.a??end()
º form.a??end(item);
form.a??end(item);
º form.a??end("string");
form.a??end ("string");
º Quand un Item change dƞétat (suite à une action sur celui-
celui-ci),
il génère lƞévénement ItemStateChanged
º Ca?té ?ar un ItemStateListener définit sur la Form
º Le changement dƞétat a??elle la méthode ItemStateListener

—·
Diagramme des Items

ƥ 1 Form peut avoir plusieurs Items (components)

—X
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);
}

—ù
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;
}
}

—x
Image et ImageItem
ƥ*      
ƥ ;      6      
  ,  3   & 
ƥ  ;    &    =#  
  &    &$  4  4
 4 )
ƥ"+  .  & ;
ƥ   ;     $  
   &    .  )
ƥ  ;     >   
&   

a
Affichage dƞune image
*  ;
Image createImage(String name)

ImageItem(String label, Image img, int layout, String altText)

    =;

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));

ac
Exemple 5 (1/2)

 ?
  6


Exemple 5 (2/2)

aa
Les Threads
ƥUtilisés pour faire du multitâche:
]endant 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. ]ar exemple, pour exécuter des Midlets dans un
thread, il faut que celles ci implémentent l'interface Runnable.


Les Threads
Création dƞun Thread dans une Midlet

c)  ""  .  "+   * 3  4? 


/01

!) :  $?   )


22   @:   6 @   6 @     
22*   6 :       6 ' ($  "  .  ) &  
22   $) ' (   .  

:  % @:  $)


$)8â       $)8

A)22      $)  " ;


   $)/
022     
1

a
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.

   j B$)/


 @:  $)/
   $)/
0022=    
1
1$)8
1


MID] 2.0
®   C$  !DDA)

E9
E"  ;"  " $"")
E   
E ?FB

E F 
6.   
F *43 " 43 4
: 3 4j

aX
MID] 2.0
ƥ Sécurité
ƥ HTT]S
ƥ ]KI (Certificats)
ƥ JAR signé
La signature et la clé publique sont ajoutés au JAD
ƥ ]ermissions
Nouvelles entrées du JAD : MIDIet-]ermissions, MIDIet-]ermissions-Op

ƥ Lancement ]ush de MIDLet sur des demandes entrantes


de connexions réseaux
ƥ L'entrée MIDlet-]ush-<n> du JAD précise:
lƞURL local de connection URL
la classe de la MIDLet
lƞadresse I] de la machine autorisée à lancer un push
ƥ Exemple : MIDIet-]ush-1: socket://:76, exemple.]ushLet. 192.161.60


Messaging

ƥ Wireless Messaging A]I (WMA) pour J2ME


ƥ Messageries pour pager et téléphone mobile

ƥ SMS, ...

ƥ Basé sur le Generic Connection Framework (GCF) de CLDC


ƥ javax.wireless.messaging
ƥ Message, TextMessage et BinaryMessage.
ƥ MessageConnection, MessageListener

ax
Multimédia
ƥMobile Media A]I (MMIA)
ƥSon,MIDI, Vidéo, streamingƦ
ƥEn remplacement de JMF (trop gros 650k, awt)
ƥCompact: 150K (MIDI, M]EG1, M]a,Ʀ)
á á 
 
    á   

       á  

   á   

  ! "#$%á


 
&&  ' ()*+  ' (,

!  & á'!  

!  !
&-.- $    


Œ
Mobile Media A]I (MMIA)
Introduction

j;

ƥj  'F  (4'  >(4 


'    2    (; &     
   

ƥ:           *3+*

ƥ#.  ;5      6  8


&      4     

Œc
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:
ƥ  ;3    &    4    
  
ƥ" ;     46   4
           
    
ƥ+j  ;+     &  
  $ 44) G   
   +j  $     
.  )
Œ—
Manager
*&          '  (     
        ;
    $+j    )
    $ j  4j )
    $j )

]layer p = Manager.create]layer ("http://nokia.com/chanson.mpa");


]layer p = Manager.create]layer("http://movies.com/film.mpg");
]layer p = Manager.create]layer("capture://video");

Type Media Exemple syntaxe


"capture://audio" &"  ' '
  "capture://devmic0?encoding=pcm" "   % " " "  
á
"capture://video" &"    ( ' ' )  " '
"capture://devcam0?encoding=rgb888&width=100&height=50" &
  '
" * "% + 
,,,%   "  +  "-. /- / 
'"  ) 
 "capture://radio?f=105.1&st=stereo " & ( ') " 0á%  '' 
! %  ' 1 1 2 *  "  2  "rtp://host:port/type" &3 4 + '   2 
"device://tone" & 3  5     '
2     '1á 
"device://midi" & á 

Œa
]layer
ƥCréé avec Manager
ƥ]ermet de restituer un contenu multi-media

ƥ]ossède des états: UNREALIZED, REALIZED, ]REFETCHED, STARTED, et CLOSED

95?#3H#+; 46  

?#3H#+;      $ 4 


  4 )

?#=#:*,#+;   .      4


        

j:?:#+;     $    )

*3Gj#+;    4   
ƥ  I $)
ƥ  $)
]assage dƞun état à un ƥ$)
autre: ƥ$)
ƥ   $)
ƥ  $)
ŒŒ
]layer(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:
  8=8

%$  * ) * $J  * J)8


 %$   * ) * $J   * J)8

  $$ )+ " $9j#KF9K?": #4 ))8226   


          

  3  $LD)822   LD$  D cDD)


Œ
Exemple 1 (1/2)
Video]layer.java

â3    &   


>    
$ .  :)
â9 ;
;22  2 2>


Œ·
Exemple 6 (2/2)

ŒX
Exemple 7 (1/2)
Video]layer1.java

Lecture dƞun fichier vidéo à partir de lƞarchive jar. Utilisation de


Manager.     $ j  4j )
LƞInputStream est obtenu à partir de lƞobjet application obtenu par
getClass()
0

0
Ν
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)

Œx
Application
EN T]:

MIDlet qui lit une vidéo depuis un URL

Fonctions ]lay, ]ause 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)

Video]layer2.java

Video]layera.java


Déploiement
9 " 6          ;

1) Directement par liaison USB, Série, Blutooth.. entre un ]C 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)

c
Exemple
hello1.jad

"+ c;, j "+ 44, j "+ 


"+  jI ;MMNLM
"+  9?3;;22  ;ODOD2 2 c6
"+ 5 ; c
"+   ;:   ? 
"+  ;cD
"# * ;*3+*cD
"#  ;"+!D

(En locale copier hello1.jar et hello1.jad sur le mobile (par liaison USB,
Blutooth etc..) et exécuter hello1. )


Exemple OTA(1)
j  j#? #9?
9?3;;22K  2 2 c

ƥ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

P Q
P  Q
P Q cP2 Q
P2  Q
P  Q
P %J;22  ;ODOD2 2 c6 JQ c6 P2Q
P2  Q
P2 Q

a
Exemple OTA(2)
j  " 

1 2 a 4

5 6 7 8


Outils de développement

º Quelques outils
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 a.2
º Motorola LWT1.0


Sun ONE Studio Mobile Edition


BlackBerry Java Development
Environment

X
Nokia Developerƞs Suite & CodeWarrior


J2ME Wireless Toolkit

x
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

·
Création dƞune Midlet(1)
« DémarrerâprogrammesâJ2ME Wireless Toolkit 2.2âKToolbar »

New]roject: hello

« Settings »

Nom

Nom classe
(fichier .java)

·c
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: « ]rojectâBuild »
Exécuter: « ]rojectâRun »: exécution sur lƞémulateur
JAR: « ]rojectâpackageâcreate package »: création du .jar

·—
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

·a
 G9j+# G9#?

·Œ

You might also like