Posts Tagged mobile
LWUIT – een lichtgewicht ui toolkit voor Java ME
Posted by admin in Uncategorized on April 17th, 2009
Introductie
Ooit al eens een Java ME applicatie ontwikkeld voor een specifiek type mobiele telefoon? Wanneer het aankomt op het ontwikkelen van een gelikte interface loop je er al snel tegen aan dat de MIDP implementatie van de telefoon van invloed is op hoe de widgets van de applicatie getoond worden. Nadeel daarvan is dat de UI er op een ander type mobiel nogal anders uit kan zien. Om die reden was men voorheen nog wel eens geneigd om wat dieper in de code te duiken en de wat specifiekere (geliktere) widgets op de (javax.microedition.lcdui.)Canvas uit te werken. Deze Canvas ondersteunt sinds MIDP-2.0 een fullscreen modus: het is mogelijk om de complete applicatie direct op Canvas te ontwikkelen. Hiervan maakt LWUIT gebruik.
Mogelijk, maar wel bijzonder tijds-intensief, tenzij je gebruik maakt van het werk van anderen die al wat voorwerk hebben verricht op dit gebied. Een mooi voorbeeld hiervan is “LWUIT”, een door Sun ontwikkelde open-source UI toolkit. In tegenstelling tot het ontwerpen van UI’s met standaard Java ME is het met LWUIT mogelijk om op een Swing-achtige manier user interfaces te maken: layout managers, maar ook de pluggable look & feel, het MVC concept en “lightweight componenten” (componenten maken geen gebruik van de native UI controls, maar verzorgen zelf hun rendering en event handling) zijn terug te vinden.
Setup simpele MIDlet
Een MIDlet maken waarin met LWUIT een paar knoppen wordt getoond is simpel voor elkaar te krijgen via de volgende stappen:
Binnen NetBeans is het handig om de LWUIT jar toe te voegen als library via ‘Tools’, ‘Libraries en dan de ‘New Library…’ knop. Geef naam, type = ‘Class Libraries’, dan: ‘OK’ en ‘Add JAR/Folder…’: en selecteer het bestand “LWUIT.jar” dat te vinden is in de ‘lib’ dir van de LWUIT installatie (unzippen van de zip file). Het ‘LWUIT_stripped.jar’ bestand is de LWUIT library zonder code die gebruik maakt van JSR 184 (M3G: Mobile 3D Graphics), JSR 75 (PIM: Personal Information Management, FC: File Connection) of JSR 226 (SVG: Scalable 2D Vector Graphics).
Start vervolgens een nieuw project, kies als categorie ‘Java ME’ en als project ‘Mobile Application’ en druk op ‘Next’. Het is niet nodig om NetBeans een default MIDlet aan te laten maken; het vinkje bij ‘Create Hello MIDlet’ mag weg. Druk weer op ‘Next’. Selecteer de WTK die je hebt geïnstalleerd als ‘Emulator Platform’. LWUIT vereist minimaal MIDP-2.0 bovenop CLDC-1.1, dus i.p.v. MIDP-2.1 die default geselecteerd is zou je MIDP-2.0 kunnen kiezen, maar dit hoeft niet. Druk op ‘Finish’. Maak nu een nieuwe MIDlet aan met de naam ‘MyMIDlet’ en kopieer de volgende code er naartoe:
import com.sun.lwuit.*;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.layouts.BoxLayout;
import javax.microedition.midlet.MIDlet;
public class MyMIDlet extends MIDlet {
Form form1;
public void startApp() {
Display.init(this);
form1 = new Form("LWUIT Demo Form");
form1.addCommand(new Command("Quit") {
public void actionPerformed(ActionEvent ae) {
destroyApp(true);
notifyDestroyed();
}
});
form1.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
Button l = new Button("Left");
l.setAlignment(Label.LEFT);
Button r = new Button("Right");
r.setAlignment(Label.RIGHT);
Button m = new Button("Middle");
m.setAlignment(Label.CENTER);
form1.addComponent(l);
form1.addComponent(r);
form1.addComponent(m);
form1.show();
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
Omdat het project de LWUIT jar nog niet kent zal je een aantal foutmeldingen zien: via de project properties kan je onder de ‘Build’ categorie ‘Libraries & Resources’ kiezen. Voeg de LWUIT library die je eerder hebt aangemaakt toe. Omdat er slechts 1 MIDlet in het project zit zal deze MIDlet automatisch gestart worden wanneer je het project right-clickt en dan ‘Run’ selecteert. Het resultaat hiervan is een simpele LWUIT applicatie met een paar knopjes!
MVC
Een aardige illustratie van het MVC concept bij LWUIT is de List. Voeg het volgende stuk code in voor de ‘form1.show()’ uit het vorige voorbeeld.
String[] bands = new String[]{
"AC/DShe",
"Public Enema",
"Beverly Beerbellies",
"Shirley Temple Pilots",
"Wynona Riders"};
List list = new List(bands);
form1.addComponent(list);
.
Resultaat
Zelf de implementatie van ListModel en ListCellRenderer verzorgen heeft als extra voordeel dat je de reeds bestaande data types direct kan gebruiken en er geen sprake hoeft te zijn van “state copying”: er is geen voorbepaald data type wat in de List past.
Ook goed om te weten is dat de List z’n Model alleen maar vraagt naar de data-elementen die op het scherm zichtbaar zijn. Dit (performance) aspect wordt belangrijker naarmate de hoeveelheid data groeit of bijv. vanaf een remote locatie moet worden binnengehaald.
Conclusie
Via de bovenstaande stappen is het relatief makkelijk om snel een simpele LWUIT applicatie te maken. Met name voor de ontwikkelaars die hun app op meerdere typen mobiele telefoons willen draaien zal het een aangename verrassing zijn om te zien dat deze voorbeeld-applicatie op alle mobieltjes (die MIDP-2.0/CLDC-1.1 supporten) in uiterlijk en gedrag hetzelfde zal zijn. In een volgende blog zal ik wat verder ingaan op “fancier features” zoals Transitions en Theming; het oog wil immers ook wat!
Nokia 6131 NFC
Posted by Arjan Schaaf in Uncategorized on June 6th, 2007
Nokia 6131 NFC
Finally: the Nokia 6131 NFC mobile phone has arrived from Finland! I have been waiting for this model ever since we developed an application on the first generation of the Nokia NFC mobile phones.
The first generation of NFC phones by Nokia existed of two models: the 3220 and 5140i. We succesfully deployed a Java ME NFC application on these models, but this was far from trivial.
We knew that most of our problems would be solved by the second generation of NFC phones by Nokia, but nobody knew what this model would be exactly capable of.
Just to give you an idea of the challenges we had to cope with using the first generation of NFC phones:
1. Java applications had to be smaller than 125kB.
2. The NFC client library was not pre-installed and had to be included in your Java application, so the available space for the actual application was even smaller than 125kB!!
3. The NFC client library was a Nokia proprietary API, which is very inconvenient for a number of reasons:
- Your application wouldn’t be compatible with any other NFC phones by other manufacturers (for example Samsung’s NFC phone).
- Nokia didn’t make the SDK available freely, developers had to buy a license for the SDK.
4. The capabilities of the phones were very limited and outdated. For example: no bluetooth, limited Java ME API’s and a very small screen.
Luckily Nokia has improved itself with the second generation of NFC phones! The new phone is based on the Nokia 6131 clamshell device.

This model is a very up-to-date phone based on the latest Series40 generation of Nokia. Therefore this model includes for example bluetooth, Java ME API’s for webservices and integration with the phone PIM. And almost last but not least: the Java ME applications can now be as big as 1 MB!!
But the real improvement is in the NFC API. The new phone includes support for the standardized API: JSR-257. This API was developed by the JCP and can be used for contactless communication (for example: barcodes and off-course NFC).
LINKS:
nokia 6131 NFC page: http://forum.nokia.com/devices/6131_NFC
NFC blog: http://www.nfc-development.org/
JSR-257: http://www.jcp.org/en/jsr/detail?id=257
luminis® mobility focus group: http://mobility.luminis.nl/
