Introduction to J2ME/JavaME and Symbian Development
In this content, we delve into the world of J2ME/JavaME and Symbian development, exploring topics such as the challenges between "Rich vs. Reach", the evolution of Symbian OS, Java development with SUN Microsystems, MIDP, JSRs, and more. The narrative highlights key concepts, tools, and technologies essential for developers in the mobile space.
Download Presentation

Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.
E N D
Presentation Transcript
Martin Lbger IT Konsulent martin.lobger@hiq.dk
Rich vs. Reach En introduktion til J2ME/JavaME
The Chasm Reach Rich J2ME iPhone Android Windows Mobile Symbian
Konsulentens svre valg Reach ...er ikke s sv rt Symbian J2ME Rich iPhone/ Android Windows Mobile
Symbian Eget af Nokia P vej mod Open Source Forum Nokia Carbide.c++ C/C++ IDE Baserete p Eclipse 3.3 + plugins
Symbian OS API og C++ kode stilen static const char hellorom[] = hello ; _LIT(KHelloROM, "hello"); const char *helloptr = hellorom; TPtrC helloPtr(KHelloROM); http://www.forum.nokia.com/Resources_and_Information/Explore/Runtime_Platform s/Symbian_C++/Code_and_Examples.xhtml
Java Udviklet af SUN Microsystems Fortolket sprog Bytekode Pakket i JAR filer (zip format) Obfuscating Magic token: CAFEBABE
MIDP JSR 118 javax.microedition.io javax.microedition.lcdui javax.microedition.lcdui.game javax.microedition.media javax.microedition.media.control javax.microedition.midlet javax.microedition.pki javax.microedition.rms
Den (langt fra) komplette JSR liste JSR 75 File connection v1.0 and PIM v1.0 APIs JSR 82 APIs for Bluetooth v1.1 JSR 118 MIDP v2.1 JSR 120 Wireless Messaging API 1.1 JSR 135 Mobile Media API 1.1 (audio and video play, audio capture only; does not support video capture, camera control, or FM radio) JSR 139 Connected Limited Device Configuration (CLDC) 1.1 JSR 172 JAX-XML Web Services API (XML parsing) and JAX-RPC API JSR 177 Security and Trust Services APIs SATSA-APDU and SATSA-CRYPTO JSR 179 Location API 1.0 JSR 184 Mobile Graphics API 1.1 JSR 205 Wireless Messaging API 2.0 JSR 211 Content Handler API 1.0 JSR 226 Scalable 2D Vector Graphics API 1.0 JSR 234 Advanced Multimedia Supplements (3D Audio & Music, Audio mixing, including audio progressive upload and video progressive playback) 1.1 JSR 248 Mobile Service Architecture Subset API 1.0 Nokia UI API 1.1a
Kom godt igang NetBeans Eclipse Mobile Tools for Java (http://www.eclipse.org/dsdp/mtj) Tidligere kendt som EclipseME (http://eclipseme.org) SDK SUN Java Platform Micro Edition SDK 3.0 http://java.sun.com/javame/downloads/sdk30.jsp Nokia S40 http://www.forum.nokia.com/Resources_and_Information/Tools/Platforms/Series_40_Platform_SDKs Sony Ericsson http://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp LG http://developer.lgmobile.com/lge.mdn.tnd.RetrieveTNDInfo.laf Blackberry Skype/Amoi Windows Mobile
Java nsten som vi kender det J2SE public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } } J2ME import javax.microedition.midlet.MIDlet; public class Hello extends MIDlet { public void startApp() { System.out.println("Hello, World!"); } }
Hello World Demo
/** * Tries to retrieve the IMEI number of the phone. Not all platforms * supports this feature. * * @return The IMEI number or "na" if the platform does not support this * feature. */ protected String getIMEI() { String[] imeiProperties = { // Generic "IMEI", "phone.imei", "device.imei", "com.imei", // Nokia specific "com.nokia.IMEI", "com.nokia.mid.imei", // Sony Ericsson specific "com.sonyericsson.imei", // Motorola specific "com.motorola.IMEI", // Samsung specific "com.samsung.imei", // Siemens specific "com.siemens.imei" }; for (int i = 0; i < imeiProperties.length; i++) { try { if (System.getProperty("microedition.platform").startsWith("Nokia6280")) { continue; } String imei = System.getProperty(imeiProperties[i]); if (imei != null) { return imei; } } catch (Exception e) { } } return "na"; }
/** * Tries to retrieve the IMEI number of the phone. Not all platforms * supports this feature. * * @return The IMEI number or "na" if the platform does not support this * feature. */ protected String getIMEI() { String[] imeiProperties = { // Generic "IMEI", "phone.imei", "device.imei", "com.imei", // Nokia specific "com.nokia.IMEI", "com.nokia.mid.imei", // Sony Ericsson specific "com.sonyericsson.imei", // Motorola specific "com.motorola.IMEI", // Samsung specific "com.samsung.imei", // Siemens specific "com.siemens.imei" }; for (int i = 0; i < imeiProperties.length; i++) { try { if (System.getProperty("microedition.platform").startsWith("Nokia6280")) { continue; } String imei = System.getProperty(imeiProperties[i]); if (imei != null) { return imei; } } catch (Exception e) { } } return "na"; }
byte data[] = null; HttpConnection connection = (HttpConnection)Connector.open( http://hiq.dk/login.apsx , Connector.READ_WRITE); try { if (postData != null) { connection.setRequestMethod(HttpConnection.POST); connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); OutputStream os = connection.openOutputStream(); try { os.write(postData.getBytes()); // os.flush(); //Including this line may produce undesired results on certain devices /* * If you call os.flush(), some devices will send the * request in HTTP 1.1 "chunked" encoding by adding a * "Transfer-encoding: chunked" header to the request * and writing the size of each block of data in * hexadecimal form as a text line before the data bytes * themselves. This is repeated for any number of blocks * you send, usually demarcated by calls to flush(). If * you have a HTTP 1.1-compliant Web server this should * be transparent to your server side scripts, but if * you do not, you will either want to avoid calling * flush() (though some devices may still chunk for you * automatically) or write some HTTP 1.1 chunk handling * code in your server scripts. All you will need to do * in the latter case is read the first text line of the * response, extract the size from it (i.e. "C\r\n" * where C means 12 bytes of chunk follow), and then * read 12 bytes of response data. Then read another * line to see if there is another chunk size, and * repeat until stream is closed or your script has all * the data it needs. See the HTTP 1.1 specification for * more details. */ } finally { os.close(); } }
Test, test & test Modning Fysiske devices Alle producenter Bredt udsnit af modeller (eks. Nokia S40 + S60) Sk rmst rrelser JSR features
Remote Device Access Services http://apu.ndhub.net/
Deploying Bluetooth MMS Web Server Mimetypes .jar .jad application/java-archive text/vnd.sun.j2me.app-descriptor
JAD & JAR JAD Java Descriptor JAR Java Archive Zip fil .class filer Manifest Resources (read only) MIDlet-1: Main,,dk.hiq.helloworld.Main MIDlet-Jar-URL: [webserver]/HelloWorld.jar MIDlet-Name: PanicWorld MIDlet Suite MIDlet-Vendor: MIDlet Suite Vendor MIDlet-Version: 1.0.0 MicroEdition-Configuration: CLDC-1.1 MicroEdition-Profile: MIDP-2.1
Konklusion Reach Tja, i teorien Man kan dog komme langt Code once, deploy many Nok snarere: Code a couple of times, deploy many