|Home||News and Upcoming Conferences.||Hermes
This page provides a summary of Java support on current mobile phones, and is a by-product of our work towards developing Bluetooth applications for phones.
Java support on mobile phones currently means that some form of J2ME (Java 2 Platform Micro Edition) run-time environment is provided, unfortunately this is not very specific and there is a lot of variance between phones. I will start by outlining the different standards and packages for J2ME, provide some links to listing of standard supported by various phones, and end with some concluding remarks about Bluetooth support.
If you have a quick look at the Sun J2ME page there is a whole host of standards and API's - a J2ME implementation consists of a configuration (a VM implementation with base set of API's), a profile (higher level API's providing UI components etc) and optional additional API's. These configurations, profiles and API's are all carefully defined to support different classes of devices with different capabilities. A J2ME run-time is typically embedded in ROM so you can't easily add API's and change the classpath like with J2SE on a desktop!
The J2ME configuration provided on 99% of phones is the CLDC (Connection Limited Device Configuration), which is designed for things like mobile phones and PDA's with a small amount of memory and processing power. There is currently two version: CLDC 1.0 and CLDC 1.1 - 1.1 is backwards compatible with 1.0 and provides enhancements such as FPU support. CLDC is combined with the MIDP (Mobile Information Device Profile) profile to give the J2ME implementation found on most mobile phones. Presently there is two version of MIDP: 1.0 and 2.0 - MIDP 2.0 provides some nice improvements over the earlier version and is backwards compatible.
MIDP gives the programmer some basic user interface components, and access to the java.awt.Canvas class (which is used for the nice graphics seen in Java games). To start developing MIDlets (MIDP apps) there is a good guide here, and the Nokia Forums provide some guides too (under 'Resources' (on the left) > 'Documents' > 'Java'). Sun's Wireless Toolkit is excellent for building and testing applications, most importantly it allows you to select the VM specification you want to target. An important part of J2ME development for mobile phones is insuring that your target device supports the profile and API's you use in your application, otherwise it simply wont work. For example, in the Wireless toolkit open the 'Demo3D' project, built it an test it, this demo requires CLCD 1.0, MIDP 1.0 and the Mobile 3D Graphics API. If we were building an application for the Sony-Ericsson T630 (pretty common phone), which is CLDC 1.0, MIDP 1.0, we would have to go to 'Settings' > 'API Selection' and change the 'Target Platform' to 'MIDP 1.0'. Now if we try and build the application it fails miserably, this is becuase the Mobile Graphics API is not part of that configuration, and therefore is not supported on a T630.
There are some very good web resources listening the Java support of different devices:
Sun's J2ME Phone List: http://developers.sun.com/techtopics/mobility/device/device
Full phone specs from 'TastePhone': http://www.club-java.com/TastePhone/MIDP.jsp
MIDP 2.0 Supported Devices: http://www.benhui.net/modules.php?name=Midp2Phones
Bluetooth (JSR-82) Supported Devices: http://www.j2mepolish.org/devices/devices-btapi.html
Specs for Nokia Phones: http://www.forum.nokia.com/main/1,6566,015,00.html
Possibly the most depressing thing about Java support on phones is Bluetooth; many MIDP 1.0 and 2.0 phones have Bluetooth hardware built in, but do not support the optional J2SE Bluetooth API (JSR-82). Unluckily there is no way to access the BT hardware using Java without JSR-82 Support.