21
Martin Løbger – IT Konsulent [email protected]

Martin Løbger – IT Konsulent [email protected]

Embed Size (px)

Citation preview

Page 1: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Martin Løbger – IT [email protected]

Page 2: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Rich vs. Reach

En introduktion til J2ME/JavaME

Page 3: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

The Chasm

Reach Rich

J2ME iPhone Android

Symbian Windows Mobile

Page 4: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Konsulentens svære valg

• ...er ikke så svært

J2ME Symbi

an

iPhone/Android

Windows

Mobile

Rich

Reach

Page 5: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Symbian

• Eget af Nokia

• På vej mod Open Source

• Forum Nokia

• Carbide.c++ C/C++ IDE– Baserete på Eclipse 3.3 + plugins

Page 6: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

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_Platforms/Symbian_C++/Code_and_Examples.xhtml

Page 7: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Java

• Udviklet af SUN Microsystems

• Fortolket sprog

• Bytekode

• Pakket i JAR filer (zip format)

• Obfuscating

• Magic token: CAFEBABE

Page 8: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

J2ME

Page 9: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

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

Page 10: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

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

Page 11: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

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.0http://java.sun.com/javame/downloads/sdk30.jsp

– Nokia S40http://www.forum.nokia.com/Resources_and_Information/Tools/Platforms/Series_40_Platform_SDKs

– Sony Ericssonhttp://developer.sonyericsson.com/site/global/docstools/java/p_java.jsp

– LGhttp://developer.lgmobile.com/lge.mdn.tnd.RetrieveTNDInfo.laf

– Blackberry– Skype/Amoi– Windows Mobile

Page 12: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Java – næsten som vi kender det

J2SEpublic class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); }}

J2MEimport javax.microedition.midlet.MIDlet;

public class Hello extends MIDlet { public void startApp() { System.out.println("Hello, World!"); }}

Page 13: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Hello World

Demo

Page 14: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

/** * 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"; }

Page 15: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

/** * 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"; }

Page 16: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

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(); } }

Page 17: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Test, test & test

• Modning

• Fysiske devices– Alle producenter– Bredt udsnit af modeller (eks. Nokia S40 + S60)– Skærmstørrelser– JSR features

Page 18: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Remote Device Access Serviceshttp://apu.ndhub.net/

Page 19: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Deploying

• Bluetooth

• MMS

• Web Server– Mimetypes

• .jar application/java-archive• .jad text/vnd.sun.j2me.app-descriptor

Page 20: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

JAD & JAR

JAD – Java DescriptorMIDlet-1:

Main,,dk.hiq.helloworld.MainMIDlet-Jar-URL:

[webserver]/HelloWorld.jarMIDlet-Name: PanicWorld MIDlet SuiteMIDlet-Vendor: MIDlet Suite VendorMIDlet-Version: 1.0.0MicroEdition-Configuration: CLDC-1.1MicroEdition-Profile: MIDP-2.1

JAR – Java Archive• Zip fil• .class filer• Manifest• Resources (read only)

Page 21: Martin Løbger – IT Konsulent martin.lobger@hiq.dk

Konklusion

• Reach– Tja, i teorien– Man kan dog komme langt

• Code once, deploy many– Nok snarere: Code a couple of times, deploy many