Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
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