développement d’applications mobiles sous java micro edition j2me

66
Cours J2ME, Tébourbi Riadh, SUP'COM Cours J2ME, Tébourbi Riadh, SUP'COM 1 Développement Développement d’applications mobiles sous d’applications mobiles sous JAVA Micro Edition J2ME JAVA Micro Edition J2ME Tébourbi Riadh Tébourbi Riadh [email protected] [email protected] http://www.slideshare.net/ter216/coursJ2ME

Upload: talasi

Post on 13-Jan-2016

37 views

Category:

Documents


2 download

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

TRANSCRIPT

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

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

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

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.

Page 3: Développement d’applications mobiles sous  JAVA Micro Edition 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

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

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

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

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

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

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

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

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.

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

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)

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

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

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

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:

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

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

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

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/ :

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

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)

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

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)

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

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

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

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 } }

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1818

1/2Un premier ExempleHelloSupcomMIDlet.java

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 1919

2/2

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2121

Un deuxième Exemple 1/2SimpleListe1.java

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2222

2/2

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

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)

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 2525

2/2

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

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

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

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)

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

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

}

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

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;

}}

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

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.

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

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:

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 3333

Exemple 5 (2/2)Exemple 5 (2/2)

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

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.

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

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 }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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)

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

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

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

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:

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

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:

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 4949

Exemple 6 (2/2)Exemple 6 (2/2)

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

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

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

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:

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

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

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

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

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

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

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

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

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

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

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5858

Sun ONE Studio Mobile EditionSun ONE Studio Mobile Edition

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 5959

BlackBerry Java Development BlackBerry Java Development EnvironmentEnvironment

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6060

Nokia Developer’s Suite & Nokia Developer’s Suite & CodeWarriorCodeWarrior

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6161

J2ME Wireless ToolkitJ2ME Wireless Toolkit

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

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

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

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)

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

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

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

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

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

Cours J2ME, Tébourbi Riadh, SUP'COMCours J2ME, Tébourbi Riadh, SUP'COM 6666

A VOUS DE JOUERA VOUS DE JOUER