LoRa Packet Forwarder JSON Daten
25.12.2024
Elektronik | Funk | Software
Der Technik-Blog
Apps für Mobiltelefone gab es bereits vor den ersten Android-Smartphones oder iPhones. Bereits Anfang der 2000er-Jahre wurde Java als Programmiersprache für kleine Anwendungen auf Tastentelefonen eingesetzt. Einen App-Store gab es nicht, jedoch hatten viele Mobilfunk-Netzbetreiber eine eigene mobile Webseite, wo über GPRS oder UMTS kleine Anwendungen und Spiele heruntergeladen werden konnten. Später wurden Anwendungen und Spiele auch per Infrarot, Bluetooth oder USB als JAR-Datei auf die Telefone geladen bzw. unter den Nutzern ausgetauscht. In diesem Artikel geht es um die Einrichtung einer Entwicklungsumgebung für J2ME-Apps sowie um ein einfaches praktisches Programmierbeispiel für damals übliche Tastentelefone.
Achtung: Einige in diesem Artikel verwendete Desktop-Anwendungen werden seit vielen Jahren nicht mehr weiterentwickelt und können daher mit neueren Betriebssystemen nicht mehr kompatibel sein und Sicherheitslücken enthalten. Von einer Installation auf produktiven Systemen wird abgeraten!
J2ME ist die Java Plattform Micro Edition, welche speziell für portable Geräte wie Mobiltelefone oder PDAs entwickelt wurde. Mit der Zeit wurden die Endgeräte immer leistungsfähiger, sodass sich die Java Standard Edition auch in diesem Sektor durchsetzte. Vorteil von J2ME war auch die Unabhängigkeit der JavaRuntime, sodass J2ME-Anwendungen auf verschiedenen Betriebssystemen und Geräten wie Nokia, Sony Ericsson, Siemens usw. ausgeführt werden konnten. Die Grundlage dafür bildet die CDC (Connected Device Configuration), welche sich nicht nur auf Mobiltelefone beschränkt, sondern auch für DVB-Receiver und andere Multimedia-Geräte verfügbar ist. Die Anwendungsschnittstellen (API) dieser Laufzeitumgebung werden als "Profile" zur Verfügung gestellt und können für spätere Entwicklungen neue Funktionen bereitstellen.
Insbesondere bei Mobiltelefonen trifft man immer wieder auf das MID-Profil (Mobile Information Device Profile), von dem es wiederum mehrere Versionen gibt, die sich im Grundsätzlichen aber kaum unterscheiden. Die weitverbreiteten J2ME-Anwendungen werden in diesem Fall auch gerne als MIDlets bezeichnet. Das MID-Profil stellt in der High-Level-API I/O-Elemente wie Textfelder, Eingabefelder, Alarm-Boxen (Alerts), Fortschrittsanzeigen und vieles mehr bereit. Mit der Low-Level-API können wiederum Elemente auf Pixelebene erzeugt werden. Bei der Eingabe von Daten würde die High-Level-API beispielsweise zur Verarbeitung ganzer Zeichenketten (Texte, Nummern usw.) herangezogen werden, während die Low-Level-API einen einzelnen Tastendruck und dessen Betätigungszeitraum ermittelt. Letztes Beispiel findet vor allem in der Spieleentwicklung Verwendung. Das aktuell weit verbreitete MIDP 2.0 bzw. MIDP 2.1 unterstützt zudem auch HTTPS-Verbindungen, Streaming und multimediale Features für Spieleentwickler.
Es gibt verschiedene Möglichkeiten und Tools, mit denen J2ME MIDlets Apps entwickelt werden können. Für das folgende Praxisbeispiel wird eine ältere JDK-Version (Beispiel: J2SE Development Kit 5.0-22) benötigt, damit das ebenfalls notwendige Java WTK (Wireless Toolkit) ausgeführt werden kann. Optional ist auch ein besserer Texteditor wie Notepad++ sehr zu empfehlen, da dieser Java-Code übersichtlich darstellen kann. Weitere Informationen zu den notwendigen Tools und die Download-Links befinden sich in der Installationsanleitung von JDK & WTK.
Die erste J2ME MIDlet App ist sehr einfach und beinhaltet neben den minimal notwendigen Packages und Methoden ein einfaches Textfeld, wo ein zuvor definierter Text ausgegeben wird. Im Anschluss an den erfolgreichen Simulator-Test kann vom Java-Sourcecode eine JAR-Datei generiert werden, die auch auf den meisten Mobiltelefonen lauffähig ist. Zuerst wird das Java Wireless Toolkit geöffnet und ein neues Projekt erstellt. Der Projektname und der MIDlet Klassenname sind identisch und werden in diesem Fall als "MyFirstApp" bezeichnet:
Hinweis: Projektname und Klassenname können grundsätzlich frei gewählt werden, jedoch muss auch die Java-Datei und deren Start-Klasse richtig angepasst werden!
Klickt man auf "Create Project" wird das Projekt erstellt und es öffnet sich ein Fenster, wo die Target API Plattform ausgewählt wird. Die meisten Mobiltelefone unterstützen MIDP 2.1, daher können die Voreinstellungen direkt übernommen werden:
Optional besteht auch die Möglichkeit, einen anderen MIDlet-Name zu vergeben und sich als MIDlet-Vendor (Herstellername) zu verewigen. Diese Informationen werden auf vielen Mobiltelefonen unter den App-Details angezeigt. Die Parameter können unter dem Punkt "Required" verändert werden:
Nach einem Klick auf "OK" wird das Projekt erstellt und die Pfade zu den Projektdateien werden in WTK angezeigt:
Im Ordner "src" muss anschließend eine Java-Datei erstellt werden, die gleich benannt wird wie der zuvor vergeben Klassenname "MyFirstApp.java":
Anschließend wird die Java-Datei mit einem Texteditor geöffnet und der Code vom "Hello World"-Beispiel kopiert:
Hello World Beispielcode:
//More information at https://www.aeq-web.com import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class MyFirstApp extends MIDlet{ private Form formOne; private Display display; public MyFirstApp(){ super(); } public void startApp(){ formOne = new Form("FormOne Title"); formOne.append("Hello World! By AEQ-WEB!"); display = Display.getDisplay(this); display.setCurrent(formOne); } public void pauseApp(){ } public void destroyApp(boolean unconditional){ } }
Nach Speichern der Java-Datei kann ein Build in WTC erstellt werden. Dieser Vorgang dauert einige Sekunden und in der Console wird die Meldung "Build complete" ausgegeben:
Nach jeder Änderung im Sourcecode muss der Build-Vorgang erneut ausgeführt werden! Ein Klick auf "Run" startet nun den Simulator und führt den Java-Code aus:
Wenn die Anwendung fertig programmiert und getestet wurde, kann aus dem Projekt eine JAR-Datei generiert werden. Mit der JAR-Datei kann man die programmierte Anwendung auf einem Mobiltelefon installieren oder auch an andere Nutzer weitergeben. Unter dem Menüpunkt [Project]->[Package]->[Create Package] wird der Kompiliervorgang gestartet:
WTK generiert dabei eine JAR-Datei und eine JAD-Datei. Für die Installation und Weitergabe der App wird in der Regel nur die JAR-Datei benötigt. Beide Dateien befinden sich im Ordner "bin" im Hauptverzeichnis vom Projektordner:
Die JAR-Datei wird dann über Bluetooth, Infrarot oder USB an ein Mobiltelefon gesendet und kann dort installiert werden:
In den Ersten zwei Zeilen werden Packages mit folgenden Funktionen eingebunden:
[javax.microedition.lcdui]: Dieses Package wird als die UI-API bezeichnet und stellt viele Funktionen für die Erstellung von Benutzeroberflächen in MIDP-Anwendungen bereit. Diese API besteht aus der bereits erwähnten High-Level-API und Low-Level-API. Praktisch alle Elemente, welche auf den Bildschirm dem Anwender angezeigt werden, werden über die UI-API verarbeitet.
[javax.microedition.midlet]: Dieses Package ist für den Austausch zwischen der Anwendung selbst und der Umgebung, auf der die Anwendung läuft, zuständig. So kann die Laufzeitumgebung die Anwendung während eines Anrufs pausieren oder die Anwendung kontrolliert schließen. Dieses Package ruft Methoden wie startApp(), pauseApp(), resumeRequest(), destroyApp() und weitere auf.
In "public class MyFirstApp extends MIDlet{}" werden Form und Display deklariert, welche später vom Programm entsprechend beschreiben werden.
Public MyFirstApp(){} ruft mit super(); die Elternklasse auf.
Nachdem die App geladen wurde, wird die Methode startApp() aufgerufen. In dieser Methode wird nun für die aktuelle Form ein Titel vergeben und anschließend der Text "Hello World" an die Form angefügt. Die restlichen zwei Zeilen dieser Funktion schalten nun die Form auf den aktuellen Bildschirm.
Methoden wie pauseApp() oder destroyApp() werden von der Runtime zwar in bestimmten Situationen aufgerufen, jedoch beinhalten diese Methoden keine weiteren Befehle. Es finden daher keine weiteren Abläufe statt.
The Things Network kümmert sich lediglich um den Transport von LoRaWAN-Paketen, jedoch nicht um die Speicherung. Hier geht es um die Entwicklung einer Webapp.
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved