Programmierung von Embedded Devices mit der Java 2 Plattform

Werbung
Java-Kurs: J2ME
Programmierung von Embedded Devices
mit der Java 2 Plattform, Micro Edition
David Vogler
[email protected]
Steinbeis-Transferzentrum Softwaretechnik
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.1
Übersicht
Java 2 Plattform, Micro Edition (J2ME)
MIDlets
Struktur eines MIDlets
Grafische Oberfläche
Speichern von Daten
Netzwerkzugriff über HTTP
Vorbesprechung der Laborübung
Palm OS Plattform - Entwicklungsprozess
Kompilieren und Installieren im Emulator
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.2
Javakurs: J2ME
J2ME - CLDC - MIDP
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.3
Java 2 Plattformen
Server &
Enterprise
Computer
Optionale
Pakete
Java 2
Enterprise
Edition
(J2EE)
Desktop
Computer
Optionale
Pakete
Java 2
Standard
Edition
(J2SE)
High−End
Consumer Geräte
Low−End
Consumer Geräte
Smart−
Cards
Persönliches Profil
Java Virtual Machine
Foundation Profil
MIDP
CDC
CLDC
Java Card
APIs
KVM
CardVM
Java 2 Micro Edition (J2ME)
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.4
Java 2 MicroEdition
Hierarchischer Aufbau der Micro Edition
Profil(e)
CLDC
{
CLDC Bibliotheken
Virtuelle Maschine
Host Betriebssystem
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.5
Java 2 MicroEdition
J2ME als Untermenge + Erweiterungen zu J2SE
Java
Standard
Edition
Java
Micro
Edition
MIDP
CLDC
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.6
J2ME - CLDC
Connected Limited Device Configuration
160 bis 512 Kilobytes Hauptspeicher verfügbar
16-bit oder 32-bit Prozessor
geringer Stromverbrauch, oft batteriebetrieben
Verbindung zu einem Netz, oft schnurlose
Verbindungen, die unterbrochen werden können und
auf eine Bandbreite von 9600 kBit/s beschränkt sind
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.7
J2ME - MIDP
Mobile Information Device Profile
Memory:
128 KB nichtflüchtiger Speicher für MIDP Komponenten
8 KB nichtflüchtiger Speicher für Daten der Anwendungen
32 KB flüchtiger Speicher für die Virtual Machine
Display:
Bildschirmgröße: 96x54
Farbtiefe: 1-bit
Pixel Shape: annähernd 1:1
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.8
J2ME - MIDP
Mobile Information Device Profile
Eingabe:
Einer oder mehrere der folgenden Eingabemechanismen:
„einhändiges” Keypad
„beidhändige” Tastatur
Touch-Screen
Netz-Verbindungen:
Zwei-Wege-Verbindung
Wireless
wird möglicherweise unterbrochen
limitierte Bandbreite (9600 kBit/s)
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.9
J2ME - MIDP
MIDP Spezifikation
Die MIDP-Spezifikation umfasst folgende Bereiche:
User Interface Unterstützung: Limited Connected
Device User Interface (LCDUI)
Netzwerk-Unterstützung (basierend auf HTTP)
Persistente Datenspeicherung: Record Management
System (RMS)
Verschiedene Klassen wie Timer und Exceptions
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.10
Javakurs: J2ME
MIDlets
Life-Cycle
User Interface
Kommandos
Command Listener
Record Management System
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.11
Life-Cycle
Konstruktor:
Initialisierung der Anwendung
Erzeugen von Screens und Objekten für den Programmstart
Erster Bildschirm für den Benutzer
startApp():
Wird vom Application-Manager aufgerufen
Macht Screen via Display.setCurrent() sichtbar
Freigesetzte Ressourcen von pauseApp() beachten!
pauseApp():
Unbenutzte Ressourcen freigeben!
destroyApp():
Alle Ressourcen freigeben
Alle Threads stoppen
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.12
Zustandsübergänge
new PhoneBook()
pauseApp()
Paused
Active
startApp()
destroyApp()
Destroyed
destroyApp()
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.13
User Interface Klassenhierarchie
Display
0..1
Displayable
Canvas
Alert
Screen
List
TextBox
Form
0..n
Item
StringItem
ImageItem
TextField
DateField
ChoiceGroup
Gauge
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.14
User Interface
Screen Klassen:
List: Auswahlliste mit vordefinierten Werten
TextBox: Texteingabe-Feld
Alert: Informationsanzeige (Text/Bild), zeitlich begrenzt
Form: Container für unterschiedliche UI-Elemente:
StringItem: Strings
ImageItem: Bilder (PNG-Format)
TextField: Texteingabe
DateField: Zeit- und Datumsanzeige
Gauge: Grafische Darstellung von Werten
ChoiceGroup: Einzel- oder Mehrfachauswahl
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.15
Kommandos
Kommandos und Kommandotypen
MIDP Anwendungen definieren Commands:
Werden einem screen hinzugefügt:
Displayable.addCommand()
Das Command-Objekt hat drei Parameter:
Label: Bezeichner für den Anwender
CommandType: Typ des Kommandos.
Priority: Anordnung auf dem Display
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.16
Aktionen
Command Listener
Anwendungs-Handling der Kommandos über Listener-Modell
Jedes Displayable-Objekt hat einen einzelnen Listener
Wird ein Command gewählt, so wird der Listener aufgerufen
Listener werden registriert: Displayable.setCommandListener()
Objekt muss das Interface CommandListener und die Methode
commandAction() implementieren
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.17
Hello World
package j2mekurs;
import javax.microedition.midlet .∗;
import javax.microedition. lcdui .∗;
public class HelloWorld extends MIDlet implements CommandListener {
private Command exitCommand;
private TextBox tb;
public HelloWorld() {
exitCommand = new Command("Exit", Command.EXIT, 1);
tb = new TextBox("Hello MIDlet", "Hello, World!" , 15, 0);
tb .addCommand(exitCommand);
tb .setCommandListener(this);
}
...
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.18
Hello World
...
protected void startApp() {
Display.getDisplay(this ). setCurrent(tb );
}
protected void pauseApp() {}
protected void destroyApp(boolean u) {}
public void commandAction(Command c, Displayable d) {
if ( c == exitCommand) {
destroyApp(false);
notifyDestroyed ();
}
}
}
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.19
List Beispiel
List list = new List("Border Style", Choice.EXCLUSIVE)
list .append("None", null);
list .append("Plain", null );
list .append("Fancy", null);
// Kommando hinzufuegen
list .addCommand(backCommand);
list .addCommand(okCommand);
...
public void commandAction(Command cmd, Displayable d) {
if ( cmd == okCommand) {
int i = ( List )d.getSelectedIndex();
// Index des ausgewaehlten Listenelements benutzen
} else if ( cmd == backCommand) {
// " back" Kommando abarbeiten
}
}
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.20
RecordStores
recordId 1
recordId 5
recordId 10
recordId 2
RecordStore
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.21
Umgang mit RecordStores
RecordStores werden über einen Bezeichner angesprochen:
openRecordStore(RSName, true)
Methoden für RecordStores:
getName(): liefert Name des RecordStores
getNumRecords(): liefert Anzahl der Records
getSize(): Anzahl Bytes im RecordStore
getSizeAvailable(): Verfügbarer Platz auf dem Palm
getNextRecordId(): recordId für den nächsten Record
getVersion(): Version des RecordStore. +1 bei jedem Zugriff
getLastModified(): System.currentTimeMillis des letzten Zugriffs
Methoden für Records:
addRecord(): byte array, offset und Länge als Parameter
deleteRecord(): Löschen über recordId
getRecordSize(): Länge eines Records
getRecord(): liefert byte array über recordId
setRecord(): Überschreiben eines Records
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.22
Javakurs: J2ME
Laborvorbesprechung
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.23
Palm OS Plattform
Palm Vx Kennzeichen:
8 MB Hauptspeicher
Dragonball 68xxx Prozessor
Taktfrequenz 30 MHz
Infrarot-Schnittstelle
serielle Schnittstelle
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.24
PhoneBookMIDlet
Hauptmenü
Neuer Eintrag
Telefonverzeichnis
Listen und Kommandos
Textfelder
Schreiben ins RMS
Listen
Lesen aus dem RMS
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.25
Entwicklungsablauf
Entwicklungs-Workstation
runtime
verifier
PhoneBook.java
javac
interpreter
PhoneBook.class
preverifier
PhoneBook.class
Ziel-Plattform
(KVM runtime)
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.26
JAR Manifest/Application Deskriptor
JAR-Manifest:
Informationen, wie die JAR-Datei aufgebaut ist
name-value Paare für MIDlet Attribute
Application Deskriptor:
Zusätzliche MIDlet-Informationen
MIDlet-Jar-Size und MIDlet-Jar-URL vorgeschrieben
helloworld.jad:
MIDlet−Name: HelloWorld
MIDlet−Version: 1.0
MIDlet−Vendor: STZ Softwaretechnik
MIDlet−Description: HelloWorld for J2ME devices.
MicroEdition−Profile: MIDP−1.0
MicroEdition−Configuration: CLDC−1.0
MIDlet−1: helloworld, helloworld.png, helloworld.HelloWorldMIDlet
MIDlet−Jar−URL: helloworld.jar
MIDlet−Jar−Size: 1397
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.27
Javakurs: J2ME
Literatur und Quellen im Internet
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.28
Literatur/Internet
Buchempfehlung:
Programming Wireless Devices with the Java 2
Platform, Micro Edition, Roger Riggs, Antero
Taivalsaari und Mark VandenBrink.
Addison-Wesley, Juni 2001. ISBN: 0-201-74627-1
URLs:
J2ME: http://java.sun.com/j2me/
Palm OS: http://www.palmos.com/
j2mekurs.tex – Java-Kurs: J2ME – David Vogler – 13/3/2004 – 11:30 – p.29
Herunterladen