Programmierung von Mobiltelefonen Symbian OS / Java history

Werbung
Programmierung von Mobiltelefonen
mit Java
Carsten Köhn
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Symbian OS / Java history
Symbian OS Version 5.0 <=> JDK 1.1.4
basierende Implementierung
Symbian OS Version 6.0 <=> Personal Java
Ab Symbian OS Version 7.0 <=> Java 2
Micro Edition (J2ME)
Die neuste Generation der Symbian OS
Telefone unterstützt MIDP 2.0 und eine
Auswahl an zusätzlichen Java-konformen
APIs
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
1
User Interface bei Symbian OS
Derzeit wird bei Symbian OS zwischen drei
User Interfaces unterschieden
Mobiltelefone mit einem numerischen Keypad
Series 60 Platform
Einhand Betrieb
Flexible UI für Joystick, Softkey, Jogdail
Basiert auf Nokia 7650, 3650, N-Gage
Series 60 ebenfalls lizensiert für Panasonic,
Samsung, Sendo and Siemens
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Die Handys
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
2
User Interface 2
Mobiltelefone mit touch screen UIQ
Größere Displays als Series 60 Telefone
Dadurch bessere Navigation bei pen-based
interaktionen
Modellbeispiel: Sony Ericsson P800
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Mobiltelefon mit Touchscreen
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
3
User Interface 3
Mobiltelefone mit vollen Keyboard
Series 80 Plattform
Größter Display von allen Symbian OS
Telefonen
Ebenfalls mit touch screen
Modellbeispiel: Nokia 92xx Series, 9500
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
9x Handys
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
4
Programmbeispiel Hello World
#include <e32base.h>
#include <e32cons.h>
LOCAL_D CConsoleBase* gConsole;
//Real main function
void MainL()
{
gConsole->Printf(_L("Hello world!\n"));
}
//Console harness
void ConsoleMainL
{
// Get a console
gConsole = Console::NewL(_L("Hello Text"),
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Programm Hello World
// Pause before terminating
User::After(5000000); // % second delay
// Finished with console
CleanupStack::PopAndDestroy(gConsole);
}
// Cleanup stack harness
GLDEF_C TInt E32Main()
{
__UHEAP_Mark;
CTrapCleanup* cleanupStack = CTrapCleanup::New();
TRAPD(error, ConsoleMainL());
__ASSERT_ALWAYS(!error, User::Panic(_L("SCMP"), error));
delete cleanupStack;
__UHEAP_MARKEND;
return 0;
}
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
5
Beschreibung zu dem Programm
Die Hauptarbeit wird in der ersten Befehlszeile programmiert
//Real main function
void MainL()
{
gConsole->Printf(_L("Hello world!\n"));
}
Aus dem printf() das in C zur Textausgabe genutzt wird ist hier
Console->Printf
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Gründe für Java
Ausgereifte Laufzeitumgebung
Weite Verbreitung der Programmiersprache
Objektorientierter Programmieransatz
Sicherheit
Definierte Schnittstellen
Ursprünglich ist Java für mobile Endgeräte
bzw. Thin clients entwickelt worden
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
6
J2ME
Neues und kleinstes Mitglied der Java Familie
Teil der Java Architektur um für, von der
Leistung her eingeschränkte Geräte, wie z.B.
Mobiltelefone zu programmieren.
Gruppierung nach so genannten
„configurations“ und noch einen Schritt
weiter in verschiedene „profiles“ unterteilt,
welche die Java API´s weiter verfeinern.
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
J2ME
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
7
Java Progammversionen
J2EE – Java 2 Enterprise Edition
Server-Lösungen
Erweiterte Standard Edition für
Unternehmensanwendungen
Applikationsserver
Enterprise Java Beans
J2SE – Java 2 Standard Edition
Desktop-Lösungen
Applets und Desktopanwendungen
Standard API
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
J2ME – Java 2 Micro Edition
Java Microsystems bietet (momentan) zwei
Geräteklassen (Configurations)
CDC – Connected Device Configuration
High-end Consumer Devices
Pocket PCs, set-top-Boxen, Bildschirmtelefone,
Autoinfotainment-Systeme
Farbdisplays, TCP/IP-Übertragung, >1MB Speicher
CLDC – Connected Limited Device Configuation
Mobiltelefone, Pager, Organizer, …
SW-Display, Speicher bis 512KB, …
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
8
configurations
Eine Konfiguration besteht aus der Kombination
einer Virtual Machine mit einem minimalen Set von
Klassen Bibliotheken, die die Basisfunktionalität
einer Gerätegruppe liefern. (z.B. Speicherverwaltung
oder Prozessorleistung)
Während eine configuration den kleinsten
gemeinsamen Nenner für eine Gerätegruppe liefert,
setzt das profile auf ihr auf, um die API´s für
bestimmte Geräteklassen bereitzustellen.
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
CDC – Connected Device Configuration
PDAs, set-top Boxen, Smartphones
Keine Einschränkung zur Standard JVM
Reduzierter Speicherbedarf und optimierte virtuelle
Maschine (CVM)
Anforderungen:
32 Bit Prozessor
vollständiges OS
mind. 2 MB Speicher
512 KB Java Umgebung
256 KB Laufzeit Umgebung
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
9
CDC – Profile
Profile setzen auf den Configurations auf und
erweitern die zur Verfügung stehende API
Foundation Profil
Basis für weitere Profile der CDC
RMI Profil
noch nicht abschließend spezifiziert. „Remote Method
Invocation“
Personal Profil
integriert Personal Java in die CDC, z.B. GUI Funktionalität
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Struktur der J2ME (CDC)
J2ME
Profil Ebene
(Personal Profile)
Configuration Ebene (CDC)
C Virtual Machine
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
10
CLDC – Connected Limited Device
Configuration
definiert über den JSR30
[http://jcp.org/en/jsr/detail?id=30]
für Geräte mit den folgenden Eigenschaften
160 KB bis 512 KB Speicher für die Java Plattform
vorhanden
16-bit oder 32-bit Prozessor
niedriger Stromverbrauch | meist über Akku
temporäre Netzwerkverbindung, möglicherweise wireless
und mit max. 9600
160KB Mindestanforderung = 128KB nicht flüchtiger
Speicher für die JVM und die CLDC-Bibliotheken +
32KB flüchtiger S. als Java runtime object memory
Aufwärtskompatibel zur CDC
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
CLDC – Profile
Mobile Information Device Profil (MIDP)
Methoden zur Ansteuerung kleiner Displays
Framework zur Ausführung so genannter
MIDlets
Java API for Bluetooth
vollständig spezifiziert
PDA Profil
unvollständig spezifiziert
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
11
Struktur der J2ME (CLCD)
J2ME
Profil Ebene (MIDP)
Configuration Ebene (CLDC)
K (Kauai oder Kilo) Virtual Machine
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
MIDP
ermöglicht das Ausführen mehrerer MIDP Anwendungen (so
genannte MIDlets )
definiert:
wie das MIDlet gepackt ist
was für eine Laufzeitumgebung zur Verfügung steht
wie es sich in Bezug auf die oft limitierten Ressourcen verhalten
soll
MIDlet´s können zu so genannten Suites zusammengefasst
werden, um Ressourcen zu teilen
jede MIDlet Suite hat eine beschreibende Datei, welche es der
Application Management Software (AMS) erlaubt vor der
Installation zu wissen was installiert wird
jedes MIDlet beerbt die Klasse MIDlet in
javax.microedition.midlet
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
12
Core Libraries
Einige Klassen wurden von J2SE geerbt. Hier gilt:
Klassen müssen gleich heißen
Pakete müssen gleich heißen oder Subsets der
entsprechenden Pakete sein
die Semantik der Klassen muss gleich bleiben
MIDP:
>erbt folgende Klassen via CLDC von J2SE:
java.lang
java.io
java.util
und stellt weitere Klassen in
javax.microedition und Unterpaketen zur Verfügung
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Networking I/O
Programmierer muss kaum etwas über die Fähigkeiten des Geräts
wissen
Networking und I/O werden mit Hilfe des gleichen Interfaces
implementiert
Alle Verbindungen werden mit einer Methode der Klasse Connector
erstellt
Beispiele:
HTTP:
Connector.open("www.foo.com");
Sockets: Connector.open("socket://192.168.0.1:9000");
Datagrams: Connector.open("datagram://192.168.0.1");
Dieses Verhalten basiert auf dem Generic Connection Framework
(GCF), welches folgende Schnittstellenarten unterstützt:
serieller input
serieller output
datagram Kommunikation
verbindungsorientiert, z.B. TCP/IP
Benachrichtigungs-Mechanismus für Client-Server Kommunikation
basic web server connections
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
13
Sicherheit
Java Klassen sind überprüft und garantieren, dass sie gültige JavaAnwendungen sind. Die Klassen werden nach dem Kompilieren
vorgeprüft (pre-verified), so dass die CLDC Implementierung weniger
leisten muss um das .jar zu verifizieren
nur ein begrenztes, vordefiniertes Set an JavaAPI´s steht zur
Verfügung
Das Herunterladen und Managen der Anwendungen findet auf dem
native code Level innerhalb der VM statt. Keine vom Anwender
definierbaren class-loader stehen zur Verfügung.
Das Set der native functions, die der VM zur Verfügung stehen kann
nicht erweitert werden.
Der Programmierer kann Klassen bestimmter Pakete nicht
überschreiben
weitere Schutzmechanismen werden über das Profil realisiert
Kritische Anmerkungen s.
http://www.heise.de/newsticker/meldung/52321
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
MIDlet Suite
RMS – von beiden MIDlets gemeinsam
benutzte Ressource. Beinhaltet Grafiken
und Sounds, aber auch eine kleine
Datenbank, z.B. für Benutzerdaten oder
HIghscores.
JAD – beschreibt das MIDlet =======>
Hello.jad:
MIDlet-1: Hello, HelloEBV.png, Helloworld
MIDlet-Jar-Size: 32694
MIDlet-Jar-URL: Hello.jar
MIDlet-Name: Hello
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-2.0
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
14
MIDlet Lifecycle
Die AMS startet das MIDlet und steuert auch seine Zustände.
Quelle: Wiley Programming Java 2
Micro Edition for Symbian OS.(2004)
1.AMS erstellt eine neue Instanz eines MIDlets und ruft den Konstruktor des
MIDlets auf. Anwendung ist dann PAUSED. Tritt hier ein Fehler auf wird in
den DESTROYED Status gewechselt.
2.AMS führt startApp() aus. Nun ist die Anwendung ACTIVE und das MIDlet
beginnt zu laufen.
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Grundgerüst eines MIDlets
Public
{
public
{
}
public
{
}
public
{
}
public
{
}
class MIDletTest extends MIDlet
MIDletTest() //Konstruktor
void startApp()
void pauseApp()
void destroyApp(boolean unconditional)
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
15
Erstellen eines MIDlets
Kompilieren – javac
Preverifizieren – preverify.exe
Packen – jar
Descriptor (JAD) erstellen – editpad
Uebung 1
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Erste Uebung
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MeinErstesHandyProgramm extends MIDlet {
private Display display = null;
public MeinErstesHandyProgramm(){}
// Diese Methode ist notwendig, denken Sie an das Applet
public void startApp() {
display = Display.getDisplay(this);
display.setCurrent(new TextBox("TextBox", "Willi hat
Husten", 50, 0));
}
// Diese Methode ist notwendig
public void pauseApp() { }
// Diese Methode ist notwendig
public void destroyApp(boolean unconditional) { }
}
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
16
Zusätzliche Informationen
BAT-Datei zur Abarbeitung der Befehle
Plattform zur Ausführung (Emulator)
Klassendatei für die MIDlets
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Die Klasse Displayable – MIDP UI API
Es wird immer nur ein Displayable Objekt auf einmal auf dem Screen angezeigt
jedes MIDlet wird mit einem DisplayableObjekt initialisiert:
Display.setCurrent(Displayable);
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
17
Das J2ME Wireless Toolkit
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Anlegen eines neuen Projekts
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
18
Verzeichnisstruktur
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Uebung 2
Übertragen Sie den Source Code für das
zweite Programm „Hello World“ in das
richtige Verzeichnis und legen Sie ein neues
Projekt an
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
19
Klassendesign
MIDlet
Displayable
CommandListener {I}
Canvas
Display
HelloWorld
MyHelloCanvas
Command
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Screen / Display
Screen kümmert sich um
Interaktion mit der Anwendung
Rendern, Scrollen, grafische Anpassungen
unabhängig von dem Gerät auf dem es läuft
Die Benutzer-
Display ist der Display Manager
Es gibt folgende „Arten“ von Displayable Objects
complex – von Screen abgeleitete Objekte, wie z.B. List
oder TextBox
generic – auch von Screen abgeleitet, kann aber andere
Objekte beinhalten, z.B. Form, TextField
user defined frames – von Canvas abgeleitete, frei
definierbare Anzeige
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
20
Event Model
Das Event Model (durch javax.microedition.lcdui implementiert)
läuft auf High- und Low Level APIs
managt die Benutzer Interaktion und fordert Screen-redraws
reagiert durch „calls“ ans MIDlet
UI Events
Abstrakte Kommandos repräsentierende Events. Z.B. Exit bei Nokia
immer unten rechts (via addCommand())
Tasten drücken und loslassen / bzw. pointer events [Touch Screen]
Aufrufe an die paint-Methode einer Canvas Klasse (z.B. repaint() )
Aufruf von run() eines runnable Objekts.
werden immer serialisiert abgearbeitet
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Die Command Klasse
ein CommandListener reagiert auf Commands
Command enthält folgende Infos:
short label
long label (optional)
type [BACK, CANCEL, EXIT, HELP, ITEM, OK,
SCREEN, STOP]
priority [int] z.B. als Hilfe, welche Commands
angezeigt werden
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
21
Uebung 03 mit der Game Canvas
Displayable
Display
Runnable {I}
Canvas
Sprite
MySprite
backwards( )
tick( )
getDirection()
GameCanvas
MyPauseCanvas
paint( )
MyGameCanvas
start( )
stop( )
run( )
draw(Graphics)
createSprite( )
:mySprite
MIDlet
HelloWorld
startApp( )
pauseApp( )
destroyApp( )
commandAction(Command,Disp
layable)
Command
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Hinweise zur Uebung 03
Dieses HelloWorld Beispiel ist etwas umfangreicher
als das erste und „sauberer“ programmiert
es gibt drei Commands über die sich der MIDlet
Ablauf steuern lässt
exit=new Command("Exit",Command.EXIT,1);
Helloworld.java
pause=new Command("Pause",Command.ITEM,2);
resume=new
Command("Resume",Command.ITEM,2
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
22
Hinweise zur Uebung 03
zwei Canvas werden benutzt. Eine beerbt die seit
MIDP2.0 zur Verfügung stehende Klasse
GameCanvas (in javax.microedition.lcdui.game ),
die andere ist von Canvas (javax.microedition.lcdui)
abgeleitet. Die Commands werden sinngemäß auf
sie verteilt
gameCanvas.addCommand(exit);
Helloworld.java
gameCanvas.addCommand(pause);
gameCanvas.setCommandListener(this);
die Klasse Helloworld (extends MIDlet) dient als
CommandListener.
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Weitere Feinheiten
>Die Klasse MyGameCanvas implementiert Runnable und läuft als Thread.
synchronized void start() {
running=true;
thread=new Thread(this);
thread.start();
}
MyGameCanvas.java
>Ausserdem hat die Klasse ein Sprite-Objekt, welches via factory pattern
erstellt wird.
private MySprite createSprite() {
Image image=null;
int height=0;
int width=0;
image = Image.createImage("/Splash.png");
width = image.getWidth();
height = image.getHeight() / MySprite.RAW_FRAMES;
return new MySprite(image, width, height);
}
MyGameCanvas.java
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
23
Hinweise zu Sprites
>Die Animation des Labels wird über ein Sprite Objekt realisiert.
>Erstellt man eine Instanz der Klasse Sprite, mit der rechts zu
sehenden Grafik (splash.png) und den Informationen über die
Pixelmaße eines einzelnen Frames, so stehen einem viele
nützliche Methoden zur Verfügung um mit dem Sprite zu arbeiten
>wichtig: die Pixelgröße der Datei muss ein ganzzahliges
Vielfaches der Größe eines einzelnen Frames sein
Sprite(Image image, int frameWidth, int frameHeight) //konstruktor
nextFrame()
//nächstes frame
setFrameSequence(int[] sequence) //frame reihenfolge
setRefPixelPosition(int x, int y)
//Referenz Pixel auf x/y
setTransform(int transform)
//drehen, spiegeln
paint(Graphics g)
//“malt“ das sprite
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Übung 4
Ein gegebenes Bild auf dem Handy anzeigen
Uebung04
try {
image = Image.createImage ("/Duke.png");
}
catch (IOException e) {
throw new RuntimeException ("Bild nicht
gefunden: "+e);
}
Fügen Sie dazu Duke in das passende Verzeichnis und passen
Sie den Quellcode an
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
24
Ein TextCanvas in einer eigenen Klasse
Uebung05
Korrigieren Sie den Quellcode
Verändern Sie die Farbe des Displays
Verändern Sie weitere Details der Anzeige
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Zeichnen von geometrischen Formen
Uebung06 ist Kunst
Malen von geometrischen Formen auf das Canvas z.B.
Binden Sie Teile diese Codes in das bestehende Programm ein
for (int x = 0; x < w; x += 10)
g.drawLine(0, w - x, x, 0);
int z = 50;
g.drawRect(z, z, 20, 20);
z += 20;
g.fillRoundRect(z, z, 20, 20, 5, 5);
z += 20;
g.drawArc(z, z, 20, 20, 0, 360);
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
25
Uebung07
Überarbeiten Sie die Auswahlliste
Verändern Sie den Ticker
Bringen Sie das Programm zum laufen…
Tipp:
public AuswahlMenue() {
liste = new List("Namensliste:
",Choice.EXCLUSIVE);
}
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
Uebung08
Spiel programmieren
Gegeben sind verschiedene Quellen
Ordnen Sie die Sourcen einem neuen Projekt
zu und korrigieren Sie „wirklich nur einen
kleinen Fehler“
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
26
Übertragen der Programme auf das Handy
Bitte suchen Sie sich ein Programm für Ihr
Handy aus
Je nach Möglichkeit kann die Übertragung
per Kabel, WAP, Blue Tooth, Infra Rot
erfolgen
Hier spielt dann die JAD-Datei zur
Evaluierung eine wichtige Rolle
Prof. Dr.- Ing. Carsten Köhn
LABOR FÜR MEDIEN,
INTERNET UND ROBOTIK
27
Herunterladen