J2ME Java 2 Micro Edition -...

Post on 09-Feb-2020

3 views 0 download

Transcript of J2ME Java 2 Micro Edition -...

Ahcène Bounceur

J2ME Java 2 Micro Edition

Ahcène Bounceur

Multimédia et Applications Intégrées

Ahcène Bounceur

Sommaire

1. Introduction

2. Développement

3. Interface utilisateur

4. Interaction utilisateur

5. Persistance

Ahcène Bounceur

Sommaire

1. Introduction

2. Développement

3. Interface utilisateur

4. Interaction utilisateur

5. Persistance

Ahcène Bounceur

INTERFACE UTILISATEUR Chapitre 3

Ahcène Bounceur

Les classes

User Interface Package

javax.microedition.lcdui The UI API provides a set of features for implementation of user interfaces for MIDP applications.

javax.microedition.lcdui.game The Game API package provides a series of classes that enable the development of rich gaming content for wireless devices.

Ahcène Bounceur

Classes de haut niveau

• Portabilité idéale

– Pas de contrôle total de l’affichage

• « Look and Feel » géré par l’appareil .

Ahcène Bounceur

Classes de bas niveau

• Canvas

• GameCanvas

• Graphics

• Portabilité restreinte

– mais possibilité de placement précis à l’écran

Ahcène Bounceur

La classe abstraite Displayable

• Affichage => implémenter les méthodesde la classe Displayable

• Un displayable comporte : – un titre

– un ticker

– des commandes associées

– ...

• Graphics n’utilise pas cette classe – Comporte des méthodes qui manipulent

directement l’écran de l’appareil

Ahcène Bounceur

La classe Display

• obtenir des informations sur les propriétés d’affichage de l’appareil

• demander l’affichage d’objets à l’écran

• accéder aux objets affichés

Ahcène Bounceur

Exemple

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class helloMIDlet extends MIDlet {

private Display display; // The display for this MIDlet

TextBox box = null; // TextBox to display text

public helloMIDlet() { }

public void startApp() {

display = Display.getDisplay(this);

box = new TextBox("Simple Example", "Hello World", 20, 0);

display.setCurrent(box);

}

public void pauseApp() { }

public void destroyApp(boolean unconditional) { }

}

Ahcène Bounceur

Exemple

– On utilise la méthode statique getDisplay de la

classe Display pour obtenir l’objet display

unique à chaque MIDlet display = Display.getDisplay(this);

– TextBox est un Displayable ! box = new TextBox("Simple Example","Hello World",20,0);

– On ne peut afficher qu’un seul objet Displayable

à la fois display.setCurrent(box);

Ahcène Bounceur

Retour sur les classes de haut niveau

• Screen

– Base pour tous les écrans de haut niveau Propriétés communes pour tous ces écrans

Ahcène Bounceur

Retour sur les classes de haut niveau

• Alertes

– Messages à l’intention de l’utilisateur

• limitées en temps (temps fixé en ms)

• modales* (requièrent une action utilisateur)

– On peut y associer :

• son

• image

• indicateur de progression

*Pour une alerte modale : Utiliser Alert.FOREVER

Ahcène Bounceur

Retour sur les classes de haut niveau

• Listes

– Sélection d’éléments (textes et/ou images) dans une liste de choix

– Différents types de listes :

• MULTIPLE sélection multiple

• EXCLUSIVE sélection simple

• IMPLICIT sélection simple et confirmation

Ahcène Bounceur

Retour sur les classes de haut niveau

• Formulaires

– Peuvent contenir tous les éléments qui héritent de la classe Item

– Disposition en rangées de tailles égales

– Scrollbars gérées automatiquement

Ahcène Bounceur

Retour sur les classes de haut niveau

• TextField

– saisie avec contraintes

– deux composantes :

• label + texte

Ahcène Bounceur

Retour sur les classes de haut niveau

• StringItem

• Affichage de textes

• deux composantes :

– label + texte

Ahcène Bounceur

Retour sur les classes de haut niveau

• ImageItem

• Affichage d’images

• Un objet ImageItem doit

contenir une référence à

un objet Image

Ahcène Bounceur

Retour sur les classes de haut niveau

• ChoiceGroup

– Sélection

Ahcène Bounceur

Retour sur les classes de haut niveau

• DateField

– Saisie date ou heure

Ahcène Bounceur

Retour sur les classes de haut niveau

• Gauge

– Indicateurs

Ahcène Bounceur

Retour sur les classes de haut niveau

• Spacer

– Composant :

• vide

• non interactif

• de taille minimum

Utile pour positionner au plus juste les autres éléments

Ahcène Bounceur

Retour sur les classes de haut niveau

• TextBox

– saisie et édition de texte

Ahcène Bounceur

Retour sur les classes de bas niveau

• Canvas

– Classe abstraite, l’étendre pour réaliser un affichage

– Surcharger la méthode paint(Graphics g)

• Graphics => services de rendu 2D

• Possibilité de gérer les touches ou d’utiliser des commandes

Ahcène Bounceur

Retour sur les classes de bas niveau

• Exemple :

Ahcène Bounceur

INTERACTION UTILISATEUR Chapitre 4

Ahcène Bounceur

Interaction utilisateur

• objet Command

– équivaut au bouton ou menu item dans une application standard

– ne peut être associé qu’aux objets qui héritent de Displayable

– est défini par :

• ses labels affichés par le téléphone selon l’espace disponible

• le type de commande BACK, CANCEL, OK …

• une priorité d’affichage

Ahcène Bounceur

Interaction utilisateur

• Interface CommandListener

– Permet de réaliser des actions déclenchées par l’activation d’un objet Command

– Cette interface contient une méthode :

• commandAction(Command c, Diplayable d)

– Ce listener est enregistré grâce à la méthode de la classe Displayable :

• setCommandListener(CommandListener cl)

Ahcène Bounceur

Interaction utilisateur

• Exemple :

Ahcène Bounceur

Interaction utilisateur

• Classe abstraite CustomItem

– Permet de créer un élément d’interaction personnalisé

– Marche à suivre :

• hériter de CustomItem

• implémenter les méthodes suivantes : – public int getPrefContentWidth(int height)

– public int getPrefContentHeight(int width)

– public int getMinContentWidth()

– public int getMinContentHeight()

– public void paint(Graphics g, int w, int h)

Ahcène Bounceur

Interaction utilisateur

• Exemple 1/2 :

Ahcène Bounceur

Interaction utilisateur

• Exemple 2/2 :

Ahcène Bounceur

PERSISTANCE Chapitre 3

Ahcène Bounceur

Record Management Store

• API qui permet aux MIDlets de lire et enregistrer des données sur l’appareil

• Seul moyen de persistance sur la plupart des téléphones (JSR 75 sur les plus récents)

Ahcène Bounceur

Record Management Store

• RecordStore

– Une sorte de base de données constituée d’enregistrements persistants au fur et à mesure des instanciations de la MIDlet

Ahcène Bounceur

Record Management Store

• RecordStore

– Toutes les opérations sur un « RecordStore » sont :

– atomiques

– Synchrones

– Sérialisées

⇒pas de corruption en cas d’accès multiples

• Synchronisation :

– timestamp

– numéro de version

Ahcène Bounceur

Record Management Store

• RecordStore

– Une MIDlet peut :

• créer plusieurs « RecordStore »

• accéder aux « RecordStore » des autres MIDlets

• autoriser l’accès à son « RecordStore » par d’autres MIDlets (depuis MIDP 2.0)

=> le nom du record store doit être connu

Ahcène Bounceur

Record Management Store

• RecordStore

– Espace disponible pour la persistance variable selon les appareils (8ko minimum, pas de maximum

– Conseil : fixer l’attribut -> MIDlet-Data-Size dans le manifeste et le JAD

– L’appareil peut refuser l’installation si il n’y a pas assez de place

• Dans la pratique, la plupart des appareil permettent d’excéder le seuil fixe

Ahcène Bounceur

Record Management Store

• RecordStore

– Enregistrement :

• un id

• une suite de bytes

Ahcène Bounceur

Record Management Store

• Ouverture d’un RecordStore

– Nom : 1 à 32 caractères unicodes (sensible à la casse)

• unique dans une MIDlet suite* donnée

• noms identiques autorisés pour 2 MIDlets de suite différentes

*MIDlet appartenant à la même archive jar

Ahcène Bounceur

Record Management Store

• Fermeture d’un RecordStore

Ahcène Bounceur

Record Management Store

• Suppression d’un RecordStore

Ahcène Bounceur

Record Management Store

• Lister les RecordStore

Ahcène Bounceur

Record Management Store

• Insérer un enregistrement dans un RecordStore

– Méthode addRecord() classe RecordStore

• Insertion bloquante et atomique

• retourne l’ID du nouvel enregistrement

Ahcène Bounceur

Record Management Store

• Mettre à jour un enregistrement dans un RecordStore

– Méthode setRecord() classe RecordStore

– Nécessaire de connaître l’ID de l’enregistrement concerné

public int getRecord(int recordId, byte[] buffer, int offset)

public byte[] getRecord(int recorded)

Ahcène Bounceur

Record Management Store

• Supprimer un enregistrement dans un RecordStore

– Méthode deleteRecord() classe RecordStore

– Nécessaire de connaître l’ID de l’enregistrement concerné

• Cet ID ne sera plus utilisé par la suite …

Ahcène Bounceur

Record Management Store

• Flux de données en écriture

Ahcène Bounceur

Record Management Store

• Flux de données en lecture

Ahcène Bounceur

Record Management Store

• Enumération d ’enregistrements

– Interface RecordEnumeration

Ahcène Bounceur

Record Management Store

• Filtrer une énumération

– Interface RecordFilter

– Implémenter la méthode

boolean matches(byte[] candidate)

Ahcène Bounceur

Record Management Store

• Trier une énumération

– Interface RecordComparator

– Implémenter la méthode

int compare (byte[] b1, byte[] b2)

Ahcène Bounceur