<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=MIDP</id>
	<title>MIDP - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=MIDP"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=MIDP&amp;action=history"/>
	<updated>2026-05-27T18:52:21Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=MIDP&amp;diff=46558&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=MIDP&amp;diff=46558&amp;oldid=prev"/>
		<updated>2025-10-19T03:25:25Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;MIDP&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039;obile &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;nformation &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039;evice &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;rofile&amp;#039;&amp;#039;) war ein Profil der &amp;#039;&amp;#039;Java Micro Edition&amp;#039;&amp;#039; ([[Java ME]]), das speziell auf die Fähigkeiten kleiner [[Mobilgerät]]e wie [[Mobiltelefon]] oder [[Personal Digital Assistant|PDA]] ausgelegt war. Es umfasste daher Funktionen zur Ansteuerung und Abfrage von [[Internationale Fernmeldeunion|ITU]]-T Einhandtastaturen, Miniaturbildschirmen, flüchtigem und nicht-[[Random Access Memory|flüchtigem Speicher]] im Kilobyte-Bereich etc.&lt;br /&gt;
&lt;br /&gt;
MIDP-Applikationen heißen [[MIDlet]]s.&lt;br /&gt;
&lt;br /&gt;
MIDP ist ein [[Sandbox]]modell, was große Sicherheit gegenüber [[Computervirus|Computerviren]] oder [[Hacker]]angriffen gewährleistete. Der Benutzung von Netzwerkeinrichtungen geht eine Bestätigung vom Benutzer voraus, der sie explizit für jedes MIDlet bei erforderlichem Verbindungsaufbau erlauben muss.&lt;br /&gt;
&lt;br /&gt;
== Hardwarevoraussetzungen ==&lt;br /&gt;
Die Spezifikation MIDP 2.0 stellt Forderungen für die minimale Hardwareausstattung eines Gerätes auf. Unter anderem muss das Gerät eine [[Bildauflösung|Displayauflösung]] von 96×54 Pixeln, 384 Kilobyte [[Arbeitsspeicher]], eine [[Internetverbindung]] sowie eine (virtuelle) Soundausgabe besitzen. Da MIDP allerdings auf die [[CLDC]]-Konfiguration aufsetzt, sind viele Hardwarevoraussetzungen bereits dadurch bestimmt.&lt;br /&gt;
&lt;br /&gt;
== MIDP 2.0 ==&lt;br /&gt;
Gegenüber der Version 1.0 ist die derzeit verbreitete Version 2.0 (mit der Variante 2.1) deutlich leistungsfähiger. Es gibt eine Reihe von Features, die den aktuellen Funktionsumfang von Java ME-Anwendungen ausmachen:&lt;br /&gt;
* Abspielen von Sound (WAV, MID, MP3)&lt;br /&gt;
* Video-Streaming (benötigt zusätzlich Multimedia-API)&lt;br /&gt;
* Game-API mit Sprites, Layern etc.&lt;br /&gt;
* Unterstützung von HTTPS, Sockets, Serielle Schnittstelle&lt;br /&gt;
* Push-Architektur (Server kann MIDlets aktivieren)&lt;br /&gt;
* OTA-Provisioning (Verbreitung über Funknetz)&lt;br /&gt;
&lt;br /&gt;
== MIDP-APIs ==&lt;br /&gt;
&lt;br /&gt;
=== Benutzeroberfläche ===&lt;br /&gt;
MIDP-[[Programmierschnittstelle|APIs]] für die [[Grafische Benutzeroberfläche|Benutzeroberfläche]] bieten dem Entwickler ein minimales Set aus User-Interface-Elementen ([[Benutzerschnittstelle|UI]]), um eine [[Interaktivität]] zwischen Benutzer und MIDlet zu ermöglichen. Es befindet sich im Paket javax.microedition.lcdui. Man unterscheidet zwischen der Low- und High-Level-API.&lt;br /&gt;
&lt;br /&gt;
==== High-Level-API ====&lt;br /&gt;
[[Datei:UI-API.svg|400px|miniatur|Low- und High-Level-API des MID-Profils]]&lt;br /&gt;
Die High-Level-API stellt Ein- und Ausgabefelder, wie z.&amp;amp;nbsp;B. Textfelder (&amp;lt;code&amp;gt;TextField&amp;lt;/code&amp;gt;) oder Fortschrittsanzeigen (&amp;lt;code&amp;gt;Gauge&amp;lt;/code&amp;gt;), zur Verfügung. Sie sind der Elternklasse &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; untergeordnet. Objekte von &amp;lt;code&amp;gt;Item&amp;lt;/code&amp;gt; können auf einem Formular platziert werden, sind jedoch nur eingeschränkt positionierbar. Formulare sind Objekte der Klasse &amp;lt;code&amp;gt;Form&amp;lt;/code&amp;gt;. Sie können an das aktuelle &amp;lt;code&amp;gt;Display&amp;lt;/code&amp;gt; angehängt werden und verschiedene UI-Elemente enthalten. Das MIDlet kann Wechsel zwischen Formularen anfordern sowie während der Laufzeit UI-Elemente hinzufügen und auf Benutzereingaben reagieren.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten UI-Elemente sind:&lt;br /&gt;
* &amp;lt;code&amp;gt;Form:&amp;lt;/code&amp;gt; Container für andere UI-Elemente.&lt;br /&gt;
* &amp;lt;code&amp;gt;Command:&amp;lt;/code&amp;gt; Repräsentiert einen Menüeintrag. Mehrere Kommandos können in einem Menü zusammengefasst und an ein Formular angehängt werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;Alert:&amp;lt;/code&amp;gt; [[Pop-up]]-Nachrichten, die den Benutzer über Fehler, [[Exception]]s, Warnungen oder über sonstige Informationen benachrichtigen.&lt;br /&gt;
* &amp;lt;code&amp;gt;ChoiceGroup:&amp;lt;/code&amp;gt; Implementiert eine Selektionsmöglichkeit zwischen mehreren Einträgen. Die Auswahl ausschließlich einzelner (engl. single choice) oder auch mehrerer Einträge (engl. multiple choice) ist möglich.&lt;br /&gt;
* &amp;lt;code&amp;gt;TextField:&amp;lt;/code&amp;gt; Einzeilige Eingabefelder, in denen der Benutzer Text einfügen bzw. editieren kann.&lt;br /&gt;
* &amp;lt;code&amp;gt;TextBox:&amp;lt;/code&amp;gt; Ähnlich einem &amp;lt;code&amp;gt;TextField&amp;lt;/code&amp;gt;, allerdings mehrzeilig.&lt;br /&gt;
* &amp;lt;code&amp;gt;Gauge:&amp;lt;/code&amp;gt; Fortschrittsanzeige.&lt;br /&gt;
* &amp;lt;code&amp;gt;[[Nachrichtenticker|Ticker]]:&amp;lt;/code&amp;gt; Anzeige von sich bewegendem Text.&lt;br /&gt;
&lt;br /&gt;
==== Low-Level-API ====&lt;br /&gt;
Im Gegensatz hierzu arbeitet die Low-Level-API auf [[Pixel]]ebene. Die Klasse &amp;lt;code&amp;gt;Canvas&amp;lt;/code&amp;gt; ist der Eingangspunkt für grafische Darstellungen. Sie selbst enthält hierfür keine Methoden, jedoch stellt sie die Callback-Funktion &amp;lt;code&amp;gt;paint()&amp;lt;/code&amp;gt; bereit. Sie wird immer dann aufgerufen, wenn der Programmmanager entscheidet, das &amp;lt;code&amp;gt;Display&amp;lt;/code&amp;gt; neu zu zeichnen. Ihr einziger Parameter ist ein Objekt &amp;lt;code&amp;gt;Graphics&amp;lt;/code&amp;gt;, welches sämtliche Zeichnungsfunktionen, wie beispielsweise &amp;lt;code&amp;gt;drawLine()&amp;lt;/code&amp;gt; zum Zeichnen einer Linie oder &amp;lt;code&amp;gt;fillRect()&amp;lt;/code&amp;gt; zum Ausfüllen eines Rechtecks, enthält.&lt;br /&gt;
&lt;br /&gt;
Grundsätzlich kann man zwischen reinen Hintergrundapplikationen und jenen unterscheiden, die mit dem Benutzer interagieren. Interaktive Applikationen können auf das Display über ein Objekt &amp;lt;code&amp;gt;Display&amp;lt;/code&amp;gt; zugreifen. Man erhält es als Rückgabeobjekt der statischen Methode &amp;lt;code&amp;gt;getDisplay()&amp;lt;/code&amp;gt; mit dem MIDlet als Argument. Die Methode &amp;lt;code&amp;gt;setCurrent()&amp;lt;/code&amp;gt; bestimmt, welches Objekt &amp;lt;code&amp;gt;Displayable&amp;lt;/code&amp;gt; den Inhalt eines Displays darstellen soll. &amp;lt;code&amp;gt;Displayable&amp;lt;/code&amp;gt; ist die Elternklasse von &amp;lt;code&amp;gt;Screen&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Canvas&amp;lt;/code&amp;gt;. Ihr sind alle UI-Klassen unterstellt. Mit anderen Worten, sie definiert sämtliche Objekte, die am Display angezeigt werden können.&lt;br /&gt;
&lt;br /&gt;
=== Record Management System (RMS) ===&lt;br /&gt;
[[Datei:RMS-Struktur.svg|256px|miniatur|RMS-Struktur]]&lt;br /&gt;
&lt;br /&gt;
MIDP stellt spezielle APIs für die permanente Speicherung von Daten bereit, die die Realisierung einfacher [[datenbank]]gestützter [[Anwendungsprogramm]]e erlaubt. Die Speicherung von Daten innerhalb des [[Dateisystem]]s ist aus Gründen der Portabilität nicht in MIDP selbst enthalten, sondern im JSR 75&amp;lt;ref&amp;gt;[https://jcp.org/en/jsr/summary?id=75 jcp.org]&amp;lt;/ref&amp;gt; spezifiziert.&lt;br /&gt;
&lt;br /&gt;
MIDP stellt für die persistente Speicherung von Daten eine eher rudimentäre Alternative zur Verfügung, das Record Management System (RMS). „Persistent“ bedeutet hierbei die Erhaltung der Daten nach mehrmaligen Neustarts des MIDlets und des Mobilgerätes, selbst nach einem Batteriewechsel. Das RMS befindet sich im Paket javax.microedition.rms.&lt;br /&gt;
&lt;br /&gt;
[[Datei:RMS-Datenbankstruktur.svg|150px|miniatur|RMS-Datenbankstruktur]]&lt;br /&gt;
&lt;br /&gt;
Ein MIDlet kann beliebig viele Datenbanken als Instanzen von RecordStore eröffnen. MIDlets innerhalb einer Suite können auf die gleichen Datenbanken zugreifen. MIDlets aus verschiedenen Suiten bleibt der Zugriff verwehrt. Selbst wenn der Name der Datenbank zweier solcher MIDlets gleich ist, existieren zwei getrennte Datenbanken. Erst die MIDP-2.0-Spezifikation erlaubt einen geteilten Datenbankzugriff. Eine RMS-Datenbank befindet sich in einer plattformspezifischen Umgebung. Um das Konzept der Plattformunabhängigkeit von [[Java (Technologie)|Java]] zu erhalten, implementiert das RMS intern mehrere auf das jeweilige System abgestimmte Routinen, so dass nach außen hin abstrakte Methoden für Datenbankoperationen verfügbar sind.&lt;br /&gt;
&lt;br /&gt;
Ein RecordStore besteht aus einer Sammlung von Byte[[Feld (Datentyp)|arrays]] mit einer zugehörigen, eindeutigen [[Identifikator|ID]] beginnend bei 1. Sie wird als [[Primärschlüssel]] (engl. primary key) genutzt. IDs von gelöschten Einträgen werden nicht wiederverwertet. Wird ein neuer Eintrag hinzugefügt, erhält er die nächsthöhere ID der größten jemals vorgekommenen ID. Ein RecordStore kann sich in vier Zuständen befinden.&lt;br /&gt;
[[Datei:Lebenszyklus RMS-DB.svg|320px|miniatur|Lebenszyklus einer RMS-Datenbank]]&lt;br /&gt;
Zunächst wird ein RecordStore vom Zustand &amp;#039;&amp;#039;Not Exists&amp;#039;&amp;#039; mit &amp;lt;code&amp;gt;openRecordStore()&amp;lt;/code&amp;gt; und einer Bezeichnung (max. 32 Zeichen) als Argument erstellt. Besteht die Datenbank bereits, erfolgt der Übergang vom Zustand &amp;#039;&amp;#039;Closed&amp;#039;&amp;#039;. Im darauffolgenden Zustand &amp;#039;&amp;#039;Open&amp;#039;&amp;#039; kann die Datenbank mit den Methoden &amp;lt;code&amp;gt;addRecord()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;setRecord()&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;deleteRecord()&amp;lt;/code&amp;gt; modifiziert werden, wobei ein [[Zeitstempel]] (engl. timestamp) den Zeitpunkt ihrer letzten Änderung markiert und ein Zähler nach jeder Änderung inkrementiert wird. Mit &amp;lt;code&amp;gt;getRecord()&amp;lt;/code&amp;gt; werden Datensätze unter Angabe ihrer ID ausgelesen. Greifen mehrere [[Thread (Informatik)|Threads]] auf ein RecordStore zu, ist es Aufgabe des MIDlets, diese Zugriffe zu koordinieren. &amp;lt;code&amp;gt;closeRecordStore()&amp;lt;/code&amp;gt; schließt die Datenbank und führt sie in den Zustand &amp;#039;&amp;#039;Closed&amp;#039;&amp;#039; über. In diesem Zustand ist kein Zugriff auf die Datenbank möglich und führt bei einem solchen Versuch zu einer &amp;lt;code&amp;gt;RecordStoreNotOpenException&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;deleteRecordStore()&amp;lt;/code&amp;gt; löscht die Datenbank und der Zustand &amp;#039;&amp;#039;Not Exists&amp;#039;&amp;#039; wird erreicht. RecordStore definiert die Methode &amp;lt;code&amp;gt;enumerateRecords()&amp;lt;/code&amp;gt; mit Hilfe derer Datensätze gefiltert oder sortiert werden können. Sie liefert ein Objekt &amp;lt;code&amp;gt;RecordEnumeration&amp;lt;/code&amp;gt; zurück, das einen flexiblen Umgang mit einer RMS-Datenbank erlaubt. Diese Schnittstelle weist große Ähnlichkeit zur Implementierung einer klassischen verketteten Liste auf. Sie enthält Methoden zum dynamischen Durchlaufen der Datensätze sowie Abfragen, ob es ein nächstes oder vorheriges Element gibt etc. Weitere Schnittstellen sind die Klassen &amp;lt;code&amp;gt;RecordListener&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;RecordFilter&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;RecordListener&amp;lt;/code&amp;gt; erlaubt das Abfangen von Ereignissen, wie z.&amp;amp;nbsp;B. Modifikationen der Datenbank, sodass entsprechende Reaktionen gesetzt werden können. Mit &amp;lt;code&amp;gt;RecordFilter&amp;lt;/code&amp;gt; können Datensätze auf bestimmte Kriterien überprüft werden.&lt;br /&gt;
&lt;br /&gt;
== Verteilen eines MIDlet ==&lt;br /&gt;
Die Verteilung von MIDlets, also die Zusammenstellung zu einer Programmdatei, erfolgt als [[Java Archive]] (JAR). Zusätzlich ist noch eine beschreibende Textdatei spezifiziert, der Java Archive Descriptor (JAD). Viele Mobiltelefone verlangen heute aber keine JAD-Datei mehr, sondern entnehmen die nötigen Informationen dem sog. &amp;#039;&amp;#039;Manifest&amp;#039;&amp;#039;, einer im JAR enthaltenen Textdatei mit ähnlichem Aufbau und Inhalt.&lt;br /&gt;
&lt;br /&gt;
Ein JAR kann dabei mehrere MIDlets enthalten, die man dann auch als &amp;#039;&amp;#039;Midlet-Suite&amp;#039;&amp;#039; bezeichnet. Natürlich sind im Archiv jeweils nur die kompilierten .class-Dateien und kein Quelltext enthalten. Selbst diese werden meist noch mit einem [[Obfuskation (Software)|Obfuscator]] behandelt.&lt;br /&gt;
Neben dem Programmcode enthält das JAR oft auch die notwendigen Ressourcen wie Sounds, Grafiken etc.&lt;br /&gt;
&lt;br /&gt;
Im JAD bzw. Manifest sind u.&amp;amp;nbsp;a. Informationen enthalten zu&lt;br /&gt;
&lt;br /&gt;
* Name und Version der MIDlet-Suite&lt;br /&gt;
* Name, Icon und Programmdateien der MIDlets&lt;br /&gt;
* Anzahl der Bytes in der JAR-Datei (nur JAD)&lt;br /&gt;
* Erforderliches Java ME-Profil sowie erforderliche Konfiguration, d.&amp;amp;nbsp;h. CLDC-Version&lt;br /&gt;
&lt;br /&gt;
Zusätzlich haben einige Hersteller wie Nokia Erweiterungen spezifiziert. Auch benutzerdefinierte Einträge zur Konfiguration der Anwendung ähnlich wie [[Kommandozeilenparameter]] sind möglich.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Connected Device Configuration]]&lt;br /&gt;
* [[CLDC]]&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.oracle.com/technetwork/java/index-jsp-138820.html Mobile Information Device Profile (MIDP); JSR 118] bei [[Oracle]]&lt;br /&gt;
* [http://www.zdnet.de/builder/program/0,39023551,20000854,00.htm Einführung in die MIDP-Anwendungsentwicklung mit dem Wireless Toolkit] zdnet.de&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java (Programmiersprache)|Midp]]&lt;br /&gt;
[[Kategorie:Abkürzung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>